GCP 組織の接続
GCP 組織全体を接続することで、個別に追加しなくても、現在と将来のプロジェクトをすべて自動的にオンボーディングできます。
前提条件
始める前に
- Google Cloud コンソールでプロジェクトの作成、サービスアカウントの作成、サービスアカウントの承認、ログの有効化を行うユーザーに適切なアクセス許可を付与します。
- VPC Service Controls を使用して Google が管理するサービスへのアクセスを制限する場合、例外を定義して Tenable にネットワークアクセスを許可する必要があります。
- Tenable が使用するサービスアカウントをホストする Google 組織ごとに専用のプロジェクトを作成します。Tenable にプロジェクトを接続する際にすでにプロジェクトを作成している場合は、そのプロジェクトを使用します。
- Google Cloud コンソールで専用プロジェクトの請求を有効にします。手順については、請求の有効化に関する Google のドキュメントを参照してください。
-
Terraform 固有
- Terraform CLI v0.13 以上をインストールしていることを確認します。
- terraform init が既存の設定と競合することなく、Google Cloud プロバイダー v7.11 以上をダウンロードしてインストールできることを確認します。
- API スロットリングの防止。GCP は、プロジェクトレベルで API レート制限を適用します。他のサービスアカウントとプロジェクトを共有すると、制限に達してブロックされるリスクが高まります。
- 経費の分離。 共有プロジェクトでは、請求データや使用状況データが不明瞭になり、Tenable サービスアカウントによって生成されたコストを正確に追跡することが難しくなります。
組織の接続
GCP 組織を接続する方法
- Tenable One Cloud Exposure コンソールで、[設定] > [統合] の順に移動し、[統合を追加] をクリックします。
- [統合ライブラリ] で、[GCP 組織] をクリックします。[GCP 組織] ウィザードが開きます。
- 設定ステップ (ステップ 1/2) で、次の操作を実行します。
- 統合の名前を入力します。
- 組織の ID を入力します。
[Google Workspace] で、既存の Google Workspace 統合を使用するかどうかを選択します。統合が存在しない場合は、[作成] をクリックして作成できます。
注意: Tenable では、アイデンティティ関連の可視性と完全なリスク評価を可能にするために、組織の Google Workspace を使用することを推奨しています。これにより以下が可能になります。- ユーザー、アクセス許可、最小権限の分析など、アイデンティティ関連の情報を可視化し、GCP クラウド環境全体のより包括的なリスク評価が可能になります。
- アイデンティティ、アクセス許可、アクセス関係を可視化できるため、リソースの可視化に加えて、セキュリティポスチャー管理も強化されます。
- [機能] で、有効にする機能を選択します。この選択により、必要なアクセス許可が決定され、デプロイメントスクリプトが動的に更新されます。Tenable では、最も包括的なセキュリティカバレッジを提供するために、すべての機能を有効にすることを推奨しています。詳細については、Google の必要なアクセス許可を参照してください。
- [デプロイメント] で、次のいずれかのデプロイオプションを選択します。
- Cloud Shell - スクリプトベースのデプロイメント。
- 管理プロジェクト ID を入力します。これは、この統合のサービスアカウントをホストする前提条件の ID です。
- クラウドサイバーエクスポージャー ウィザードに表示されるスクリプトをコピーし、スクリプトの内容を含むファイルを作成します。次に、それを Cloud Shell で実行し、クラウドサイバーエクスポージャー に必要なアクセス許可を付与します。
- Terraform - モジュールベースのデプロイメント。デプロイする前に、Terraform 固有の前提条件を参照してください。
- 管理プロジェクト ID を入力します。これは、この統合のサービスアカウントをホストする前提条件の ID です。
- Google Cloud コンソールで、作成したプロジェクトに移動します。
- [IAM & Admin] > [Labels] に移動し、[+ Add label] をクリックし、クラウドサイバーエクスポージャー ウィザードに表示されるキーと値のペアを追加します。
- クラウドサイバーエクスポージャー ウィザードに表示されるモジュール呼び出しをコピーして Terraform 設定に追加し、terraform apply を実行します。このモジュールはアイデンティティを作成し、環境に接続してスキャンするアクセス許可を Tenable に付与します。
手動 - Google Cloud コンソールを使用し、手動で設定します。詳細な手順については、GCP 組織の手動デプロイを参照してください。
警告: 手動デプロイメントが完了したらウィザードに戻り、デプロイメント後の手順と、ステップ 2 の範囲と階層を完了します。
- Cloud Shell - スクリプトベースのデプロイメント。
- [デプロイメント後] に、次の値を入力します。
- 値を取得する方法
- Cloud Shell: スクリプトの出力から値をコピーして貼り付けます。
- Terraform: Terraform の出力から値を取得します。
- 手動: これらの値を取得する方法については、GCP 組織の手動デプロイを参照してください。
- 共通の統合値
- これらの値は、組織およびそのすべてのメンバープロジェクトで同一である必要があります。
- 組織が接続されている場合、これらのフィールドは組織レベルでのみ更新できます。変更は、すべてのメンバープロジェクトに自動的に適用されます。
- サービスアカウントのメール
- Pub/Sub サブスクリプション名
- 値を取得する方法
- 完了したら、[次へ] をクリックします。
- 範囲ステップ (ステップ 2/2) で、次の操作を実行します。
- (オプション) [コンパートメント構造を自動的に更新] を選択して、コンパートメントの構造を Tenable 内のフォルダーとしてミラーリングし、その階層を維持して、ビューを同期させます。詳細については、アカウント階層とフォルダーを参照してください。
[範囲] で、オンボーディングするコンパートメントを選択します。
- 現在と将来のプロジェクトをすべて同期する (推奨)
- 特定のフォルダーとプロジェクトを含める
- 特定のフォルダーとプロジェクトを除外する
注意:
- フォルダー全体を含めるとグループ内の現在と将来のプロジェクトがすべて含まれ、フォルダー全体を除外するとすべて除外されます。
- フォルダーで特定のプロジェクトを含めるとそのプロジェクトのみが含まれ、フォルダーで特定のプロジェクトを除外するとそのプロジェクトのみが除外されます。
- [終了] をクリックします。
次の手順
組織が正常に追加された後
- 組織は、[統合] > [GCP 組織] ページで確認できます。
- 組織に属するアカウントは、[アカウント] > [GCP] ページで確認できます。ここからアカウントやプロジェクトの詳細を表示して、どの機能が有効になっているか、必要なアクセス許可が付与されているか、などを確認できます。
プロジェクトリソースに関するデータが クラウドサイバーエクスポージャー に表示されるようになります。すべてのデータが表示されるまでにかかる時間は、クラウド環境の規模によって異なります。
GCP 組織の手動デプロイ
スクリプトベースのデプロイメントの代わりに、Google Cloud コンソールから GCP 組織を手動でデプロイすることもできます。これは、GCP 組織を接続する際にデプロイメントタイプとして手動を選択した場合の手順です。
Tenable のサービスアカウントを作成する
Tenable が組織へのアクセスとモニタリングに使用する専用の GCP プロジェクトとサービスアカウントを作成します。
- Google Cloud コンソールで、作成した前提条件に移動します。
- [IAM & Admin] > [Roles] に移動し、[+ Create custom role] をクリックします。
- タイトル、説明、ID を入力します。
- [+ Add permissions] をクリックし、「Required Permissions」 の [Create Service Account] にリストされているアクセス許可を追加します。
- [Create] をクリックしてロールの作成を完了します。
- [IAM & Admin] > [Service Accounts] に移動し、[+ Create service account] をクリックします。
- [Service account name]、[ID]、[Description] を入力します。
- 生成されたサービスアカウントのメールをコピーして保存します。この値は、クラウドサイバーエクスポージャー に 組織の接続ときに、ウィザードの [デプロイメント後] セクションに入力する必要があります。
- [Create and continue] をクリックします。
- 作成したカスタムロールを選択して、[Continue]、[Done] をクリックします。
-
新しく作成したサービスアカウントを選択し、[Principals with access] タブ、[Grant access] の順にクリックします。
重要: アクセス権を付与できない場合は、IAM ポリシーでプリンシパルとして Tenable を選択できないようにするドメイン制限制約を含む組織ポリシーが存在している可能性があります。これにより、Tenable では作成されたサービスアカウントのなりすましが防止されます。この場合は、Tenable を許可されたドメインとして追加するで説明されている手順に従います。 - [Add principals] セクションで、[email protected] を [New principals] フィールドに入力します。
- [Assign roles] セクションで、[Service Account Token Creator] ロールを選択し、[Save] をクリックして終了します。
- [IAM & Admin] > [Labels] に移動し、[+ Add label] をクリックし、クラウドサイバーエクスポージャー ウィザードに表示されるキーと値のペアを追加します。
- キー: ermetic-external-id
- 値: クラウドサイバーエクスポージャー ウィザードの [デプロイメント] セクションに表示
- [Save] をクリックしてサービスアカウントの作成を完了します。
組織レベルでサービスアカウントを承認する
組織のスキャンとモニタリングを行うために Tenable が必要とするアクセス許可をサービスアカウントに付与します。
- Google Cloud コンソールで、画面の左上にあるプロジェクトピッカーを使用して、Tenable に接続する組織を選択します。
- [IAM & Admin] > [IAM] に移動し、[Grant access] をクリックします。
- [Add principals] セクションで、先ほど保存したサービスアカウントのメールを [New principals] フィールドに入力します。
- [Assign roles] セクションで、必要な機能に応じて関連するロールを選択します。
- [Save] をクリックして終了します。
監査ログを設定する
Pub/Sub トピック、サブスクリプション、ログシンクを設定して、GCP 監査ログを Tenable にストリーミングします。
- Google Cloud コンソールで、プロジェクトピッカーを使用して関連するプロジェクトを選択し、次の手順に従って Pub/Sub トピックを作成します。
- [Pub/Sub] > [Topics] に移動し、[+ Create topic] をクリックします。
- [Topic ID] フィールドに tenable-audit-logs を入力します。
- [Add a default subscription] のチェックを外します。
- [Enable message retention] を選択し、期間を 1 日以上に設定します。
- [Create] をクリックします。
-
次の手順に従って Pub/Sub サブスクリプションを作成します。
- [Pub/Sub] > [Subscriptions] に移動し、[+ Create subscription] をクリックします。
- [Subscription ID] フィールドに tenable-audit-logs-sub を入力します。
- 先ほど作成したトピックを選択します。
- [Delivery type] セクションで、[Pull] を選択します。
- [Message retention duration] セクションで、期間を 1 日以上に設定します。
- [Retry policy] セクションで、[Retry after exponential backoff delay] を選択し、デフォルト値のままにします。
- [Expiration period] セクションで、[Never expire] を選択します。
- [Create] をクリックします。
- 新しく作成されたサブスクリプションの [Permissions] タブで、[Add principal] をクリックします。
- [Add principals] セクションで、先ほど保存したサービスアカウントのメールを [New principals] フィールドに入力します。
- [Assign roles] セクションで、[Pub/Sub Subscriber] ロールを選択し、[Save] をクリックして終了します。
- Pub/Sub サブスクリプション名をコピーして保存します。この値は、クラウドサイバーエクスポージャー に 組織の接続ときに、ウィザードの [デプロイメント後] セクションに入力する必要があります。
-
次の手順に従って組織レベルのログシンクを作成します。
- プロジェクトピッカーで関連する組織を選択し、[Logging] > [Configure] > [Log router] の順に移動します。
- [Create sink] をクリックします。
- [Sink name] フィールドに tenable-audit-logs を入力し、[Next] をクリックします。
- シンクサービスの場合は、[Cloud Pub/Sub topic]、[Use a Cloud Pub/Sub topic in a project] の順に選択します。
- [Sink destination] フィールドで、[PROJECT_ID] と [TOPIC_ID] を関連する ID と置き換え、[Next] をクリックします。
-
[Include logs ingested by this organization and all child resources] を選択し、包含フィルターに以下を貼り付けます。
コピーLOG_ID(cloudaudit.googleapis.com/activity) OR
LOG_ID(cloudaudit.googleapis.com/data_access) OR
LOG_ID(cloudaudit.googleapis.com/policy) - [Next] をクリックします。
- [+ Add exclusion] をクリックします。
-
[Exclusion filter name] フィールドで、exclude-k8s-internal を入力し、以下を除外フィルターに貼り付けます。
コピーprotoPayload.authenticationInfo.principalEmail-:* OR
protoPayload.authenticationInfo.principalEmail=~"^system:" OR
protoPayload.authenticationInfo.principalEmail=~"@container-engine-robot.iam.gserviceaccount.com$" OR
protoPayload.authenticationInfo.principalEmail=~"@security-center-api.iam.gserviceaccount.com$" - [Create sink] をクリックします。
重要: GCP 組織の管理者またはスーパー管理者であっても、Google Cloud ではデフォルトでログのアクセス許可が分離されています。シンクを作成する際に [Permission logging.sinks.create denied on resource] というエラーが表示された場合は、組織レベルで [Logging Admin] または [Logs Configuration Writer] ロールをユーザーアカウントに明示的に付与する必要があります。 -
組織レベルで、Pub/Sub パブリッシャロールをサービスアカウントに割り当てます。
- [IAM & Admin] > [IAM] に移動します。
- サービスアカウントを見つけて、[Edit principal] をクリックします。
- [+ Add another role] をクリックします。
- [Pub/Sub Publisher] を選択します。
- [Save] をクリックします。