アクセス権のトラブルシューティング

Cloud IAM Troubleshooter を使用すると、ユーザーが特定のリソースにアクセスできる理由や、特定の API を呼び出す権限がない理由を簡単に調べられます。Troubleshooter では、メールアドレス、リソース、権限を指定すれば、そのリソースに適用されるすべての Cloud IAM ポリシーがわかります。さらに、メンバーがそのリソースに対する権限を付与されているか、付与されている場合はどのポリシーによるものかが明らかになります。

Troubleshooter にアクセスするには、GCP Console、gcloud コマンドライン ツール、または REST API を使用します。単純なクエリであれば、視覚補助機能も利用できる GCP Console が便利です。より複雑なシナリオでは、gcloud または REST API の使用を検討してください。

アクセス権のトラブルシューティング

Console

まず、GCP Console の [トラブルシューティング] ページを開きます。

[トラブルシューティング] ページを開く

次に、確認するメールアドレス、リソース名、権限を入力します。

  • [プリンシパル] には確認するメンバーのメールアドレスを入力します。ユーザーやサービス アカウントを指定できます。
  • [リソース] にはリソースの完全な名前を入力します。たとえば、プロジェクト my-project を確認するには「//cloudresourcemanager.googleapis.com/projects/my-project」と入力します。入力すると、GCP Console に候補の一覧が表示されます。
  • [権限] には確認する権限を入力します。入力すると、GCP Console に候補の一覧が表示されます。権限の完全なリストについては、権限リファレンスをご覧ください。

複数のリソースと権限を確認する場合は、[別のペアを追加] を選択して前の手順を繰り返します。

最後に [API 呼び出しを確認] を選択します。

結果ページの中央上部を見れば、リソースに対する権限がユーザーに付与されているかどうかがすぐにわかります。

トラブルシューティングの結果

デフォルトでは、結果がコンパクト表示で表示されます。これには特定のユーザーのアクセスについてのトラブルシューティングに直接関連する情報だけが含まれます。特に、アクセス権が付与されている場合、アクセス権を付与するバインディングだけが表示されます。アクセス権が拒否されている場合、目的の権限が含まれる役割(またはそれを含めるように変更できるカスタムの役割)だけが表示されます。

切り替えスイッチを使用して、コンパクト表示を無効にできます。これによって、すべてのバインディングとメンバーが表示されます。

左側のペインには、指定したリソースに適用されるポリシーのリストと、メンバーに権限を付与するバインディングが各ポリシーに含まれているかどうかを示すアイコンが表示されます。以下の例では、「オーナー」バインディングがアクセスを許可しています。

トラブルシューティングのバインディング リスト

右側のペインには各バインディングの未加工テキストが表示され、権限を付与していない行は赤でハイライト表示されます。ユーザーにアクセス権を付与している行 39〜46 はハイライト表示されていません。

トラブルシューティングのバインディング リスト

左側のペインで特定のバインディングを選択すると、詳細を表示できます。複数のリソースと権限のペアを入力した場合、[表示] プルダウンを使用して切り替えます。

gcloud コマンド

まず、Troubleshooter を使用できるように環境を設定します。

GCP Console を使用して API を有効にするか、または次のコマンドを実行します。

gcloud services enable policytroubleshooter.googleapis.com --project=[PROJECT-ID]

次に、プロジェクトを設定します。

gcloud config set project [PROJECT-ID]

設定が完了したら、次のコマンドを使用して、リソースに対する権限がユーザーに付与されているかどうかを調べられます。

gcloud beta policy-troubleshoot iam [RESOURCE] --principal-email [EMAIL] \
    --permission [PERMISSION]

RESOURCE はリソースの完全な名前です。たとえば、プロジェクト my-project を確認するには「//cloudresourcemanager.googleapis.com/projects/my-project」と入力します。 EMAIL は確認するメンバーのメールアドレスです。ユーザーやサービス アカウントを指定できます。PERMISSION は確認する権限です。権限の完全なリストについては、権限リファレンスをご覧ください。すべてのパラメータは必須です。

次の例では、foo@google.com に、プロジェクト my-project に対する resourcemanager.projects.getIamPolicy 権限が付与されているかどうかを確認します。

gcloud beta policy-troubleshoot iam //cloudresourcemanager.googleapis.com/projects/my-project \
    --permission resourcemanager.projects.getIamPolicy --principal-email foo@google.com

コマンドを実行すると、ユーザーに権限が付与されているかどうかとその理由が YAML 形式で出力されます。次のようになります。

