IAM ポリシーの分析

このページでは、Policy Analyzer を使用して、どの ID またはプリンシパル(ユーザー、サービス アカウント、グループ、ドメイン)が、どの Google Cloud リソースに対してどのアクセス権を持つかを調べる方法について説明します。

Policy Analyzer は、一般的に、「この IAM サービス アカウントにどのユーザーがアクセスできるか」、「どのユーザーが個人を特定できる情報(PII)を含むこの BigQuery データセット内のデータを読み取ることができるか」の特定に役立ちます。

AnalyzeIamPolicy メソッドを使用して分析リクエストを発行し、レスポンスで結果を取得できます。処理する必要のあるデータの量によっては、分析結果は完全ではない可能性があります。完全な結果を取得し、さらなる分析のために結果を書き込むか、独自に保存する場合は、AnalyzeIamPolicyLongrunning を使用して、BigQuery または Cloud Storage に書き込むことができます。

概要

Polycy Analyzer を使用すると、アクセスを管理、可視化できます。また、監査やコンプライアンス関連の業務にも使用できます。

具体的には次のとおりです:

  • Policy Analyzer ではリソースとポリシーの階層と継承がサポートされているため、クエリを試みた場所に関係なく、有効なポリシーを分析するときに階層が常に考慮されます。
  • Policy Analyzer ではユーザー グループの拡張がサポートされているため、ユーザーがあるグループに含まれていても、ユーザーのアクセスを識別できます。
  • Policy Analyzer では、権限拡張に対するロールがサポートされます。これにより、権限やロールごとにクエリを実行できるため、クエリの柔軟性が向上します。
  • Policy Analyzer では、リソース階層内で一部のリソース拡張のみがサポートされています。たとえば、クエリ結果では、プロジェクト内のすべての VM インスタンスまたはフォルダ内のすべてのプロジェクトを拡張できます。
  • (API と gcloud ツールのみ)IAM ポリシーの分析の際、ポリシー分析ツールは、さまざまなレベルでの「連鎖式の」権限借用など、サービス アカウントの権限借用の分析をサポートしています。Policy Analyzer は、サービス アカウントを介して間接的アクセスを分析するのに役立ちます。

たとえば、次のような分析のユースケースが考えられます。

  • リソースにアクセスできるプリンシパルを決定する: 指定したリソースにアクセス権が付与されたプリンシパルを探します。この種の分析は、次のような疑問への回答のために利用できます。

    • 「この IAM サービス アカウントにアクセスできるユーザーは誰か」
    • 「この IAM サービス アカウントの借用権限を持つユーザーは誰か」
    • 「プロジェクト A の課金管理者は誰か」
    • (API と gcloud ツールのみ)「サービス アカウントを借用して、プロジェクト A を更新できるユーザーは誰か」
  • 特定のロールまたは権限を持つプリンシパルを決定する: 該当するリソースに、指定されたロール / 権限を持つプリンシパルを見つけます。この種の分析は、次のような疑問への回答のために利用できます。

    • 「組織内でサービス アカウントの借用権限のあるユーザーは誰か」
    • 「組織の課金管理者は誰か」
    • (API と gcloud ツールのみ)「サービス アカウントの権限を借用して BigQuery データセットを読み取れる組織内のユーザーは誰か」
  • プリンシパルがリソースに対して持つアクセス権の決定: 指定したプリンシパルに付与されている指定したリソースに対するアクセス権を検索します。この種の分析は、次のような疑問への回答のために利用できます。

    • 「この BigQuery データセットに対してユーザー Ivy はどのロールと権限を持つか」
    • 「このプロジェクトのリソースに対して dev-testers グループはどのロールと権限を持つか」
    • (API と gcloud ツールのみ)「Ivy がサービス アカウントの権限借用をする場合、この BigQuery データセットに対してユーザー Ivy はどのロールと権限を持つか」
  • プリンシパルがアクセスできるリソースの決定: プリンシパルにアクセス権が付与されているリソースを検索します。これは、次のような疑問への答えを見つけるために実施できます。

    • 「ユーザー Ivy はどの BigQuery データセットに読み取り権限を持っているか」
    • dev-testers グループがデータオーナーであるのは、どの BigQuery データセットか」
    • 「John がプロジェクト A で削除できるのはどの VM か」
    • (API と gcloud ツールのみ)「ユーザーの John がサービス アカウントの権限借用により削除できるのはどの VM か」

