クエリのサンプル

このページでは、ポリシー分析に対して AnalyzeIamPolicy メソッドと AnalyzeIamPolicyLongrunning メソッドを使用する方法を示すサンプルクエリを提供します。

始める前に

AnalyzeIamPolicy

  • 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 など)。

AnalyzeIamPolicyLongrunning

  • プロジェクトで 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'
    

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

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

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

特定のリソースに対する特定のロール / 権限を持つ ID の検索

特定のサービス アカウントに対する iam.serviceAccounts.actAs 権限または iam.serviceAccounts.get 権限が付与されている ID を確認するには、次のコマンドを実行します。

gcloud

gcloud asset GCLOUD_METHOD_NAME \
    --organization="ORG_ID" \
    --full-resource-name="FULL_RESOURCE_NAME" \
    --permissions="COMMA_SEPARATED_PERMISSIONS" \
    --expand-groups \
    --output-group-edges \
    --show-response

例:

gcloud asset analyze-iam-policy --organization="123456789" \
    --full-resource-name="//iam.googleapis.com/projects/project1/serviceAccounts/sa1@project1.iam.gserviceaccount.com" \
    --permissions="iam.serviceAccounts.actAs,iam.serviceAccounts.get" \
    --expand-groups \
    --output-group-edges \
    --show-response

REST

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

    {
      "analysisQuery":{
        "scope":"organizations/ORG_ID",
        "resourceSelector":{
           "fullResourceName":"FULL_RESOURCE_NAME"
        },
        "accessSelector":{
           "permissions":[
              "iam.serviceAccounts.actAs",
              "iam.serviceAccounts.get"
           ]
        },
        "options":{
           "expandGroups":EXPAND_GROUPS,
           "outputGroupEdges":OUTPUT_GROUP_EDGES,
           "outputResourceEdges":OUTPUT_RESOURCE_EDGES,
           "analyzeServiceAccountImpersonation":ANALYZE_SERVICE_ACCOUNT_IMPERSONATION
        }
      }
    }
    

    例:

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "resourceSelector":{
           "fullResourceName":"//iam.googleapis.com/projects/project1/serviceAccounts/sa1@project1.iam.gserviceaccount.com"
        },
        "accessSelector":{
           "permissions":[
              "iam.serviceAccounts.actAs",
              "iam.serviceAccounts.get"
           ]
          },
        "options":{
           "expandGroups":true,
           "outputGroupEdges":true,
           "outputResourceEdges":false,
           "analyzeServiceAccountImpersonation":false
        }
      }
    }
    
  2. request.json ファイルを作成した後、gcurl エイリアスを使用して次のコマンドでリクエストを実行できます。

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

    ここで

    • ORG_ID は 組織 ID です(1234567890 など)。
    • REST_ANALYZE_METHOD は、analyzeIamPolicyanalyzeIamPolicyLongrunning のいずれかの分析方法です。

このメソッドは、ポリシーに表示される ID と、グループ メンバーシップを通じて付与された ID を返します。ポリシーに表示される ID のみを返すには、--expand-groups オプションと --output-group-edges オプションを無効にします。

指定したリソースが、ポリシーが接続されたリソースを継承する方法を確認するには、--output-resource-edges オプションを有効にします。たとえば、ポリシーがフォルダ f1 に設定されたとすると、f1-to-project1 と project1-to-sa1 のリソースエッジが表示されます。

サービス アカウントの権限借用によって特定のリソースに間接的にアクセスする可能性がある ID を見つける場合は、--analyze-service-account-impersonation オプションを有効にします。

特定のリソースに対するロール / 権限を持つ ID の検索

指定したサービス アカウントにロールまたは権限が付与された ID を検索するには、次のコマンドを実行します。

gcloud

gcloud asset GCLOUD_METHOD_NAME \
    --organization="ORG_ID" \
    --full-resource-name="FULL_RESOURCE_NAME" \
    --expand-roles

例:

gcloud asset analyze-iam-policy --organization="123456789" \
    --full-resource-name="//iam.googleapis.com/projects/project1/serviceAccounts/sa1@project1.iam.gserviceaccount.com" \
    --expand-roles

