Identity and Access Management(IAM)の許可、拒否、プリンシパル アクセス境界ポリシーのトラブルシューティングには、いくつかの方法があります。
Policy Troubleshooter を使用する
特定のプリンシパルのアクセス権のトラブルシューティングが必要な場合は、IAM の Policy Troubleshooter を使用します。
Policy Troubleshooter では、プリンシパルがリソースにアクセスできるかどうかを判断できます。プリンシパル、リソース、権限を指定すると、Policy Troubleshooter により、プリンシパルのアクセス権に影響する許可ポリシー、拒否ポリシー、プリンシパル アクセス境界(PAB)ポリシーの調査が行われます。次に、これらのポリシーに基づいて、プリンシパルが指定された権限を使用してリソースにアクセスできるかどうかを示します。また、関連するポリシーを一覧表示し、それらがプリンシパルのアクセスにどのように影響するかを説明します。Policy Troubleshooter を使用して許可ポリシー、拒否ポリシー、プリンシパル アクセス境界ポリシーのトラブルシューティングを行う方法については、IAM 権限のトラブルシューティングをご覧ください。
リソースに適用される許可ポリシーと拒否ポリシーをすべて表示する
Google Cloud では、次の許可ポリシーと拒否ポリシーがリソースへのアクセスに影響します。
- リソースの許可ポリシー
- リソースの拒否ポリシー(ある場合)
- リソースの親プロジェクト、フォルダ、組織の許可ポリシー(ある場合)
- リソースの親プロジェクト、フォルダ、組織の拒否ポリシー(ある場合)
親プロジェクト、フォルダ、組織の許可ポリシーと拒否ポリシーは、ポリシーの継承のため、リソースへのアクセスに影響します。プロジェクト、フォルダ、組織に許可ポリシーまたは拒否ポリシーを適用すると、そのプロジェクト、フォルダ、組織内のすべてのリソースにポリシーが適用されます。
たとえば、組織の拒否ポリシーで、プリンシパルが特定の権限を使用できない場合、プリンシパルは組織内のどのリソースに対しても、その権限を使用できません。このルールは、その組織内のフォルダとプロジェクトのほうが制限の緩い拒否ポリシーを使用している場合や、プリンシパルに権限を付与する許可ポリシーを使用している場合でも適用されます。
同様に、プロジェクトの許可ポリシーでプリンシパルに特定の権限が付与されている場合、この権限が拒否されない限り、プリンシパルはプロジェクト内の任意のリソースに対する権限を持ちます。
これらのポリシーをすべて結合したものを、リソースで該当するポリシーまたは有効なポリシーといいます。
Google Cloud では、--include-deny
フラグを指定して gcloud beta projects
get-ancestors-iam-policy
コマンドを実行すると、プロジェクトへのアクセスに影響するすべての許可ポリシーと拒否ポリシーのリストを取得できます。これらのポリシーからプロジェクトに有効なポリシーが構成されています。各ポリシーを調べて、プリンシパルのアクセス権にどのように影響するかを確認できます。
gcloud
後述のコマンドデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト IDプロジェクト ID は英数字からなる文字列です(例:my-project
)。
gcloud beta projects get-ancestors-iam-policy
コマンドを実行します。
Linux、macOS、Cloud Shell
gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json
Windows(PowerShell)
gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json
Windows(cmd.exe)
gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json
この応答には、プロジェクトの許可ポリシーと拒否ポリシー、プロジェクトの祖先であるフォルダー、および組織が含まれています。次の例は、組織 1234567890123
とプロジェクト my-project
の許可ポリシーと、プロジェクト my-project
の拒否ポリシーを示しています。
[ { "id": "1234567890123", "policy": { "bindings": [ { "members": [ "group:cloud-admins@example.com" ], "role": "roles/iam.denyAdmin" }, { "members": [ "user:raha@example.com" ], "role": "roles/iam.serviceAccountAdmin" } ], "etag": "BwXW6Eab7TI=", "version": 1 }, "type": "organization" }, { "id": "my-project", "policy": { "bindings": [ { "members": [ "group:cloud-admins@example.com" ], "role": "roles/owner" } ], "etag": "BwXXjOM7L6M=", "type": "project" } }, { "id": "my-project", "policy": { "createTime": "2022-02-14T21:46:35.865279Z", "displayName": "My deny policy", "etag": "MTgyMzg2ODcwNTEyMjMxMTM3Mjg=", "kind": "DenyPolicy", "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F123456789012/denypolicies/my-deny-policy", "rules": [ { "denyRule": { "deniedPermissions": [ "iam.googleapis.com/serviceAccounts.create" ], "deniedPrincipals": [ "user:raha@example.com" ] }, "description": "Prevent service account creation" } ], "uid": "c83e3dc3-d8a6-6f51-4018-814e9f200b05", "updateTime": "2022-02-14T21:46:35.865279Z" }, "type": "project" } ]
この例では、Raha には組織のサービス アカウント管理者ロール(roles/iam.serviceAccountAdmin
)が付与されていますが、Raha が権限 iam.googleapis.com/serviceAccounts.create
を使用できないようにする拒否ポリシーがプロジェクトに設定されています。このため、Raha がプロジェクト my-project
でサービス アカウントを作成しようとすると、リクエストが拒否されます。
拒否ポリシーを使用しない組織の場合など、リソースで有効な許可ポリシーのみを表示する必要がある場合もあります。そのような場合は、次の方法で有効な許可ポリシーを表示できます。
Google Cloud コンソールでリソースの IAM 許可ポリシーを表示します。Google Cloud コンソールには、各リソースの有効なポリシーが自動的に表示されます。
Google Cloud コンソールでリソースの IAM 許可ポリシーを表示する方法については、現在のアクセス権を表示するをご覧ください。
Cloud Asset API を使用して、リソースの有効な許可ポリシーを取得します。詳細については、有効な IAM ポリシーの表示をご覧ください。
許可ポリシーを検索する
許可ポリシーで特定のロール バインディングを見つける必要がある場合は、許可ポリシーを検索できます。
Cloud Asset Inventory では、許可ポリシーを検索して、指定されたパラメータに一致するロール バインディングを確認できます。次のようなさまざまな検索パラメータを使用できます。
- リソースの種類
- プリンシパル タイプ
- ロール
- プロジェクト
- フォルダ
- 組織
詳細については、IAM 許可ポリシーの検索をご覧ください。