このページでは、Policy Analyzer を使用して、どの ID またはプリンシパル(ユーザー、サービス アカウント、グループ、ドメイン)が、どの Google Cloud リソースに対してどのアクセス権を持つかを調べる方法について説明します。
このページの例は、Policy Analysis クエリを実行して、結果を直ちに表示する方法を示しています。結果をさらに分析するためにエクスポートする場合は、AnalyzeIamPolicyLongrunning
を使用して、BigQuery または Cloud Storage にクエリ結果を書き込むことができます。
始める前に
Enable the Cloud Asset API.
クエリの送信に使用するプロジェクトまたは組織で API を有効にする必要があります。これは、クエリのスコープを設定するのと同じリソースにする必要はありません。
省略可: Policy Analyzer の仕組みを理解します。
省略可: 組織ごとに 1 日あたり 20 件を超えるポリシー分析クエリを実行する場合は、Security Command Center のプレミアム ティアが組織レベルで有効になっていることを確認してください。詳細については、お支払いについてをご覧ください。
必要なロールと権限
許可ポリシーを分析するには、次のロールと権限が必要です。
必要な IAM のロール
許可ポリシーの分析に必要な権限を取得するには、クエリの対象となるプロジェクト、フォルダ、または組織に対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Cloud Asset 閲覧者(
roles/cloudasset.viewer
) - カスタム IAM ロールでポリシーを分析するには: ロール閲覧者(
roles/iam.roleViewer
) - Google Cloud CLI を使用してポリシーを分析するには: Service Usage ユーザー(
roles/serviceusage.serviceUsageConsumer
)
ロールの付与の詳細については、アクセス権の管理をご覧ください。
これらの事前定義ロールには、許可ポリシーの分析に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
許可ポリシーを分析するには、次の権限が必要です。
-
cloudasset.assets.analyzeIamPolicy
-
cloudasset.assets.searchAllResources
-
cloudasset.assets.searchAllIamPolicies
-
IAM のカスタムロールでポリシーを分析するには:
iam.roles.get
-
Google Cloud CLI を使用してポリシーを分析するには:
serviceusage.services.use
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
必要な Google Workspace の権限
プリンシパルが Google Workspace グループのメンバーになった結果、特定のロールまたは権限を持つかどうかを確認するために、クエリ結果でグループを展開する場合は、groups.read
Google Workspace の権限が必要です。
この権限は、グループ読み取り管理者のロールだけでなく、グループ管理者や特権管理者のロールなどのより強力なロールに含まれています。これらのロールを付与する方法については、特定の管理者ロールを割り当てるをご覧ください。
リソースにアクセスできるプリンシパルを決定する
Policy Analyzer を使用して、どのプリンシパルが、プロジェクト、フォルダ、組織内の固有のリソースに対する特定のロールまたは権限を有しているか確認できます。この情報を取得するには、アクセスを分析したいリソースおよび確認する 1 つ以上のロールまたは権限を含むクエリを作成します。
Console
Google Cloud コンソールで、[Policy Analyzer] ページに移動します。
[ポリシーの分析] セクションで、[カスタムクエリ] と表示されたペインを見つけて [カスタムクエリを作成] をクリックします。
[クエリスコープを選択] フィールドで、クエリを調査するプロジェクト、フォルダ、組織を選択します。ポリシー アナライザは、プロジェクト、フォルダ、組織へのアクセスと、そのプロジェクト、フォルダ、組織内のリソースを分析します。
確認するリソースと、確認するロールまたは権限を選択します。
- [パラメータ 1] フィールドで、プルダウン メニューから [リソース] を選択します。
- [リソース] フィールドに、アクセスを分析するリソースの完全なリソース名を入力します。完全なリソース名がわからない場合は、リソースの表示名の入力を開始し、表示されるリソースのリストから該当するリソースを選択します。
- [セレクタを追加] をクリックします。
- [パラメータ 2] フィールドで、[ロール] か [権限] を選択します。
- [ロールを選択] フィールドか [権限を選択] フィールドで、確認するロールまたは権限を選択します。
- 省略可: 追加のロールと権限を確認するには、確認するすべてのロールと権限が表示されるまで、[ロール] と [権限] セレクタの追加を継続します。
省略可: [続行] をクリックして、このクエリで有効にする詳細オプションを選択します。
[カスタムクエリ] ペインで、[分析] > [クエリを実行] をクリックします。レポートページには、入力したクエリ パラメータと、指定されたリソースに対する指定されたロールまたは権限を有するすべてのプリンシパルの結果テーブルが表示されます。
Google Cloud コンソールのポリシー分析クエリは、最大 1 分間実行されます。1 分後、Google Cloud コンソールでクエリが停止し、使用可能なすべての結果が表示されます。その時間内にクエリが完了しなかった場合は、結果が不完全であることを示すバナーが Google Cloud コンソールに表示されます。これらのクエリの全ての結果を取得するには、結果を BigQuery にエクスポートします。
gcloud
後述のコマンドデータを使用する前に、次のように置き換えます。
RESOURCE_TYPE
: 検索の対象範囲に設定するリソースのタイプ。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。値project
、folder
、またはorganization
を使用します。RESOURCE_ID
: 検索の対象範囲の Google Cloud プロジェクト、フォルダ、または組織の ID。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。プロジェクト ID は英数字からなる文字列です(例:my-project
)。フォルダ ID と組織 ID は数値です(例:123456789012
)。FULL_RESOURCE_NAME
: アクセスを分析する対象リソースの完全なリソース名。リソース名の形式の一覧については、リソース名の形式をご覧ください。PERMISSIONS
: 確認する権限のカンマ区切りのリスト(例:compute.instances.get,compute.instances.start
)。複数の権限を一覧表示すると、Policy Analyzer は一覧表示された中から任意の権限を確認します。
gcloud asset analyze-iam-policy コマンドを実行します。
Linux、macOS、Cloud Shell
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID \ --full-resource-name=FULL_RESOURCE_NAME \ --permissions='PERMISSIONS'
Windows(PowerShell)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ` --full-resource-name=FULL_RESOURCE_NAME ` --permissions='PERMISSIONS'
Windows(cmd.exe)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ^ --full-resource-name=FULL_RESOURCE_NAME ^ --permissions='PERMISSIONS'
分析結果を含む YAML レスポンスが返されます。各分析結果には、クエリに関連する一連のアクセス、ID、リソースと、関連する IAM ロール バインディングが列挙されます。ロール バインディングが条件付きの場合、分析結果には条件評価の結果も含まれます。条件を評価できなかった場合、結果は CONDITIONAL
になります。
指定したリソースに対する指定した権限のいずれかを付与されているプリンシパルは、レスポンスの identities
フィールドにリストされます。次の例は、identities
フィールドがハイライト表示された単一の分析結果を示しています。
... --- ACLs: - accesses: - permission: compute.instances.get - permission: compute.instances.start identities: - name: user:my-user@example.com resources: - fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project policy: attachedResource: //cloudresourcemanager.googleapis.com/projects/my-project binding: members: - user: my-user@example.com role: roles/compute.admin --- ...
クエリが完了する前にリクエストがタイムアウトすると、DEADLINE_EXCEEDED
エラーが発生します。これらのクエリの全ての結果を取得するには、長時間実行バージョンの analyze-iam-policy
を使用して結果を BigQuery または Cloud Storage に書き込みます。手順については、ポリシー分析を BigQuery に書き込むまたはポリシー分析を Cloud Storage に書き込むをご覧ください。
REST
リソースに対して特定の権限を持つプリンシパルを特定するには、Cloud Asset Inventory API の analyzeIamPolicy
メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
RESOURCE_TYPE
: 検索の対象範囲に設定するリソースのタイプ。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。値projects
、folders
、またはorganizations
を使用します。RESOURCE_ID
: 検索の対象範囲の Google Cloud プロジェクト、フォルダ、または組織の ID。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。プロジェクト ID は英数字からなる文字列です(例:my-project
)。フォルダ ID と組織 ID は数値です(例:123456789012
)。FULL_RESOURCE_NAME
: アクセスを分析する対象リソースの完全なリソース名。リソース名の形式の一覧については、リソース名の形式をご覧ください。PERMISSION_1
、PERMISSION_2
、...PERMISSION_N
: 確認する権限(例:compute.instances.get
)。複数の権限を一覧表示すると、Policy Analyzer は一覧表示された中から任意の権限を確認します。
HTTP メソッドと URL:
POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicy
リクエストの本文(JSON):
{ "analysisQuery": { "resourceSelector": { "fullResourceName": "FULL_RESOURCE_NAME" }, "accessSelector": { "permissions": [ "PERMISSION_1", "PERMISSION_2", "PERMISSION_N" ] } } }
リクエストを送信するには、次のいずれかのオプションを展開します。
分析結果を含む JSON レスポンスが返されます。各分析結果では、関連する IAM ロール バインディングについて記述され、対象のバインディング内のリソース、アクセス、プリンシパルが一覧表示されています。ロール バインディングが条件付きの場合、分析結果には条件評価の結果も含まれます。条件を評価できなかった場合、結果は CONDITIONAL
としてリストされます。
指定したリソースに対する指定した権限のいずれかを付与されているプリンシパルは、レスポンスの identities
フィールドにリストされます。次の例は、identities
フィールドがハイライト表示された単一の分析結果を示しています。
... { "attachedResourceFullName": "//cloudresourcemanager.googleapis.com/projects/my-project", "iamBinding": { "role": "roles/compute.admin", "members": [ "user:my-user@example.com" ] }, "accessControlLists": [ { "resources": [ { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project" } ], "accesses": [ { "permission": "compute.instances.get" }, { "permission": "compute.instances.start" } ] } ], "identityList": { "identities": [ { "name": "user:my-user@example.com" } ] }, "fullyExplored": true }, ...
クエリが完了する前にリクエストがタイムアウトすると、DEADLINE_EXCEEDED
エラーが発生します。これらのクエリの全ての結果を取得するには、長時間実行バージョンの analyzeIamPolicy
を使用して結果を BigQuery または Cloud Storage に書き込みます。手順については、ポリシー分析を BigQuery に書き込むまたはポリシー分析を Cloud Storage に書き込むをご覧ください。
特定のロールまたは権限を持つプリンシパルを決定する
Policy Analyzer を使用して、組織内のどの Google Cloud リソースに対する特定のロールまたは権限を持つプリンシパルを確認できます。この情報を取得するには、確認する 1 つ以上のロールまたは権限を含むものの、リソースを指定していないクエリを作成します。
Console
Google Cloud コンソールで、[Policy Analyzer] ページに移動します。
[ポリシーの分析] セクションで、[カスタムクエリ] と表示されたペインを見つけて [カスタムクエリを作成] をクリックします。
[クエリスコープを選択] フィールドで、クエリを調査するプロジェクト、フォルダ、組織を選択します。ポリシー アナライザは、プロジェクト、フォルダ、組織へのアクセスと、そのプロジェクト、フォルダ、組織内のリソースを分析します。
[パラメータ 1] フィールドで、[ロール] か [権限] を選択します。
[ロールを選択] フィールドか [権限を選択] フィールドで、確認するロールか権限を選択します。
省略可: 追加のロールと権限を確認するには、次の操作を行います。
- [セレクタを追加] をクリックします。
- [パラメータ 2] フィールドで、[ロール] か [権限] を選択します。
- [ロールを選択] フィールドか [権限を選択] フィールドで、確認するロールまたは権限を選択します。
- 確認するロールと権限がすべて表示されるまで、[ロール] と [権限] セレクタの追加を継続します。
省略可: [続行] をクリックして、このクエリで有効にする詳細オプションを選択します。
[カスタムクエリ] ペインで、[分析] > [クエリを実行] をクリックします。レポートページには、入力したクエリ パラメータと、対象範囲内のリソースに対して指定されたロールまたは権限を有するすべてのプリンシパルの結果テーブルが表示されます。
Google Cloud コンソールのポリシー分析クエリは、最大 1 分間実行されます。1 分後、Google Cloud コンソールでクエリが停止し、使用可能なすべての結果が表示されます。その時間内にクエリが完了しなかった場合は、結果が不完全であることを示すバナーが Google Cloud コンソールに表示されます。これらのクエリの全ての結果を取得するには、結果を BigQuery にエクスポートします。
gcloud
後述のコマンドデータを使用する前に、次のように置き換えます。
RESOURCE_TYPE
: 検索の対象範囲に設定するリソースのタイプ。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。値project
、folder
、またはorganization
を使用します。RESOURCE_ID
: 検索の対象範囲の Google Cloud プロジェクト、フォルダ、または組織の ID。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。プロジェクト ID は英数字からなる文字列です(例:my-project
)。フォルダ ID と組織 ID は数値です(例:123456789012
)。ROLES
: 確認するロールのカンマ区切りのリスト(例:roles/compute.admin,roles/compute.imageUser
)。複数のロールを一覧表示すると、Policy Analyzer は一覧表示された中から任意のロールを確認します。PERMISSIONS
: 確認する権限のカンマ区切りのリスト(例:compute.instances.get,compute.instances.start
)。複数の権限を一覧表示すると、Policy Analyzer は一覧表示された中から任意の権限を確認します。
gcloud asset analyze-iam-policy コマンドを実行します。
Linux、macOS、Cloud Shell
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID \ --roles='ROLES' \ --permissions='PERMISSIONS'
Windows(PowerShell)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ` --roles='ROLES' ` --permissions='PERMISSIONS'
Windows(cmd.exe)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ^ --roles='ROLES' ^ --permissions='PERMISSIONS'
分析結果を含む JSON レスポンスが返されます。各分析結果では、関連する IAM ロール バインディングについて記述され、対象のバインディング内のリソース、アクセス、プリンシパルが一覧表示されています。ロール バインディングが条件付きの場合、分析結果には条件評価の結果も含まれます。条件を評価できなかった場合、結果は CONDITIONAL
としてリストされます。
指定したロールまたは権限のいずれかを付与されているプリンシパルは、レスポンスの identities
フィールドにリストされます。次の例は、identities
フィールドがハイライト表示された単一の分析結果を示しています。
... --- ACLs: - accesses: - permission: compute.instances.get - permission: compute.instances.start - role: roles/compute.admin identities: - name: user:my-user@example.com resources: - fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project policy: attachedResource: //cloudresourcemanager.googleapis.com/projects/my-project binding: members: - user: my-user@example.com role: roles/compute.admin --- ...
クエリが完了する前にリクエストがタイムアウトすると、DEADLINE_EXCEEDED
エラーが発生します。これらのクエリの全ての結果を取得するには、長時間実行バージョンの analyze-iam-policy
を使用して結果を BigQuery または Cloud Storage に書き込みます。手順については、ポリシー分析を BigQuery に書き込むまたはポリシー分析を Cloud Storage に書き込むをご覧ください。
REST
特定のロールまたは権限を持つプリンシパルを確認するには、Cloud Asset Inventory API の analyzeIamPolicy
メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
RESOURCE_TYPE
: 検索の対象範囲に設定するリソースのタイプ。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。値projects
、folders
、またはorganizations
を使用します。RESOURCE_ID
: 検索の対象範囲の Google Cloud プロジェクト、フォルダ、または組織の ID。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。プロジェクト ID は英数字からなる文字列です(例:my-project
)。フォルダ ID と組織 ID は数値です(例:123456789012
)。ROLE_1
、ROLE_2
、...ROLE_N
: 確認するロール(例:roles/compute.admin
)。複数のロールを一覧表示すると、Policy Analyzer は一覧表示された中から任意のロールを確認します。PERMISSION_1
、PERMISSION_2
、...PERMISSION_N
: 確認する権限(例:compute.instances.get
)。複数の権限を一覧表示すると、Policy Analyzer は一覧表示された中から任意の権限を確認します。
HTTP メソッドと URL:
POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicy
リクエストの本文(JSON):
{ "analysisQuery": { "accessSelector": { "roles": [ "ROLE_1", "ROLE_2", "ROLE_N" ], "permissions": [ "PERMISSION_1", "PERMISSION_2", "PERMISSION_N" ] } } }
リクエストを送信するには、次のいずれかのオプションを展開します。
分析結果を含む JSON レスポンスが返されます。各分析結果では、関連する IAM ロール バインディングについて記述され、対象のバインディング内のリソース、アクセス、プリンシパルが一覧表示されています。ロール バインディングが条件付きの場合、分析結果には条件評価の結果も含まれます。条件を評価できなかった場合、結果は CONDITIONAL
としてリストされます。
指定したロールまたは権限のいずれかを付与されているプリンシパルは、レスポンスの identities
フィールドにリストされます。次の例は、identities
フィールドがハイライト表示された単一の分析結果を示しています。
... { "attachedResourceFullName": "//cloudresourcemanager.googleapis.com/projects/my-project", "iamBinding": { "role": "roles/compute.admin", "members": [ "user:my-user@example.com" ] }, "accessControlLists": [ { "resources": [ { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project" } ], "accesses": [ { "permission": "compute.instances.get" }, { "role": "roles/compute.admin" } ] } ], "identityList": { "identities": [ { "name": "user:my-user@example.com" } ] }, "fullyExplored": true }, ...
クエリが完了する前にリクエストがタイムアウトすると、DEADLINE_EXCEEDED
エラーが発生します。これらのクエリの全ての結果を取得するには、長時間実行バージョンの analyzeIamPolicy
を使用して結果を BigQuery または Cloud Storage に書き込みます。手順については、ポリシー分析を BigQuery に書き込むまたはポリシー分析を Cloud Storage に書き込むをご覧ください。
プリンシパルがリソースに対して持つアクセス権を決定する
Policy Analyzer を使用して、プリンシパルが組織内のリソースに対して持つロールまたは権限を確認できます。この情報を取得するには、分析するアクセスがあるプリンシパルとアクセスを分析するリソースを含むクエリを作成します。
Console
Google Cloud コンソールで、[Policy Analyzer] ページに移動します。
[ポリシーの分析] セクションで、[カスタムクエリ] と表示されたペインを見つけて [カスタムクエリを作成] をクリックします。
[クエリスコープを選択] フィールドで、クエリを調査するプロジェクト、フォルダ、組織を選択します。ポリシー アナライザは、プロジェクト、フォルダ、組織へのアクセスと、そのプロジェクト、フォルダ、組織内のリソースを分析します。
確認するリソースとプリンシパルを選択します。
- [パラメータ 1] フィールドで、プルダウン メニューから [リソース] を選択します。
- [リソース] フィールドに、アクセスを分析するリソースの完全なリソース名を入力します。完全なリソース名がわからない場合は、リソースの表示名の入力を開始し、表示されるリソースのリストから該当するリソースを選択します。
- [セレクタを追加] をクリックします。
- [パラメータ 2] フィールドで、プルダウン メニューから [プリンシパル] を選択します。
- [プリンシパル] フィールドに、ユーザー名か、サービス アカウント名か、グループ名の入力を開始します。次に、表示されたプリンシパルのリストから、分析するアクセスがあるユーザー、サービス アカウント、またはグループを選択します。
省略可: [続行] をクリックして、このクエリで有効にする詳細オプションを選択します。
[カスタムクエリ] ペインで、[分析] > [クエリを実行] をクリックします。レポートページには、入力したクエリ パラメータと、指定したプリンシパルが指定したリソースに対して有するすべてのロールの結果テーブルが表示されます。
Google Cloud コンソールのポリシー分析クエリは、最大 1 分間実行されます。1 分後、Google Cloud コンソールでクエリが停止し、使用可能なすべての結果が表示されます。その時間内にクエリが完了しなかった場合は、結果が不完全であることを示すバナーが Google Cloud コンソールに表示されます。これらのクエリの全ての結果を取得するには、結果を BigQuery にエクスポートします。
gcloud
後述のコマンドデータを使用する前に、次のように置き換えます。
RESOURCE_TYPE
: 検索の対象範囲に設定するリソースのタイプ。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。値project
、folder
、またはorganization
を使用します。RESOURCE_ID
: 検索の対象範囲の Google Cloud プロジェクト、フォルダ、または組織の ID。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。プロジェクト ID は英数字からなる文字列です(例:my-project
)。フォルダ ID と組織 ID は数値です(例:123456789012
)。FULL_RESOURCE_NAME
: アクセスを分析する対象リソースの完全なリソース名。リソース名の形式の一覧については、リソース名の形式をご覧ください。PRINCIPAL
: アクセスを分析するPRINCIPAL_TYPE:ID
形式のプリンシパル(例:user:my-user@example.com
)。プリンシパル タイプの全一覧については、プリンシパル識別子をご覧ください。
gcloud asset analyze-iam-policy コマンドを実行します。
Linux、macOS、Cloud Shell
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID \ --full-resource-name=FULL_RESOURCE_NAME \ --identity=PRINCIPAL
Windows(PowerShell)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ` --full-resource-name=FULL_RESOURCE_NAME ` --identity=PRINCIPAL
Windows(cmd.exe)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ^ --full-resource-name=FULL_RESOURCE_NAME ^ --identity=PRINCIPAL
分析結果を含む YAML レスポンスが返されます。各分析結果には、クエリに関連する一連のアクセス、ID、リソースと、関連する IAM ロール バインディングが列挙されます。ロール バインディングが条件付きの場合、分析結果には条件評価の結果も含まれます。条件を評価できなかった場合、結果は CONDITIONAL
になります。
レスポンスの accesses
フィールドに、指定したリソースに対するプリンシパルのロールがリストされます。次の例は、accesses
フィールドがハイライト表示された単一の分析結果を示しています。
... --- ACLs: - accesses: - roles/iam.serviceAccountUser identities: - name: user:my-user@example.com resources: - fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project policy: attachedResource: //cloudresourcemanager.googleapis.com/projects/my-project binding: members: - user: my-user@example.com role: roles/iam.serviceAccountUser --- ...
クエリが完了する前にリクエストがタイムアウトすると、DEADLINE_EXCEEDED
エラーが発生します。これらのクエリの全ての結果を取得するには、長時間実行バージョンの analyze-iam-policy
を使用して結果を BigQuery または Cloud Storage に書き込みます。手順については、ポリシー分析を BigQuery に書き込むまたはポリシー分析を Cloud Storage に書き込むをご覧ください。
REST
プリンシパルがリソースに対して持つアクセス権を決定するには、Cloud Asset Inventory API の analyzeIamPolicy
メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
RESOURCE_TYPE
: 検索の対象範囲に設定するリソースのタイプ。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。値projects
、folders
、またはorganizations
を使用します。RESOURCE_ID
: 検索の対象範囲の Google Cloud プロジェクト、フォルダ、または組織の ID。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。プロジェクト ID は英数字からなる文字列です(例:my-project
)。フォルダ ID と組織 ID は数値です(例:123456789012
)。FULL_RESOURCE_NAME
: アクセスを分析する対象リソースの完全なリソース名。リソース名の形式の一覧については、リソース名の形式をご覧ください。PRINCIPAL
: アクセスを分析するPRINCIPAL_TYPE:ID
形式のプリンシパル(例:user:my-user@example.com
)。プリンシパル タイプの全一覧については、プリンシパル識別子をご覧ください。
HTTP メソッドと URL:
POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicy
リクエストの本文(JSON):
{ "analysisQuery": { "resourceSelector": { "fullResourceName": "FULL_RESOURCE_NAME" }, "identitySelector": { "identity": "PRINCIPAL" } } }
リクエストを送信するには、次のいずれかのオプションを展開します。
分析結果を含む JSON レスポンスが返されます。各分析結果では、関連する IAM ロール バインディングについて記述され、対象のバインディング内のリソース、アクセス、プリンシパルが一覧表示されています。ロール バインディングが条件付きの場合、分析結果には条件評価の結果も含まれます。条件を評価できなかった場合、結果は CONDITIONAL
としてリストされます。
レスポンスの accesses
フィールドに、指定したリソースに対するプリンシパルのロールがリストされます。次の例は、accesses
フィールドがハイライト表示された単一の分析結果を示しています。
... { "attachedResourceFullName": "//cloudresourcemanager.googleapis.com/projects/my-project", "iamBinding": { "role": "roles/iam.serviceAccountUser", "members": [ "user:my-user@example.com" ] }, "accessControlLists": [ { "resources": [ { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project" } ], "accesses": [ { "roles": "iam.serviceAccountUser" } ] } ], "identityList": { "identities": [ { "name": "user:my-user@example.com" } ] }, "fullyExplored": true }, ...
クエリが完了する前にリクエストがタイムアウトすると、DEADLINE_EXCEEDED
エラーが発生します。これらのクエリの全ての結果を取得するには、長時間実行バージョンの analyzeIamPolicy
を使用して結果を BigQuery または Cloud Storage に書き込みます。手順については、ポリシー分析を BigQuery に書き込むまたはポリシー分析を Cloud Storage に書き込むをご覧ください。
プリンシパルがアクセスできるリソースを決定する
Policy Analyzer を使用して、プリンシパルが組織内のどのリソースに対し特定のロールまたは権限を持つかを確認できます。この情報を取得するには、分析するアクセスがあるプリンシパルと、確認する 1 つ以上の権限またはロールを含むクエリを作成します。
Console
Google Cloud コンソールで、[Policy Analyzer] ページに移動します。
[ポリシーの分析] セクションで、[カスタムクエリ] と表示されたペインを見つけて [カスタムクエリを作成] をクリックします。
[クエリスコープを選択] フィールドで、クエリを調査するプロジェクト、フォルダ、組織を選択します。ポリシー アナライザは、プロジェクト、フォルダ、組織へのアクセスと、そのプロジェクト、フォルダ、組織内のリソースを分析します。
確認するプリンシパルと、確認するロールまたは権限を選択します。
- [パラメータ 1] フィールドで、プルダウン メニューから [プリンシパル] を選択します。
- [プリンシパル] フィールドに、ユーザー名か、サービス アカウント名か、グループ名の入力を開始します。次に、表示されたプリンシパルのリストから、分析するアクセスがあるユーザー、サービス アカウント、またはグループを選択します。
- [セレクタを追加] をクリックします。
- [パラメータ 2] フィールドで、[ロール] か [権限] を選択します。
- [ロールを選択] フィールドか [権限を選択] フィールドで、確認するロールまたは権限を選択します。
- 省略可: 追加のロールと権限を確認するには、確認するすべてのロールと権限が表示されるまで、[ロール] と [権限] セレクタの追加を継続します。
省略可: [続行] をクリックして、このクエリで有効にする詳細オプションを選択します。
[カスタムクエリ] ペインで、[分析] > [クエリを実行] をクリックします。レポートページには、入力したクエリ パラメータと、指定されたプリンシパルが指定されたロールまたは権限を有するすべてのリソースの結果テーブルが表示されます。
Google Cloud コンソールのポリシー分析クエリは、最大 1 分間実行されます。1 分後、Google Cloud コンソールでクエリが停止し、使用可能なすべての結果が表示されます。その時間内にクエリが完了しなかった場合は、結果が不完全であることを示すバナーが Google Cloud コンソールに表示されます。これらのクエリの全ての結果を取得するには、結果を BigQuery にエクスポートします。
gcloud
後述のコマンドデータを使用する前に、次のように置き換えます。
RESOURCE_TYPE
: 検索の対象範囲に設定するリソースのタイプ。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。値project
、folder
、またはorganization
を使用します。RESOURCE_ID
: 検索の対象範囲の Google Cloud プロジェクト、フォルダ、または組織の ID。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。プロジェクト ID は英数字からなる文字列です(例:my-project
)。フォルダ ID と組織 ID は数値です(例:123456789012
)。PRINCIPAL
: アクセスを分析するPRINCIPAL_TYPE:ID
形式のプリンシパル(例:user:my-user@example.com
)。プリンシパル タイプの全一覧については、プリンシパル識別子をご覧ください。PERMISSIONS
: 確認する権限のカンマ区切りのリスト(例:compute.instances.get,compute.instances.start
)。複数の権限を一覧表示すると、Policy Analyzer は一覧表示された中から任意の権限を確認します。
gcloud asset analyze-iam-policy コマンドを実行します。
Linux、macOS、Cloud Shell
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID \ --identity=PRINCIPAL \ --permissions='PERMISSIONS'
Windows(PowerShell)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ` --identity=PRINCIPAL ` --permissions='PERMISSIONS'
Windows(cmd.exe)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ^ --identity=PRINCIPAL ^ --permissions='PERMISSIONS'
分析結果を含む YAML レスポンスが返されます。各分析結果には、クエリに関連する一連のアクセス、ID、リソースと、関連する IAM ロール バインディングが列挙されます。ロール バインディングが条件付きの場合、分析結果には条件評価の結果も含まれます。条件を評価できなかった場合、結果は CONDITIONAL
になります。
指定したプリンシパルが指定した権限のいずれかを付与されている対象リソースは、レスポンスの resources
フィールドにリストされます。次の例は、resources
フィールドがハイライト表示された単一の分析結果を示しています。
... --- ACLs: - accesses: - permission: compute.instances.get - permission: compute.instances.start identities: - name: user:my-user@example.com resources: - fullResourceName: //compute.googleapis.com/projects/my-project/global/images/my-image policy: attachedResource: //compute.googleapis.com/projects/my-project/global/images/my-image binding: members: - user: my-user@example.com role: roles/compute.admin --- ...
クエリが完了する前にリクエストがタイムアウトすると、DEADLINE_EXCEEDED
エラーが発生します。これらのクエリの全ての結果を取得するには、長時間実行バージョンの analyze-iam-policy
を使用して結果を BigQuery または Cloud Storage に書き込みます。手順については、ポリシー分析を BigQuery に書き込むまたはポリシー分析を Cloud Storage に書き込むをご覧ください。
REST
プリンシパルがアクセスできるリソースを特定するには、Cloud Asset Inventory API の analyzeIamPolicy
メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
RESOURCE_TYPE
: 検索の対象範囲に設定するリソースのタイプ。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。値projects
、folders
、またはorganizations
を使用します。RESOURCE_ID
: 検索の対象範囲の Google Cloud プロジェクト、フォルダ、または組織の ID。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。プロジェクト ID は英数字からなる文字列です(例:my-project
)。フォルダ ID と組織 ID は数値です(例:123456789012
)。PRINCIPAL
: アクセスを分析するPRINCIPAL_TYPE:ID
形式のプリンシパル(例:user:my-user@example.com
)。プリンシパル タイプの全一覧については、プリンシパル識別子をご覧ください。PERMISSION_1
、PERMISSION_2
、...PERMISSION_N
: 確認する権限(例:compute.instances.get
)。複数の権限を一覧表示すると、Policy Analyzer は一覧表示された中から任意の権限を確認します。
HTTP メソッドと URL:
POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicy
リクエストの本文(JSON):
{ "analysisQuery": { "identitySelector": { "identity": "PRINCIPAL" }, "accessSelector": { "permissions": [ "PERMISSION_1", "PERMISSION_2", "PERMISSION_N" ] } } }
リクエストを送信するには、次のいずれかのオプションを展開します。
分析結果を含む JSON レスポンスが返されます。各分析結果では、関連する IAM ロール バインディングについて記述され、対象のバインディング内のリソース、アクセス、プリンシパルが一覧表示されています。ロール バインディングが条件付きの場合、分析結果には条件評価の結果も含まれます。条件を評価できなかった場合、結果は CONDITIONAL
としてリストされます。
指定したプリンシパルが指定した権限のいずれかを付与されている対象リソースは、レスポンスの resources
フィールドにリストされます。次の例は、resources
フィールドがハイライト表示された単一の分析結果を示しています。
... { "attachedResourceFullName": "//compute.googleapis.com/projects/my-project/global/images/my-image", "iamBinding": { "role": "roles/compute.admin", "members": [ "user:my-user@example.com" ] }, "accessControlLists": [ { "resources": [ { "fullResourceName": "//compute.googleapis.com/projects/my-project/global/images/my-image" } ], "accesses": [ { "permission": "compute.instances.get" }, { "permission": "compute.instances.start" } ] } ], "identityList": { "identities": [ { "name": "user:my-user@example.com" } ] }, "fullyExplored": true }, ...
クエリが完了する前にリクエストがタイムアウトすると、DEADLINE_EXCEEDED
エラーが発生します。これらのクエリの全ての結果を取得するには、長時間実行バージョンの analyzeIamPolicy
を使用して結果を BigQuery または Cloud Storage に書き込みます。手順については、ポリシー分析を BigQuery に書き込むまたはポリシー分析を Cloud Storage に書き込むをご覧ください。
特定の時間におけるアクセス権を決定する
十分なコンテキストがある場合、Policy Analyzer は特定の時間にのみアクセス権を付与する IAM 条件付きロール バインディングを分析できます。これらの条件を日時条件と呼びます。 Policy Analyzer が日時条件を持つロール バインディングを正確に分析するには、リクエストでアクセス時間を定義する必要があります。
Policy Analyzer では、追加のユーザー入力なしでリソース条件を分析することもできます。Policy Analyzer と条件の仕組みの詳細については、条件付きアクセスをご覧ください。
gcloud
後述のコマンドデータを使用する前に、次のように置き換えます。
RESOURCE_TYPE
: 検索の対象範囲に設定するリソースのタイプ。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。値project
、folder
、またはorganization
を使用します。RESOURCE_ID
: 検索の対象範囲の Google Cloud プロジェクト、フォルダ、または組織の ID。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。プロジェクト ID は英数字からなる文字列です(例:my-project
)。フォルダ ID と組織 ID は数値です(例:123456789012
)。PERMISSIONS
: 省略可。確認する権限のカンマ区切りのリスト(例:compute.instances.get,compute.instances.start
)。複数の権限を一覧表示すると、Policy Analyzer は一覧表示された中から任意の権限を確認します。-
FULL_RESOURCE_NAME
: 省略可。アクセスを分析する対象リソースの完全なリソース名。リソース名の形式の一覧については、リソース名の形式をご覧ください。 PERMISSIONS
: 省略可。確認する権限のカンマ区切りのリスト(例:compute.instances.get,compute.instances.start
)。複数の権限を一覧表示すると、Policy Analyzer は一覧表示された中から任意の権限を確認します。ACCESS_TIME
: 確認する時刻。この時刻は未来の時刻にする必要があります。RFC 3339 形式のタイムスタンプを使用します(例:2099-02-01T00:00:00Z
)。
gcloud asset analyze-iam-policy コマンドを実行します。
Linux、macOS、Cloud Shell
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID \ --identity=PRINCIPAL \ --full-resource-name=FULL_RESOURCE_NAME \ --permissions='PERMISSIONS' \ --access-time=ACCESS_TIME
Windows(PowerShell)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ` --identity=PRINCIPAL ` --full-resource-name=FULL_RESOURCE_NAME ` --permissions='PERMISSIONS' ` --access-time=ACCESS_TIME
Windows(cmd.exe)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ^ --identity=PRINCIPAL ^ --full-resource-name=FULL_RESOURCE_NAME ^ --permissions='PERMISSIONS' ^ --access-time=ACCESS_TIME
分析結果を含む YAML レスポンスが返されます。各分析結果には、クエリに関連する一連のアクセス、ID、リソースと、関連する IAM ロール バインディングが列挙されます。ロール バインディングが条件付きの場合、分析結果には条件評価の結果も含まれます。条件を評価できなかった場合、結果は CONDITIONAL
になります。
アクセス時間をリクエストに含めると、Policy Analyzer は日時の条件を評価できます。条件が false と評価された場合、対象のロールはレスポンスに含まれません。条件が true と評価された場合、条件の評価結果が TRUE
としてリストされます。
... --- ACLs: - accesses: - permission: compute.instances.get - permission: compute.instances.start conditionEvaluationValue: 'TRUE' identities: - name: user:my-user@example.com resources: - fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project policy: attachedResource: //cloudresourcemanager.googleapis.com/projects/my-project binding: condition: expression: request.time.getHours("America/Los_Angeles") >= 5 title: No access before 5am PST members: - user: my-user@example.com role: roles/compute.admin --- ...
クエリが完了する前にリクエストがタイムアウトすると、DEADLINE_EXCEEDED
エラーが発生します。これらのクエリの全ての結果を取得するには、長時間実行バージョンの analyze-iam-policy
を使用して結果を BigQuery または Cloud Storage に書き込みます。手順については、ポリシー分析を BigQuery に書き込むまたはポリシー分析を Cloud Storage に書き込むをご覧ください。
REST
特定の時間にリソースに対して特定の権限を持つプリンシパルを特定するには、Cloud Asset Inventory API の analyzeIamPolicy
メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
RESOURCE_TYPE
: 検索の対象範囲に設定するリソースのタイプ。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。値projects
、folders
、またはorganizations
を使用します。RESOURCE_ID
: 検索の対象範囲の Google Cloud プロジェクト、フォルダ、または組織の ID。このリソースとその子孫に添付された IAM 許可ポリシーのみが分析されます。プロジェクト ID は英数字からなる文字列です(例:my-project
)。フォルダ ID と組織 ID は数値です(例:123456789012
)。PERMISSION_1
、PERMISSION_2
、PERMISSION_N
: 省略可。確認する権限(例:compute.instances.get
)。複数の権限を一覧表示すると、Policy Analyzer は一覧表示された中から任意の権限を確認します。-
FULL_RESOURCE_NAME
: 省略可。アクセスを分析する対象リソースの完全なリソース名。リソース名の形式の一覧については、リソース名の形式をご覧ください。 PERMISSION_1
、PERMISSION_2
、PERMISSION_N
: 省略可。確認する権限(例:compute.instances.get
)。複数の権限を一覧表示すると、Policy Analyzer は一覧表示された中から任意の権限を確認します。ACCESS_TIME
: 確認する時刻。この時刻は未来の時刻にする必要があります。RFC 3339 形式のタイムスタンプを使用します(例:2099-02-01T00:00:00Z
)。
HTTP メソッドと URL:
POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicy
リクエストの本文(JSON):
{ "analysisQuery": { "identitySelector": { "identity": "PRINCIPAL" }, "resourceSelector": { "fullResourceName": "FULL_RESOURCE_NAME" }, "accessSelector": { "permissions": [ "PERMISSION_1", "PERMISSION_2", "PERMISSION_N" ] }, "conditionContext": { "accessTime": "ACCESS_TIME" } } }
リクエストを送信するには、次のいずれかのオプションを展開します。
分析結果を含む JSON レスポンスが返されます。各分析結果では、関連する IAM ロール バインディングについて記述され、対象のバインディング内のリソース、アクセス、プリンシパルが一覧表示されています。ロール バインディングが条件付きの場合、分析結果には条件評価の結果も含まれます。条件を評価できなかった場合、結果は CONDITIONAL
としてリストされます。
アクセス時間をリクエストに含めると、Policy Analyzer は日時の条件を評価できます。条件が false と評価された場合、対象のロールはレスポンスに含まれません。条件が true と評価された場合、分析レスポンスの条件評価値は TRUE
です。
... { "attachedResourceFullName": "//cloudresourcemanager.googleapis.com/projects/my-project", "iamBinding": { "role": "roles/compute.admin", "members": [ "user:my-user@example.com" ], "condition": { "expression": "request.time.getHours(\"America/Los_Angeles\") \u003e= 5", "title": "No access before 5am PST" } }, "accessControlLists": [ { "resources": [ { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project" } ], "accesses": [ { "permission": "compute.instances.get" }, { "permission": "compute.instances.start" } ], "conditionEvaluation": { "evaluationValue": "TRUE" } } ], "identityList": { "identities": [ { "name": "user:my-user@example.com" } ] }, "fullyExplored": true }, ...
クエリが完了する前にリクエストがタイムアウトすると、DEADLINE_EXCEEDED
エラーが発生します。これらのクエリの全ての結果を取得するには、長時間実行バージョンの analyzeIamPolicy
を使用して結果を BigQuery または Cloud Storage に書き込みます。手順については、ポリシー分析を BigQuery に書き込むまたはポリシー分析を Cloud Storage に書き込むをご覧ください。
オプションを有効にする
次のオプションを有効にすると、より詳細なクエリ結果を取得できます。
Console
オプション | 説明 |
---|---|
クエリに一致するリソース内のリソースを一覧表示します | このオプションを有効にした場合、クエリ結果には、クエリ結果内の任意の親リソース(プロジェクト、フォルダ、組織)に対する最大 1,000 件の関連する子孫リソースが一覧表示されます。 |
グループ内の個々のユーザーの一覧を表示します |
このオプションを有効にすると、クエリ結果のグループが個々のメンバーに展開されます。十分なグループ権限を付与されている場合は、ネストされたグループも展開されます。この展開の上限は、グループあたり 1,000 メンバーに制限されています。 このオプションは、クエリでプリンシパルを指定していない場合にのみ利用できます。 |
ロール内の権限の一覧を表示します |
このオプションを有効にすると、クエリ結果には、ロール自体に加えて、各ロール内のすべての権限が一覧表示されます。 このオプションは、クエリで権限やロールを指定していない場合にのみ使用できます。 |
gcloud
このセクションでは、gcloud CLI を使用して許可ポリシーを分析するときに追加できるいくつかの一般的なフラグについて説明します。オプションの全一覧については、オプションのフラグをご覧ください。
フラグ | 説明 |
---|---|
--analyze-service-account-impersonation |
このオプションを有効にすると、Policy Analyzer は追加の分析クエリを実行し、指定されたリソースへの指定されたアクセス権を付与されているサービス アカウントの権限を借用できるユーザーを特定します。Policy Analyzer では、クエリ結果に含まれるサービス アカウントごとに 1 つのクエリが実行されます。これらのクエリは、サービス アカウントに対する次のいずれかの権限を付与されているユーザーを分析します。
これは、多くのクエリが自動的に実行されるため、非常に高額な費用を要するオペレーションです。 |
--expand-groups |
このオプションを有効にすると、クエリ結果のグループが個々のメンバーに展開されます。十分なグループ権限を付与されている場合は、ネストされたグループも展開されます。この展開の上限は、グループあたり 1,000 メンバーに制限されています。 このオプションは、クエリでプリンシパルを指定していない場合にのみ有効です。 |
--expand-resources |
このオプションを有効にした場合、クエリ結果には、クエリ結果内の任意の親リソース(プロジェクト、フォルダ、組織)に対する最大 1,000 件の関連する子孫リソースが一覧表示されます。 |
--expand-roles |
このオプションを有効にすると、クエリ結果には、ロール自体に加えて、各ロール内のすべての権限が一覧表示されます。 このオプションは、クエリで権限やロールを指定していない場合にのみ使用できます。 |
--output-group-edges |
このオプションを有効にすると、グループ間でのメンバーシップの関係をクエリ結果として出力します。 |
--output-resource-edges |
このオプションを有効にすると、クエリの結果としてリソース間の関連する親子関係が出力されます。 |
REST
オプションを有効にするには、まず分析クエリに options
フィールドを追加します。次に例を示します。
{ "analysisQuery": { "resourceSelector": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project" }, "accessSelector": { "permissions": [ "iam.roles.get", "iam.roles.list" ] }, "options": { OPTIONS } } }
OPTIONS
は、有効にするオプションを "OPTION": true
の形式で置き換えます。使用可能なオプションを次の表に示します。
オプション | 説明 |
---|---|
analyzeServiceAccountImpersonation |
このオプションを有効にすると、Policy Analyzer は追加の分析クエリを実行し、指定されたリソースへの指定されたアクセス権を付与されているサービス アカウントの権限を借用できるユーザーを特定します。Policy Analyzer では、クエリ結果に含まれるサービス アカウントごとに 1 つのクエリが実行されます。これらのクエリは、サービス アカウントに対する次のいずれかの権限を付与されているユーザーを分析します。
これは、多くのクエリが自動的に実行されるため、非常に高額な費用を要するオペレーションです。 |
expandGroups |
このオプションを有効にすると、クエリ結果のグループが個々のメンバーに展開されます。十分なグループ権限を付与されている場合は、ネストされたグループも展開されます。この展開の上限は、グループあたり 1,000 メンバーに制限されています。 このオプションは、クエリでプリンシパルを指定していない場合にのみ有効です。 |
expandResources |
このオプションを有効にした場合、クエリ結果には、クエリ結果内の任意の親リソース(プロジェクト、フォルダ、組織)に対する最大 1,000 件の関連する子孫リソースが一覧表示されます。 |
expandRoles |
このオプションを有効にすると、クエリ結果には、ロール自体に加えて、各ロール内のすべての権限が一覧表示されます。 このオプションは、クエリで権限やロールを指定していない場合にのみ使用できます。 |
outputGroupEdges |
このオプションを有効にすると、グループ間でのメンバーシップの関係をクエリ結果として出力します。 |
outputResourceEdges |
このオプションを有効にすると、クエリの結果としてリソース間の関連する親子関係が出力されます。 |
次のステップ
AnalyzeIamPolicyLongrunning
を使用して BigQuery に書き込む、または Cloud Storage に書き込む方法を確認する。- REST API を使用してポリシー分析クエリを保存する方法を確認する。
- プリンシパルが特定の種類のアクセス権を持っていない理由を確認できる、利用可能なアクセストラブルシューティング ツールを確認する。