REST

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

    {
      "analysisQuery":{
        "scope":"organizations/ORG_ID",
        "resourceSelector":{
           "fullResourceName":"FULL_RESOURCE_NAME"
        },
        "options":{
           "expandRoles":EXPAND_ROLES,
           "expandGroups":EXPAND_GROUPS,
           "outputGroupEdges":OUTPUT_GROUP_EDGES,
           "outputResourceEdges":OUTPUT_RESOURCE_EDGES,
           "analyzeServiceAccountImpersonation":ANALYZE_SERVICE_ACCOUNT_IMPERSONATION
        }
      }
    }
    

    例:

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "resourceSelector":{
           "fullResourceName":"//iam.googleapis.com/projects/project1/serviceAccounts/sa1@project1.iam.gserviceaccount.com"
        },
        "options":{
           "expandRoles":true,
           "expandGroups":false,
           "outputGroupEdges":false,
           "outputResourceEdges":false,
           "analyzeServiceAccountImpersonation":false
        }
      }
    }
    
  2. request.json ファイルを作成した後、gcurl エイリアスを使用して次のコマンドでリクエストを実行できます。

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

    ここで

    • ORG_ID は 組織 ID です(1234567890 など)。
    • REST_ANALYZE_METHOD は、analyzeIamPolicyanalyzeIamPolicyLongrunning のいずれかの分析方法です。

このメソッドは、ポリシーに表示されるロールと、そのポリシーが接続されたロールに含まれる権限を返します。ポリシーに表示されるロールのみを表示するには、--expand-roles オプションを無効にします。

--expand-groups および --output-group-edges オプションを有効にすると、結果にグループ メンバーシップを通じて権限が付与される ID が表示されます。

指定したリソースが、ポリシーが接続されたリソースを継承する方法を確認するには、--output-resource-edges オプションを有効にします。たとえば、ポリシーがフォルダ f1 に設定されたとすると、f1-to-project1 と project1-to-sa1 のリソースエッジが表示されます。

サービス アカウントの権限借用によって特定のリソースに間接的にアクセスする可能性がある ID を見つける場合は、--analyze-service-account-impersonation オプションを有効にします。

プロジェクト内の特定のロール / 権限を持つ ID の検索

プロジェクト内の任意のサービス アカウントで iam.serviceAccounts.actAs 権限または iam.serviceAccounts.get 権限が付与されている ID を確認するには、次のコマンドを実行します。

gcloud

gcloud asset GCLOUD_METHOD_NAME \
    --organization="ORG_ID" \
    --full-resource-name="FULL_RESOURCE_NAME" \
    --permissions="COMMA_SEPARATED_PERMISSIONS" \
    --expand-resources

例:

gcloud asset analyze-iam-policy --organization="123456789" \
    --full-resource-name="//cloudresourcemanager.googleapis.com/projects/project1" \
    --permissions="iam.serviceAccounts.actAs" \
    --expand-resources

REST

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

    {
      "analysisQuery":{
        "scope":"organizations/ORG_ID",
        "resourceSelector":{
           "fullResourceName":"FULL_RESOURCE_NAME"
        },
        "accessSelector":{
           "permissions":[
              "iam.serviceAccounts.actAs"
           ]
        },
        "options":{
           "expandResources":EXPAND_RESOURCES
        }
      }
    }
    

    例:

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "resourceSelector":{
           "fullResourceName":"//cloudresourcemanager.googleapis.com/projects/project1"
        },
        "accessSelector":{
           "permissions":[
              "iam.serviceAccounts.actAs"
           ]
        },
        "options":{
           "expandResources":true
        }
      }
    }
    
  2. request.json ファイルを作成した後、gcurl エイリアスを使用して次のコマンドでリクエストを実行できます。

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

    ここで

    • ORG_ID は 組織 ID です(1234567890 など)。
    • REST_ANALYZE_METHOD は、analyzeIamPolicyanalyzeIamPolicyLongrunning のいずれかの分析方法です。

特定の ID に対する特定のロール / 権限を持つリソースの検索

指定したユーザーに iam.serviceAccounts.actAs 権限または iam.serviceAccounts.get 権限が付与されているリソースを見つけるには、次のコマンドを実行します。

gcloud

gcloud asset GCLOUD_METHOD_NAME \
    --organization="ORG_ID" \
    --identity="IDENTITY" \
    --permissions="COMMA_SEPARATED_PERMISSIONS"

例:

gcloud asset analyze-iam-policy --organization="123456789" \
    --identity="user:user1@example.com" \
    --permissions="iam.serviceAccounts.actAs,iam.serviceAccounts.get"