始める前に

  • プロジェクトで Cloud Asset API を有効にする必要があります

  • API を使用してこれらのクエリを実行する場合は、環境と gcurl を設定する必要があります。

    1. 環境を設定する

    2. gcurl エイリアスを設定するには、次の手順を行います。

      Compute Engine インスタンスを使用している場合は、次のコマンドを実行します。

      alias gcurl='curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
      -H "Content-Type: application/json" -X POST -H "X-HTTP-Method-Override: GET"'
      

      Compute Engine インスタンスを使用していない場合は、次のコマンドを実行します。

      alias gcurl='curl -H "$(oauth2l header --json CREDENTIALS cloud-platform)" \
      -H "Content-Type: application/json" -X POST -H "X-HTTP-Method-Override: GET"'
      

      ここで、CREDENTIALS は認証情報ファイルのパスです(~/credentials.json など)。

必要な権限

ポリシー分析を実行するには、次の権限が必要です。

Google Cloud の組織、フォルダ、プロジェクトに対する権限

ポリシーを分析するには、分析する Google Cloud の組織、フォルダ、プロジェクトに対して次の IAM 権限が必要です。

  • cloudasset.assets.analyzeIamPolicy
  • cloudasset.assets.searchAllResources
  • cloudasset.assets.searchAllIamPolicies

