Cloud Identity を Google SecOps と統合する
このドキュメントでは、Cloud Identity を Google Security Operations と統合する方法について説明します。
ユースケース
Cloud Identity の統合では、Google SecOps の機能を使用して次のユースケースをサポートします。
- アクセス制御を管理する: 調査プレイブックから IAM 構成を直接作成して更新します。
- 監査ポリシーの定義: アクセス変更を追跡するために使用可能なポリシーに関する情報を一覧表示します。
- 検出機能リストの属性を維持する: モニタリング用に、特定の検出機能 URL リストにエンティティとインジケーターを追加します。
始める前に
Google SecOps プラットフォームで Cloud Identity 統合を構成する前に、次の手順で環境を構成していることを確認します。
- サービス アカウントを作成します。
- ドメイン全体の権限をサービス アカウントに委任する
- プロジェクトに必要な API を有効にします。
- 次のいずれかの認証方法を選択して構成します。
- オプション 1: JSON キー: この方法は、静的で有効期間の長いシークレット キーファイルに依存します。この方法は、Workload Identity が環境で使用できない場合にのみ使用してください。
- オプション 2: Workload Identity(推奨): この方法では、サービス アカウントの権限借用を使用して有効期間の短い一時的なアクセス トークンを使用するため、シークレットを保存する必要がありません。
サービス アカウントを作成する
インテグレーション用のサービス アカウントを作成する手順は次のとおりです。
Google Cloud コンソールで、[IAM と管理>サービス アカウント] に移動し、プロジェクトを選択します。
[サービス アカウントを作成] をクリックします。
名前と説明を入力し、[完了] をクリックしてアカウントを作成します。
ドメイン全体の権限をサービス アカウントに委任する
- ドメインの Google 管理コンソールから、 メインメニュー > [セキュリティ] > [アクセスとデータ管理] > [API の制御] に移動します。
- [ドメイン全体の委任] ペインで、[ドメイン全体の委任を管理] を選択します。
- [新しく追加] をクリックします。
- [クライアント ID] フィールドに、サービス アカウントを作成するで取得したクライアント ID を入力します。
[OAuth スコープ] フィールドに、アプリケーションに必要なスコープのカンマ区切りリストを入力します。
https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/cloud-identity.policies, https://www.googleapis.com/auth/admin.directory.orgunit[承認] をクリックします。
これで、指定したスコープを使用してドメイン全体のデータにアクセスする権限がサービス アカウントに付与されました。
プロジェクトに必要な API を有効にする
Google Cloud コンソールで、[API とサービス] に移動します。
[API とサービスの有効化] をクリックします。
プロジェクトで次の API を検索して有効にします。
- Admin SDK API(
admin.googleapis.com) - Cloud Identity API(
cloudidentity.googleapis.com)
- Admin SDK API(
JSON キーを構成する
統合を認証するには、静的 JSON キーファイルまたは Workload Identity 連携を使用します。環境のセキュリティを最大限に高めるには、Workload Identity メソッドを使用します。JSON 鍵メソッドは、インフラストラクチャで Workload Identity がサポートされていない場合にのみ使用してください。静的鍵は手動でローテーションする必要があり、認証情報の漏洩リスクが高まります。
インテグレーションの認証に必要な JSON キーファイルを生成するには、次の手順を行います。
Google Cloud コンソールで、[IAM と管理>サービス アカウント] に移動し、作成したサービス アカウントを選択します。
[キー] タブに移動します。
[鍵を追加] をクリックします。
[新しい鍵を作成] を選択します。
キーのタイプは、JSON を選択し、[作成] をクリックします。JSON ファイルがパソコンにダウンロードされます。
このファイルの内容全体をコピーし、統合構成時に
User's Service Account JSONに貼り付けます。
Cloud Identity の権限を構成する
統合で組織リソースの管理に必要な管理者権限を定義するには、次の手順を行います。
- Google 管理コンソールで、[アカウント] > [管理者ロール] に移動します。
- [新しいロールを作成] をクリックします。
- 新しいカスタムロールの名前を指定して、[続行] をクリックします。
- [権限の選択] ページで、[Admin API] 権限セクションに移動します。
- [Admin API 権限] で、次の権限を選択します。
Organization UnitsUsersGroups
- [続行] をクリックします。
- 新しいカスタムロールを作成するには、[ロールを作成] をクリックします。
カスタムの役割をユーザーに割り当てる
次の手順に沿って、ユーザー アカウントにロールを割り当て、インテグレーションがユーザーに代わってアクションを実行できるようにします。
- 新しいユーザーを作成するには、[ディレクトリ> ユーザー] ページに移動します。
- サービス アカウントに関連付けられた新しいユーザーを追加します。
- 新しく作成したユーザーの設定を開きます。ユーザー アカウントのタブが開きます。
- [管理者ロールと権限] をクリックします。
- edit [編集] をクリックします。
- 作成したカスタムロールを選択します。
- 選択したロールの切り替えを [割り当て済み] に切り替えます。
Workload Identity の認証情報を構成する
この方法または JSON キーの方法を選択して、統合を認証します。Workload Identity は、サービス アカウントの権限借用を使用して有効期間の短い一時アクセス トークンを使用するため、長期的なシークレット認証情報の漏洩リスクを最小限に抑えることができ、推奨される安全なアプローチです。
一意のインスタンス ID を特定する
Workload Identity を使用するには、Google SecOps インスタンスにサービス アカウントの権限借用を許可する必要があります。このステップにより、インスタンスは Google Cloud リソースに安全にアクセスできます。
- Google SecOps で、[コンテンツ ハブ] > [レスポンス統合] に移動します。
- 構成する統合を選択し、[
Workload Identity Email] フィールドにサービス アカウントのメールアドレスを入力します。 - 統合でユーザーを偽装するメールアドレスを
Delegated Emailフィールドに入力します。 - [保存>テスト] をクリックします。テストは失敗することが想定されます。
[テスト] の右にある close_small をクリックし、
gke-init-python@...またはsoar-python@...で始まる ID メールアドレスのエラー メッセージを検索します。この一意のメールアドレスをコピーして、統合構成時に
Workload Identity Emailに貼り付けます。
Google Cloud でインスタンス ID を承認する
Google SecOps インスタンスの一意の ID を取得したら、Google Cloud リソースにアクセスするための承認を行う必要があります。この手順により、サービス アカウントの権限借用が有効になり、プラットフォームは静的キーを必要とせずに、有効期間の短いトークンを生成してユーザーに代わって操作できます。
- Google Cloud コンソールで、[IAM と管理] > [サービス アカウント] に移動します。
- ターゲット サービス アカウントを選択し、[権限> アクセス権を付与] に移動します。
- 一意のメールアドレスを [新しいプリンシパル] フィールドに貼り付けます。
- サービス アカウント トークン作成者ロール(
roles/iam.serviceAccountTokenCreator)を割り当てます。
統合のパラメータ
Cloud Identity の統合には、次のパラメータが必要です。
| パラメータ | 説明 |
|---|---|
Service Account JSON File Content |
省略可。 サービス アカウント キーの JSON ファイルの内容。 このパラメータまたは Workload Identity メールのいずれかを構成できます。この方法を使用するには、サービス アカウントの作成時にダウンロードしたキーファイルから JSON 文字列全体を貼り付けます。 |
Workload Identity Email |
省略可。 サービス アカウントのクライアント メールアドレス。 このパラメータまたはサービス アカウント JSON ファイルの内容のいずれかを構成できます。 このメソッドをサービス アカウントの権限借用に使用するには、Google SecOps サービス アカウントにサービス アカウント トークン作成者のロールを付与する必要があります。 |
Delegated Email |
必須。 統合がアクションを実行するために使用するメールアドレス。 このアカウントに、必要な統合タスクを実行するための適切な委任権限が環境内で付与されていることを確認します。 |
Verify SSL |
省略可。 選択すると、統合は Cloud Identity サーバーに接続するときに SSL 証明書を検証します。 デフォルトで有効になっています。 |
Google SecOps で統合を構成する手順については、統合を構成するをご覧ください。
必要に応じて、後の段階で変更できます。統合インスタンスを構成すると、ハンドブックで使用できるようになります。複数のインスタンスの構成とサポートの方法については、複数のインスタンスのサポートをご覧ください。
操作
アクションの詳細については、 デスクから保留中のアクションに対応すると手動による対策を実行するをご覧ください。
Ping
Ping アクションを使用して、Cloud Identity への接続をテストします。
このアクションは Google SecOps エンティティに対しては実行されません。
アクション入力
このアクションに必要な入力パラメータはありません。
アクションの出力
[Ping] アクションでは、次の出力が提供されます。
| アクションの出力タイプ | 対象 |
|---|---|
| ケースウォールのアタッチメント | 利用不可 |
| ケースウォールのリンク | 利用不可 |
| ケースウォール テーブル | 利用不可 |
| 拡充テーブル | 利用不可 |
| JSON の結果 | 利用不可 |
| 出力メッセージ | 利用可能 |
| スクリプトの結果 | 利用可能 |
出力メッセージ
Ping アクションは、次の出力メッセージを返すことができます。
| 出力メッセージ | メッセージの説明 |
|---|---|
|
アクションが成功しました。 |
Failed to connect to the Cloud Identity server! Error is ERROR_REASON |
操作に失敗しました。 サーバーへの接続、入力パラメータ、または認証情報を確認してください。 |
スクリプトの結果
次の表に、Ping アクションを使用した場合のスクリプト結果出力の値を示します。
| スクリプトの結果名 | 値 |
|---|---|
is_success |
true または false |
検出機能の URL リストにエンティティを追加する
検出機能の URL リストにエンティティを追加アクションを使用して、Cloud Identity ポリシーの検出リストにエンティティを追加します。
このアクションは、次の Google SecOps エンティティに対して実行されます。
- URL
- ドメイン
アクション入力
Add Entity To Detector URL List アクションには、次のパラメータが必要です。
| パラメータ | 説明 |
|---|---|
Detector Policy ID |
必須。 更新する検出機能ポリシーの固有識別子。 |
URL |
省略可。 検出機能リストに追加する URL のカンマ区切りのリスト。 |
Domain |
省略可。 検出器リストに追加するドメインのカンマ区切りのリスト。 |
アクションの出力
[検出機能の URL リストにエンティティを追加] アクションは、次の出力を提供します。
| アクションの出力タイプ | 対象 |
|---|---|
| ケースウォールのアタッチメント | 利用不可 |
| ケースウォールのリンク | 利用不可 |
| ケースウォール テーブル | 利用不可 |
| 拡充テーブル | 利用不可 |
| JSON の結果 | 利用可能 |
| 出力メッセージ | 利用可能 |
| スクリプトの結果 | 利用可能 |
JSON の結果
次の例は、Add Entity To Detector URL List アクションを使用した場合に受信される JSON 結果の出力を示しています。
{
"type": "ADMIN",
"customer": "customers/<CUSTOMER_ID>",
"policyQuery": {
"query": "entity.org_units.exists(org_unit, org_unit.org_unit_id == orgUnitId('<ORG_UNIT_ID>'))",
"orgUnit": "orgUnits/<ORG_UNIT_ID>"
},
"setting": {
"type": "settings/detector.url_list",
"value": {
"displayName": "test_url_list_detector",
"description": "test_url_list_detector desc",
"urlList": {
"urls": [
"[http://example.com](http://example.com)",
"example.org",
"bad_entity.com"
]
}
}
}
}
出力メッセージ
Add Entity To Detector URL List アクションは、次の出力メッセージを返すことがあります。
| 出力メッセージ | メッセージの説明 |
|---|---|
|
アクションが成功しました。 |
Error executing action "Add Entity To Detector URL List". Reason: ERROR_REASON |
操作に失敗しました。 サーバーへの接続、入力パラメータ、または認証情報を確認してください。 |
スクリプトの結果
次の表に、Add Entity To Detector URL List アクションを使用する場合のスクリプト結果出力の値を示します。
| スクリプトの結果名 | 値 |
|---|---|
is_success |
true または false |
ポリシーを作成
[ポリシーを作成] アクションを使用して、Cloud Identity 内に新しいポリシー エントリを作成します。
このアクションは Google SecOps エンティティに対しては実行されません。
アクション入力
[Create Policy] アクションには、次のパラメータが必要です。
| パラメータ | 説明 |
|---|---|
Policy Entry |
必須。 追加するポリシー エントリの構成を表す JSON オブジェクト。 |
ポリシー構成の例
次の構成例は、Policy Entry パラメータの構造を示しています。
例 1: URL リスト検出機能
{
"type": "ADMIN",
"customer": "customers/<CUSTOMER_ID>",
"policyQuery": {
"orgUnit": "orgUnits/<ORG_UNIT_ID>",
"sortOrder": 1
},
"setting": {
"type": "settings/detector.url_list",
"value": {
"displayName": "BlockUrlDetector",
"description": "Blocked urls for security reasons",
"urlList": {
"urls": [
"www.medium.com",
"medium.com",
"wikipedia.org"
]
}
}
}
}
例 2: DLP ルール
{
"type": "ADMIN",
"customer": "customers/<CUSTOMER_ID>",
"policyQuery": {
"query": "entity.org_units.exists(org_unit, org_unit.org_unit_id == orgUnitId('<ORG_UNIT_ID>'))",
"orgUnit": "orgUnits/<ORG_UNIT_ID>",
"sortOrder": 1
},
"setting": {
"type": "settings/rule.dlp",
"value": {
"display_name": "TestRule",
"description": "GoogleSecOps URL Blocklist Rule. Keeps state of blocked URLs. Manual modification is not advised",
"triggers": [
"google.workspace.chrome.url.v1.navigation"
],
"condition": {
"contentCondition": "url.matches_url_list('policies/<DETECTOR_POLICY_ID>')"
},
"action": {
"chromeAction": {
"blockContent": {
"actionParams": {
"customEndUserMessage": {
"unsafeHtmlMessageBody": "(EQ)🚫 BlockedAccess denied."
}
}
}
}
},
"state": "ACTIVE"
}
}
}
アクションの出力
[ポリシーを作成] アクションでは、次の出力が提供されます。
| アクションの出力タイプ | 対象 |
|---|---|
| ケースウォールのアタッチメント | 利用不可 |
| ケースウォールのリンク | 利用不可 |
| ケースウォール テーブル | 利用不可 |
| 拡充テーブル | 利用不可 |
| JSON の結果 | 利用可能 |
| 出力メッセージ | 利用可能 |
| スクリプトの結果 | 利用可能 |
JSON の結果
次の例は、[ポリシーを作成] アクションを使用したときに受信した JSON 結果の出力を示しています。
{
"type": "ADMIN",
"customer": "customers/<CUSTOMER_ID>",
"policyQuery": {
"query": "entity.org_units.exists(org_unit, org_unit.org_unit_id == orgUnitId('<ORG_UNIT_ID>'))",
"orgUnit": "orgUnits/<ORG_UNIT_ID>"
},
"setting": {
"type": "settings/rule.dlp",
"value": {
"display_name": "test_create_rule",
"triggers": [
"google.workspace.chrome.file.v1.download"
],
"state": "ACTIVE",
"action": {
"chromeAction": {
"warnUser": {}
}
}
}
}
}
出力メッセージ
[ポリシーを作成] アクションは、次の出力メッセージを返すことができます。
| 出力メッセージ | メッセージの説明 |
|---|---|
|
アクションが成功しました。 |
Error executing action "Create Policy". Reason: ERROR_REASON |
操作に失敗しました。 サーバーへの接続、入力パラメータ、または認証情報を確認してください。 |
スクリプトの結果
次の表に、ポリシーを作成アクションを使用する場合のスクリプト結果出力の値を示します。
| スクリプトの結果名 | 値 |
|---|---|
is_success |
true または false |
ポリシーの一覧表示
List Policies アクションを使用して、Cloud Identity から既存のポリシーのリストを取得します。
このアクションは Google SecOps エンティティに対しては実行されません。
アクション入力
List Policies アクションには、次のパラメータが必要です。
| パラメータ | 説明 |
|---|---|
Organization Unit Name |
必須。 ポリシーを一覧表示する組織部門の名前。 |
Policy Type Filter |
省略可。 リストのフィルタリングに使用されるポリシーのタイプ。有効な値: デフォルト値は |
Settings Type Filter |
省略可。 設定タイプでポリシーをフィルタリングするために使用される正規表現パターン。このフィルタは API リクエストに直接適用されます。 |
Settings Display Name Filter |
省略可。 ポリシー設定のフィルタリングに使用する表示名のカンマ区切りのリスト。 |
Max Results To Return |
省略可。 アクション実行で返される結果の最大数。デフォルト値は |
アクションの出力
[List Policies] アクションは、次の出力を提供します。
| アクションの出力タイプ | 対象 |
|---|---|
| ケースウォールのアタッチメント | 利用不可 |
| ケースウォールのリンク | 利用不可 |
| ケースウォール テーブル | 利用不可 |
| 拡充テーブル | 利用不可 |
| JSON の結果 | 利用可能 |
| 出力メッセージ | 利用可能 |
| スクリプトの結果 | 利用可能 |
JSON の結果
次の例は、List Policies アクションを使用した場合に受信される JSON 結果の出力を示しています。
[
{
"name": "policies/123",
"customer": "customers/123",
"type": "ADMIN",
"policy_query": {
"query": "entity.org_units.exists(org_unit, org_unit.org_unit_id == orgUnitId('12345'))",
"orgUnit": "orgUnits/12345",
"sortOrder": 1
},
"setting": {
"type": "settings/rule.dlp",
"value": {
"display_name": "Test DLP Rule"
}
}
}
]
出力メッセージ
List Policies アクションは、次の出力メッセージを返すことがあります。
| 出力メッセージ | メッセージの説明 |
|---|---|
|
|
アクションが成功しました。 |
Error executing action "List Policies". Reason: ERROR_REASON |
操作に失敗しました。 サーバーへの接続、入力パラメータ、または認証情報を確認してください。 |
スクリプトの結果
次の表に、List Policies アクションを使用する場合のスクリプト結果出力の値を示します。
| スクリプトの結果名 | 値 |
|---|---|
is_success |
true または false |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。