REST

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

    {
      "analysisQuery":{
        "scope":"organizations/ORG_ID",
        "identitySelector":{
           "identity":"IDENTITY"
        },
        "accessSelector":{
           "permissions":[
              "iam.serviceAccounts.actAs",
              "iam.serviceAccounts.get"
           ]
        },
        "options":{
           "outputGroupEdges":OUTPUT_GROUP_EDGES,
           "expandResources":EXPAND_RESOURCES,
           "outputResourceEdges":OUTPUT_RESOURCE_EDGES,
           "analyzeServiceAccountImpersonation":ANALYZE_SERVICE_ACCOUNT_IMPERSONATION
        }
      }
    }
    

    例:

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "identitySelector":{
           "identity":"user:user1@example.com"
        },
        "accessSelector":{
           "permissions":[
              "iam.serviceAccounts.actAs",
              "iam.serviceAccounts.get"
           ]
        },
        "options":{
           "outputGroupEdges":false,
           "expandResources":false,
           "outputResourceEdges":false,
           "analyzeServiceAccountImpersonation":false
        }
      }
    }
    
  2. request.json ファイルを作成した後、gcurl エイリアスを使用して次のコマンドでリクエストを実行できます。

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

    ここで

    • ORG_ID は 組織 ID です(1234567890 など)。
    • REST_ANALYZE_METHOD は、analyzeIamPolicyanalyzeIamPolicyLongrunning のいずれかの分析方法です。

--expand-resources オプションと --output-resource-edges オプションを有効にすると、指定した ID に対する指定したアクセス権が付与された継承リソースを表示できます。

指定した ID がグループ メンバーシップを介してアクセスを継承する方法を確認する場合は、--output-group-edges オプションを有効にします。たとえば、ポリシーがメンバー グループ g1 で、user1 がそのメンバーである場合、g1-user1 グループのエッジが表示されます。

指定した ID によりサービス アカウントの権限借用で間接的にアクセスされる可能性のあるリソースを検索するには、--analyze-service-account-impersonation オプションを有効にします。

指定した ID に対するロール / 権限を持つリソースの検索

指定したユーザーにロール / 権限が付与されたリソースを検索するには、次のコマンドを実行します。

gcloud

gcloud asset GCLOUD_METHOD_NAME \
    --organization="ORG_ID" \
    --identity="IDENTITY" \
    --expand-roles \
    --expand-resources \
    --output-resource-edges \
    --show-response

例:

gcloud asset analyze-iam-policy --organization="123456789" \
    --identity="user:user1@example.com" \
    --expand-roles \
    --expand-resources \
    --output-resource-edges \
    --show-response

REST

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

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "identitySelector":{
           "identity":"user:user1@example.com"
        },
        "options":{
           "expandRoles":EXPAND_ROLES,
           "outputGroupEdges":OUTPUT_GROUP_EDGES,
           "expandResources":EXPAND_RESOURCES,
           "outputResourceEdges":OUTPUT_RESOURCE_EDGES,
           "analyzeServiceAccountImpersonation":ANALYZE_SERVICE_ACCOUNT_IMPERSONATION
        }
      }
    }
    

    例:

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "identitySelector":{
           "identity":"user:user1@example.com"
        },
        "options":{
           "expandRoles":true,
           "outputGroupEdges":false,
           "expandResources":true,
           "outputResourceEdges":true,
           "analyzeServiceAccountImpersonation":false
        }
      }
    }
    
  2. request.json ファイルを作成した後、gcurl エイリアスを使用して次のコマンドでリクエストを実行できます。

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

    ここで

    • ORG_ID は 組織 ID です(1234567890 など)。
    • REST_ANALYZE_METHOD は、analyzeIamPolicyanalyzeIamPolicyLongrunning のいずれかの分析方法です。

このメソッドは、ポリシーに表示されるロールと、そのポリシーが接続されたロールに含まれる権限を返します。ポリシーに表示されるロールのみを表示するには、--expand-roles オプションを無効にします。

このコマンドは、ポリシーに表示されるリソースと、指定した ID に対してアクセス権を付与された継承されたリソースを返します。ポリシーに含まれるリソースのみを表示するには、--expand-resources オプションと --output-resource-edges オプションを無効にします。

指定した ID がグループ メンバーシップを介してアクセスを継承する方法を確認する場合は、--output-group-edges オプションを有効にします。たとえば、ポリシーがメンバー グループ g1 で、user1 がそのメンバーである場合、g1-user1 グループのエッジが表示されます。

指定した ID によりサービス アカウントの権限借用で間接的にアクセスされる可能性のあるリソースを検索するには、--analyze-service-account-impersonation オプションを有効にします。