これらの権限は、次の事前定義ロールに含まれています。

  • Cloud Asset オーナー(roles/cloudasset.owner
  • Cloud Asset 閲覧者(roles/cloudasset.viewer

Cloud Asset API の権限とロールの詳細については、アクセス制御をご覧ください。

IAM ロールに対する権限

プリンシパルが IAM カスタムロールを持つ場合、ロールが定義されているプロジェクト、フォルダ、または組織に対する iam.roles.get 権限が必要です。

Google Workspace のグループのメンバーに対する権限

リソースにアクセスできるプリンシパルを確認して、グループのメンバーを拡大することを選択した場合は、エンドユーザーの認証情報を持つメンバーへのグループの拡大が試みられます。このため、メンバーを表示する権限があるグループのメンバーのみが自分に表示されます。

プリンシパルがリソースに対して持っているアクセス権や、プリンシパルがアクセスできるリソースを決定するクエリを作成するときは、プリンシパルを指定します。指定されたプリンシパルがメンバーになっているグループ(直接的か間接的かを問いません)が検索されます。ここでも、エンドユーザーの認証情報が使用されます。表示されるのは、メンバーを表示する権限を持っているグループだけです。

リソースにアクセスできるプリンシパルを決定する

Policy Analyzer を使用して、組織内の特定のリソースに対する特定のロールまたは権限を持つプリンシパルを確認できます。この情報を取得するには、アクセスを分析するリソースと、チェックする 1 つ以上のロールまたは権限を有するプリンシパルに関するクエリを作成します。

Console

  1. Cloud Console で、[Policy Analyzer] ページに移動します。

    [Policy Analyzer] ページに移動

  2. [カスタマイズされたクエリを構築] プルダウン メニューをクリックして、[プリンシパル] をクリックします。

  3. [リソース] フィールドに、アクセスを分析するリソースの完全なリソース名を入力します。完全なリソース名がわからない場合は、リソースの表示名の入力を開始し、表示されるリソースのリストからリソースを選択します。

  4. [ロールまたは権限、あるいはその両方を選択] で、分析する 1 つ以上のロールまたは権限を選択します。

    • ロールを追加するには、 [ロールを追加] をクリックします。次に、ロールの一覧からロールを選択します。別のロールを追加するには、 [別のロールを追加] をクリックし、追加するロールを選択します。
    • 権限を追加するには、 [権限を追加] をクリックします。次に、追加する権限を選択します。権限を追加するには、 [権限を追加] をクリックし、追加する権限を選択します。
  5. 省略可: 結果ページでグループ内の個々のユーザーを一覧表示するには、[グループ オプション] セクションでスイッチをクリックします。

  6. [クエリを実行] をクリックしてクエリを実行します。レポートページには、入力したクエリ パラメータと、指定されたリソースに対する指定されたロールと権限を持つすべてのプリンシパルの結果テーブルが表示されます。

gcloud

asset analyze-iam-policy gcloud コマンドを使用して、API 対応プロジェクトで AnalyzeIamPolicy を呼び出せます。Cloud SDK バージョン 314.0.0 以降を実行している必要があります。gcloud version コマンドでバージョンを確認できます。

ORG_IDFULL_RESOURCE_NAMECOMMA_SEPARATED_PERMISSIONS を持つプリンシパルを確認するには:

gcloud asset analyze-iam-policy --organization="ORG_ID" \
    --full-resource-name="FULL_RESOURCE_NAME" \
    --permissions="COMMA_SEPARATED_PERMISSIONS"

たとえば、組織 1234567890 の Compute Engine インスタンス ipa-gce-instance-2 に対する compute.instances.get 権限または compute.instances.start 権限を持つプリンシパルを確認するには:

gcloud asset analyze-iam-policy --organization="1234567890" \
    --full-resource-name="//compute.googleapis.com/projects/project1/zones/us-central1-a/instances/ipa-gce-instance-2" \
    --permissions="compute.instances.get,compute.instances.start"

REST

  1. IAM ポリシーを分析し、gcurl エイリアスを使用して結果を書き込みます。

  2. リクエスト本文用のファイル request.json を作成し、その内容を JSON 形式で分析リクエストに設定します。

    たとえば、次のリクエストの本文では、Compute Engine インスタンス ipa-gce-instance-2 に対する compute.instances.get 権限または compute.instances.start 権限を持つユーザーを確認します。

    {
      "analysisQuery": {
        "resourceSelector": {
          "fullResourceName":
            "//compute.googleapis.com/projects/project1/zones/us-central1-a/instances/ipa-gce-instance-2"
         },
        "accessSelector": {
          "permissions": [
            "compute.instances.get",
            "compute.instances.start"
          ]
        }
      }
    }
    
  3. 次の gcurl コマンドを使用して IAM ポリシーを分析します。

    gcurl -d @request.json  \
    "https://cloudasset.googleapis.com/v1/organizations/ORG_ID:analyzeIamPolicy"
    

    ここで、ORG_ID は組織 ID です(たとえば、1234567890)。

特定のロールまたは権限を持つプリンシパルを決定する

Policy Analyzer を使用して、組織内のどの Google Cloud リソースに対する特定のロールまたは権限を持つプリンシパルを確認できます。この情報を取得するには、1 つ以上のロールまたは権限を有するものの、リソースを指定していないプリンシパルに関するクエリを作成します。

Console

  1. Cloud Console で、[Policy Analyzer] ページに移動します。

    [Policy Analyzer] ページに移動

  2. [カスタマイズされたクエリを構築] プルダウン メニューをクリックして、[プリンシパル] をクリックします。

  3. [Resource] フィールドは空白のままにします。

  4. [ロールまたは権限、あるいはその両方を選択] で、分析する 1 つ以上のロールまたは権限を選択します。

    • ロールを追加するには、 [ロールを追加] をクリックします。次に、ロールの一覧からロールを選択します。別のロールを追加するには、 [別のロールを追加] をクリックし、追加するロールを選択します。
    • 権限を追加するには、 [権限を追加] をクリックします。次に、追加する権限を選択します。権限を追加するには、 [権限を追加] をクリックし、追加する権限を選択します。
  5. 省略可: 結果ページでグループ内の個々のユーザーを一覧表示するには、[グループ オプション] セクションでスイッチをクリックします。

  6. [クエリを実行] をクリックしてクエリを実行します。レポートページには、入力したクエリ パラメータと、プロジェクトのリソースに対する指定されたロールと権限を持つすべてのプリンシパルの結果テーブルが表示されます。

gcloud

asset analyze-iam-policy gcloud コマンドを使用して、API 対応プロジェクトで AnalyzeIamPolicy を呼び出せます。Cloud SDK バージョン 314.0.0 以降を実行している必要があります。gcloud version コマンドでバージョンを確認できます。

どのプリンシパルが ORG_IDCOMMA_SEPARATED_PERMISSIONS を持っているかを確認するには:

gcloud asset analyze-iam-policy --organization="ORG_ID" \
    --permissions="COMMA_SEPARATED_PERMISSIONS"

たとえば、組織 1234567890 の compute.instances.get 権限または compute.instances.start 権限を持つプリンシパルを確認するには、次のコマンドを実行します。

gcloud asset analyze-iam-policy --organization="1234567890" \
    --permissions="compute.instances.get,compute.instances.start"

REST

  1. IAM ポリシーを分析し、gcurl エイリアスを使用して結果を書き込みます。

  2. リクエスト本文用のファイル request.json を作成し、その内容を JSON 形式で分析リクエストに設定します。

    たとえば、次のリクエストの本文では、該当するリソースに対する compute.instances.get 権限または compute.instances.start 権限を持つプリンシパルを確認します。

    {
      "analysisQuery": {
        "accessSelector": {
          "permissions": [
            "compute.instances.get",
            "compute.instances.start"
          ]
        }
      }
    }
    
  3. 次の gcurl コマンドを使用して IAM ポリシーを分析します。

    gcurl -d @request.json  \
    "https://cloudasset.googleapis.com/v1/organizations/ORG_ID:analyzeIamPolicy"
    

    ここで、ORG_ID は組織 ID です(たとえば、1234567890)。

プリンシパルがリソースに対して持つアクセス権を決定する

Policy Analyzer を使用して、プリンシパルが組織内のリソースに対して持つロールまたは権限を確認できます。この情報を取得するには、アクセスを分析するプリンシパルとアクセスを分析するリソースを含むアクセスに関するクエリを作成します。

Console

  1. Cloud Console で、[Policy Analyzer] ページに移動します。

    [Policy Analyzer] ページに移動

  2. [リソース] フィールドに、アクセスを分析するリソースの完全なリソース名を入力します。完全なリソース名がわからない場合は、リソースの表示名の入力を開始し、表示されるリソースのリストからリソースを選択します。

  3. [プリンシパル] フィールドに、ユーザー、サービス アカウント、またはグループの名前を入力します。次に、提供されたプリンシパルのリストから、アクセスを分析するユーザー、サービス アカウント、グループを選択します。

  4. 省略可: 結果ページでロール内の権限を一覧表示するには、[ロール オプション] セクションのスイッチをクリックします。

  5. [クエリを実行] をクリックしてクエリを実行します。レポートページには、入力したクエリ パラメータと、入力したリソースに対して指定されたプリンシパルが持つすべてのロールの結果テーブルが表示されます。

gcloud

asset analyze-iam-policy gcloud コマンドを使用して、API 対応プロジェクトで AnalyzeIamPolicy を呼び出せます。Cloud SDK バージョン 314.0.0 以降を実行している必要があります。gcloud version コマンドでバージョンを確認できます。

USERORG_IDFULL_RESOURCE_NAME に対してどのロールまたは権限を持つかを決定するには:

gcloud asset analyze-iam-policy --organization="ORG_ID" \
    --full-resource-name="FULL_RESOURCE_NAME" \
    --identity="USER"

たとえば、組織 1234567890 の Compute Engine インスタンス ipa-gce-instance-2 にユーザー user1@example.com が付与されているロールまたは権限は、次のとおり検索します。

gcloud asset analyze-iam-policy --organization="1234567890" \
    --full-resource-name="//compute.googleapis.com/projects/project1/zones/us-central1-a/instances/ipa-gce-instance-2" \
    --identity="user:user1@example.com"

REST

  1. IAM ポリシーを分析し、gcurl エイリアスを使用して結果を書き込みます。

  2. リクエスト本文用のファイル request.json を作成し、その内容を JSON 形式で分析リクエストに設定します。

    たとえば、次のリクエスト本文では、ユーザー user1@example.com が Compute Engine インスタンス ipa-gce-instance-2 に対しどのロールまたは権限が付与されているかをチェックします。

    {
      "analysisQuery": {
        "resourceSelector": {
          "fullResourceName":
            "//compute.googleapis.com/projects/project1/zones/us-central1-a/instances/ipa-gce-instance-2"
         },
        "identitySelector": {
          "identity": "user:user1@example.com"
        }
      }
    }
    
  3. 次の gcurl コマンドを使用して IAM ポリシーを分析します。

    gcurl -d @request.json \
    "https://cloudasset.googleapis.com/v1/organizations/ORG_ID:analyzeIamPolicy"
    

    ここで、ORG_ID は組織 ID です(たとえば、1234567890)。

プリンシパルがアクセスできるリソースを決定する

Policy Analyzer を使用して、プリンシパルが組織内のどのリソースに対し特定のロールまたは権限を持つかを確認できます。この情報を取得するには、アクセスを分析するプリンシパルと、確認する 1 つ以上の権限とロールを含むリソースに関するクエリを作成します。

Console

  1. Cloud Console で、[Policy Analyzer] ページに移動します。

    [Policy Analyzer] ページに移動

  2. [カスタマイズされたクエリを構築] プルダウン メニューをクリックして、[リソース] をクリックします。

  3. [プリンシパル] フィールドに、ユーザー、サービス アカウント、またはグループの名前を入力します。次に、提供されたプリンシパルのリストから、アクセスを分析するユーザー、サービス アカウント、グループを選択します。

  4. [ロールまたは権限、あるいはその両方を選択] で、分析する 1 つ以上のロールまたは権限を選択します。

    • ロールを追加するには、 [ロールを追加] をクリックします。次に、ロールの一覧からロールを選択します。別のロールを追加するには、 [別のロールを追加] をクリックし、追加するロールを選択します。
    • 権限を追加するには、 [権限を追加] をクリックします。次に、追加する権限を選択します。権限を追加するには、 [権限を追加] をクリックし、追加する権限を選択します。
  5. 省略可: 結果ページのプロジェクト内のリソースを一覧表示するには、[リソース オプション] セクションでスイッチをクリックします。

  6. [クエリを実行] をクリックしてクエリを実行します。レポートページには、入力したクエリ パラメータと、指定したプリンシパルが入力済みのロールまたは権限を持つすべてのリソースの結果テーブルが表示されます。

gcloud

asset analyze-iam-policy gcloud コマンドを使用して、API 対応プロジェクトで AnalyzeIamPolicy を呼び出せます。Cloud SDK バージョン 314.0.0 以降を実行している必要があります。gcloud version コマンドでバージョンを確認できます。

USERORG_ID 配下のどのリソースに対し COMMA_SEPARATED_PERMISSIONS を持つかを決定するには:

gcloud asset analyze-iam-policy --organization="ORG_ID" \
    --identity="USER" \
    --permissions="COMMA_SEPARATED_PERMISSIONS"

たとえば、user1@example.com が組織 1234567890 のどのリソースに対して compute.instances.get 権限または compute.instances.start 権限を持つかは、以下のとおり検索します。

gcloud asset analyze-iam-policy --organization="1234567890" \
    --identity="user:user1@example.com" \
    --permissions="compute.instances.get,compute.instances.start"

REST

  1. IAM ポリシーを分析し、gcurl エイリアスを使用して結果を書き込みます。

  2. リクエスト本文用のファイル request.json を作成し、その内容を JSON 形式で分析リクエストに設定します。

    たとえば、次のリクエストの本文では、user1@example.comcompute.instances.get 権限または compute.instances.start 権限を持つリソースを確認します。

    {
      "analysisQuery": {
        "identitySelector": {
          "identity": "user:user1@example.com"
         },
        "accessSelector": {
          "permissions": [
            "compute.instances.get",
            "compute.instances.start"
          ]
        }
      }
    }
    
  3. 次の gcurl コマンドを使用して IAM ポリシーを分析します。

    gcurl -d @request.json  \
    "https://cloudasset.googleapis.com/v1/organizations/ORG_ID:analyzeIamPolicy"
    

    ここで、ORG_ID は組織 ID です(たとえば、1234567890)。

クライアント ライブラリと API リファレンス

クエリの構築

クエリのその他のユースケースとオプションについては、IAM ポリシークエリのサンプルの分析をご覧ください。

制限事項

  • Cloud Console のポリシー アナライザでは、サービス アカウントの権限借用の分析はできません。サービス アカウントの権限借用を分析するには、REST API または gcloud ツールを使用します。

  • IAM Conditions は、返されたポリシー バインディングと同様に表示されます。条件については詳細に説明しません。バインディングに 1 つ以上の条件が存在する場合、そのバインディングで出力されたすべての ID が条件付きアクセス権を持つことを意味します。

  • サポートされないリソースタイプもあります。サポートされるリソースタイプのリストをご覧ください。