access: GRANTED
explainedPolicies:
- access: GRANTED
  bindingExplanations:
  - access: NOT_GRANTED
    memberships:
      serviceAccount:service-123@compute-system.iam.gserviceaccount.com: MEMBERSHIP_NOT_INCLUDED
    role: roles/compute.serviceAgent
    rolePermission: ROLE_PERMISSION_NOT_INCLUDED
  - access: GRANTED
    memberships:
      serviceAccount:service@my-project.iam.gserviceaccount.com: MEMBERSHIP_NOT_INCLUDED
      user:foo@google.com: MEMBERSHIP_INCLUDED
    role: roles/owner
    rolePermission: ROLE_PERMISSION_INCLUDED
  fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
  policy:
    bindings:
    - members:
      - serviceAccount:service-123@compute-system.iam.gserviceaccount.com
      role: roles/compute.serviceAgent
    - members:
      - serviceAccount:foo@my-project.iam.gserviceaccount.com
      - user:foo@google.com
      role: roles/owner
    etag: BwWAOWEaIEg=
    version: 1
- access: UNKNOWN_INFO_DENIED
policy: {}

REST API

リクエスト:

POST https://policytroubleshooter.googleapis.com/v1beta/iam:troubleshoot

本文:

{
  "principal": "[EMAIL]",
  "fullResourceName": "[RESOURCE]",
  "permission": "[PERMISSION]"
}

ここで

  • RESOURCE はリソースの完全な名前です。たとえば、プロジェクト my-project を確認するには「//cloudresourcemanager.googleapis.com/projects/my-project」と入力します。
  • EMAIL は確認するメンバーのメールアドレスです。ユーザーやサービス アカウントを指定できます。
  • PERMISSION は確認する権限です。権限の完全なリストについては、権限リファレンスをご覧ください。

すべてのパラメータは必須です。

次の本文の例では、foo@google.com に、プロジェクト my-project に対する resourcemanager.projects.getIamPolicy 権限が付与されているかどうかを確認します。

{
  "principal": "foo@google.com",
  "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
  "permission": "resourcemanager.projects.getIamPolicy"
}

コマンドを実行すると、ユーザーに権限が付与されているかどうかとその理由が JSON 形式で出力されます。次のようになります。

{
  "access": "GRANTED",
  "explained_policies": [
      {
          "access": "GRANTED",
          "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
          "policy": {
              "version": 1,
              "etag": "BwWBUZjK9YQ=",
              "bindings": [
                  {
                      "role": "roles/owner",
                      "members": [
                          "user:foo@google.com"
                      ]
                  }
              ]
          },
          "binding_explanations": [
              {
                  "access": "GRANTED",
                  "relevance: HIGH",
                  "role": "roles/owner",
                  "role_permission": "ROLE_PERMISSION_INCLUDED",
                  "role_permission_relevance": "HIGH",
                  "memberships": {
                      "key":  "user:foo@google.com",
                      "value": {
                          "membership": "MEMBERSHIP_INCLUDED",
                          "relevance":  "HIGH",
                      }
                  }
              }
          ]
      },
      {
          "access": "UNKNOWN_INFO_DENIED",
          "policy": {}
      }
  ]
}

グループ メンバーシップのトラブルシューティング

Google グループによって付与されたリソースに対する権限のトラブルシューティングを行うには、そのメンバーに対する表示権限が必要です。

権限がない場合は、GCP Console でグループがオレンジ色でハイライト表示され、プリンシパルにアクセス権が付与されているかどうかわからないという警告が表示されます。gcloud または REST API を使用している場合は、レスポンスに UNKNOWN_INFO_DENIED または ACCESS_TO_INFO_DENIED が含まれます。

グループ メンバーシップのトラブルシューティング

G Suite 特権管理者とグループ管理者は通常、グループのメンバーシップを表示する権限を持っています。特権管理者またはグループ管理者ではないユーザーに権限のトラブルシューティングを許可するには、groups.read 特権(Admin API 特権にあります)を含むカスタムの G Suite 管理者の役割を作成し、この役割をユーザーに付与します。これにより、ドメイン内のすべてのグループのメンバーシップを表示し、アクセス権のトラブルシューティングを行うことができます。

制限事項

Troubleshooter は、リソースへのアクセス権に関する完全な説明を常に提供できるわけではありません。リソースに適用されるポリシーに対するアクセス権がユーザーになければ、Troubleshooter はそのポリシーを分析しません。たとえば、ユーザーがプロジェクト オーナーであるが組織レベルの権限は持っていない場合、そのユーザーのプロジェクトへのアクセスを許可している可能性がある組織レベルのポリシーは、そのユーザーには知らされません。

Troubleshooter から最大限の効果を引き出すには、セキュリティ審査担当者(roles/iam.securityReviewer)の役割を付与されていることが必要です。この役割を持っていれば、適用可能なすべての Cloud IAM ポリシーを確実に参照できます。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud IAM のドキュメント