特定の ID に対する指定されたリソースにおけるロール / 権限の検索

指定したサービス アカウントで、指定したユーザーに付与されたロールまたは権限を確認するには、次のコマンドを実行します。

gcloud

gcloud asset GCLOUD_METHOD_NAME \
    --organization="ORG_ID" \
    --full-resource-name="FULL_RESOURCE_NAME" \
    --identity="IDENTITY" \
    --expand-roles

例:

gcloud asset analyze-iam-policy --organization="123456789" \
    --full-resource-name="//iam.googleapis.com/projects/project1/serviceAccounts/sa1@project1.iam.gserviceaccount.com" \
    --identity="user:user1@example.com" \
    --expand-roles

REST

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

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "resourceSelector":{
           "fullResourceName":"FULL_RESOURCE_NAME"
        },
        "identitySelector":{
           "identity":"IDENTITY"
        },
        "options":{
           "expandRoles":EXPAND_ROLES,
           "outputGroupEdges":OUTPUT_GROUP_EDGES,
           "outputResourceEdges":OUTPUT_RESOURCE_EDGES
        }
      }
    }
    

    例:

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "resourceSelector":{
           "fullResourceName":"//iam.googleapis.com/projects/project1/serviceAccounts/sa1@project1.iam.gserviceaccount.com"
        },
        "identitySelector":{
           "identity":"user:user1@example.com"
        },
        "options":{
           "expandRoles":true,
           "outputGroupEdges":false,
           "outputResourceEdges":false
        }
      }
    }
    
  2. request.json ファイルを作成した後、gcurl エイリアスを使用して次のコマンドでリクエストを実行できます。

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

    ここで

    • ORG_ID は 組織 ID です(1234567890 など)。
    • REST_ANALYZE_METHOD は、analyzeIamPolicyanalyzeIamPolicyLongrunning のいずれかの分析方法です。

このコマンドは、ポリシーに表示されるロールと、そのポリシーが接続されたロールに含まれる権限を返します。ポリシーに表示されるロールのみを表示するには、--expand-roles オプションを無効にします。

指定した ID がグループ メンバーシップを介してアクセスを継承する方法を確認する場合は、--output-group-edges オプションを有効にします。たとえば、ポリシーがメンバー グループ g1 で、user1 がそのメンバーである場合、g1-user1 グループのエッジが表示されます。

指定したリソースが、ポリシーが接続されたリソースを継承する方法を確認するには、--output-resource-edges オプションを有効にします。たとえば、ポリシーがフォルダ f1 に設定されたとすると、f1-to-project1 と project1-to-sa1 のリソースエッジが表示されます。

特定のロール / 権限を持つ ID とリソースの検索

iam.serviceAccounts.actAs 権限が付与されている ID とリソースを見つけるには、次のコマンドを実行します。

gcloud

gcloud asset GCLOUD_METHOD_NAME \
    --organization="ORG_ID" \
    --permissions="COMMA_SEPARATED_PERMISSIONS"

例:

gcloud asset analyze-iam-policy --organization="123456789" \
    --permissions="iam.serviceAccounts.actAs"

REST

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

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "resourceSelector":{
           "fullResourceName":"FULL_RESOURCE_NAME"
        },
        "identitySelector":{
           "identity":"IDENTITY"
        },
        "options":{
           "expandGroups":EXPAND_GROUPS,
           "outputGroupEdges":OUTPUT_GROUP_EDGES,
           "expandResources":EXPAND_RESOURCES,
           "outputResourceEdges":OUTPUT_RESOURCE_EDGES
        }
      }
    }
    

    例:

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "accessSelector":{
           "permissions":[
              "iam.serviceAccounts.actAs"
           ]
        },
        "options":{
           "expandGroups":false,
           "outputGroupEdges":false,
           "expandResources":false,
           "outputResourceEdges":false
        }
      }
    }
    
  2. request.json ファイルを作成した後、gcurl エイリアスを使用して次のコマンドでリクエストを実行できます。

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

    ここで

    • ORG_ID は 組織 ID です(1234567890 など)。
    • REST_ANALYZE_METHOD は、analyzeIamPolicyanalyzeIamPolicyLongrunning のいずれかの分析方法です。

--expand-groups および --output-group-edges オプションを有効にすると、結果にグループ メンバーシップを通じて権限が付与される ID が表示されます。

--expand-resources オプションと --output-resource-edges オプションを有効にすると、指定した ID に対するアクセス権が付与された継承リソースを表示できます。