IAM ポリシーの検索

Cloud Asset API では、カスタムクエリ言語を使用して、プロジェクト、フォルダ、組織内の Identity and Access Management(IAM)ポリシーを検索できます。

始める前に

SearchAllIamPolicies を呼び出しています

gcloud

gcloud asset search-all-iam-policies コマンドを使用して、SearchAllIamPolicies を呼び出すことができます。Cloud SDK バージョン 302.0.0 以降を実行する必要があります。gcloud version コマンドでバージョンを確認できます。

gcloud asset search-all-iam-policies \
  --scope=SCOPE \
  --query=QUERY \
  --page-size=PAGE_SIZE

ここで

  • (省略可)SCOPE: スコープはプロジェクト、フォルダ、または組織のいずれかになります。検索の対象は、このスコープ内の IAM ポリシーに限定されます。呼び出し元には、目的のスコープに対する cloudasset.assets.searchAllIamPolicies 権限を付与しておく必要があります。権限を指定しなかった場合、構成されたプロジェクト プロパティが使用されます。構成されたプロジェクトを探すには、gcloud config get-value project を実行します。設定を変更するには、gcloud config set project PROJECT_ID を実行します。

    使用できる値は次のとおりです。

    • projects/PROJECT_ID(例: 「projects/foo-bar」)
    • projects/PROJECT_NUMBER(例: 「projects/12345678」)
    • folders/FOLDER_NUMBER(例: 「folders/1234567」)
    • organizations/ORGANIZATION_NUMBER(例: 「organizations/123456」)
  • (省略可)QUERY: クエリ ステートメント。詳細については、クエリの作成方法をご覧ください。指定しなかった場合、または空の場合は、指定された scope 内のすべての IAM ポリシーが検索されます。なお、クエリ文字列は、メンバー、ロール、IAM 条件を含む各 IAM ポリシー バインディングと比較されます。返される IAM ポリシーには、クエリに一致するバインディングのみが含まれます。IAM ポリシーの構造の詳細については、IAM ポリシーのドキュメントをご覧ください。

    例:

    • policy:amy@gmail.com: ユーザー「amy@gmail.com」を指定する IAM ポリシー バインディングを検索します。
    • policy:roles/compute.admin: Compute Admin ロールを指定する IAM ポリシー バインディングを検索します。
    • policy:comp*: バインディングに接頭辞として「comp」が付いている単語を含む IAM ポリシー バインディングを検索します。
    • policy.role.permissions:storage.buckets.update:「storage.buckets.update」権限を含むロールを指定する、IAM ポリシー バインディングを検索します。なお、ロールに含まれる権限に対する iam.roles.get アクセス権が呼び出し元にない場合、このロールを指定するポリシー バインディングが検索結果から除外されます。
    • policy.role.permissions:upd*: バインディング内の任意の単語の接頭辞として、「upd」を含むロールを指定する IAM ポリシー バインディングを検索します。なお、ロールに含まれる権限に対する iam.roles.get アクセス権が呼び出し元にない場合、このロールを指定するポリシー バインディングが検索結果から除外されます。
    • resource:organizations/123456:「organizations/123456」に設定されている IAM ポリシー バインディングを検索します。
    • resource=//cloudresourcemanager.googleapis.com/projects/myproject:「myproject」という名前のプロジェクトで設定されている IAM ポリシー バインディングを検索します。
    • Important: 検索可能フィールドに「Important」という単語を含む IAM ポリシー バインディングを検索します(含まれている権限を除く)。
    • resource:(instance1 OR instance2) policy:amy: リソース「instance1」または「instance2」に設定されている IAM ポリシー バインディングを検索し、ユーザー「amy」も指定します。
  • (省略可)PAGE_SIZE: 検索結果ページを分割する際のページ数。最大値は 500 です。値が 0 に設定されている場合は、適切なデフォルト値が選択されます。

  • mycompany.com ドメインを含む organizations/123456 内の IAM ポリシー バインディングをすべて検索します。

    gcloud asset search-all-iam-policies \
      --scope='organizations/123456' \
      --query='policy:"domain:mycompany.com"'
    
  • organizations/123456 で、myuser@mycompany.com にオーナー(roles/owner)の基本ロールを付与されたすべての IAM ポリシー バインディングを検索します。

    gcloud asset search-all-iam-policies \
      --scope='organizations/123456' \
      --query='policy:(roles/owner myuser@mycompany.com)'
    
  • projects/12345678 に設定されている organizations/123456 内のすべての IAM ポリシー バインディングを検索します。

    gcloud asset search-all-iam-policies \
      --scope='organizations/123456' \
      --query='resource:projects/12345678'
    

api

プロジェクトで有効な OAuth トークンを使用して SearchAllIamPolicies を呼び出すことができます。Cloud Shell または gcloud コマンドを使用できるコンソールから SearchAllIamPolicies メソッドを呼び出すには、以下の手順に従います。

  1. プロジェクトの OAuth 同意画面を構成していない場合は、構成する必要があります。OAuth 同意画面には、メールアドレスとプロダクト名が必要です。

    1. プロジェクトの OAuth 同意画面に移動します。
      同意画面を構成
    2. [アプリケーション名] に、アプリケーションの表示名を入力します。
    3. [サポートメール] で、一般公開される連絡先として表示するメールアドレスを選択します。これは、自分のメールアドレスまたは自分が所有する Google グループである必要があります。
    4. 任意の詳細を追加します。
    5. [保存] をクリックします。
  2. プロジェクトの OAuth トークンを作成します。詳しくは、OAuth 2.0 の設定をご覧ください。

    1. OAuth クライアント ID の作成ページに移動します。
      OAuth クライアントの作成
    2. [デスクトップ アプリ] を [アプリケーションの種類] として選択します。
    3. [作成] をクリックします。
  3. client_secret.json ファイルをダウンロードします。

    1. [認証情報] ページに移動します。
    2. 新しい [クライアント ID] の右側にある [JSON をダウンロード] をクリックします。
    3. ご使用のアプリだけがアクセスできる場所に、ファイルを安全に保存します。
  4. 次のコマンドを使用して、JSON ファイルを使用してログインします。

    gcloud auth application-default login --client-id-file=YOUR_JSON_FILE
    

    このコマンドを実行すると、リンクを開くよう求めるメッセージが表示されます。OAuth 同意画面で設定したアプリケーション名がページに表示されるかを確認します。

  5. 次のコマンドを使用して、アカウントの認証トークンを生成します。

    TOKEN=$(gcloud auth application-default print-access-token)
    
  6. curl コマンドを使用して IAM ポリシーを照会できるようになりました。

    PAGE_SIZE=PAGE_SIZE
    PAGE_TOKEN="PAGE_TOKEN"
    SCOPE="SCOPE"
    QUERY="QUERY"
    curl -s -G \
        -H "Authorization: Bearer $TOKEN" \
        -d "page_size=$PAGE_SIZE" \
        -d "page_token=$PAGE_TOKEN" \
        --data-urlencode "query=$QUERY" \
        "https://cloudasset.googleapis.com/v1/$SCOPE:searchAllIamPolicies"
    
  • (省略可)SCOPE: スコープはプロジェクト、フォルダ、または組織のいずれかになります。検索の対象は、このスコープ内の IAM ポリシーに限定されます。呼び出し元には、目的のスコープに対する cloudasset.assets.searchAllIamPolicies 権限を付与しておく必要があります。

    使用できる値は次のとおりです。

    • projects/PROJECT_ID(例: 「projects/foo-bar」)
    • projects/PROJECT_NUMBER(例: 「projects/12345678」)
    • folders/FOLDER_NUMBER(例: 「folders/1234567」)
    • organizations/ORGANIZATION_NUMBER(例: 「organizations/123456」)
  • (省略可)QUERY: クエリ ステートメント。詳細については、クエリの作成方法をご覧ください。指定しなかった場合、または空の場合は、指定された scope 内のすべての IAM ポリシーが検索されます。なお、クエリ文字列は、メンバー、ロール、IAM 条件を含む各 IAM ポリシー バインディングと比較されます。返される IAM ポリシーには、クエリに一致するバインディングのみが含まれます。IAM ポリシーの構造の詳細については、IAM ポリシーのドキュメントをご覧ください。

    例:

    • policy:amy@gmail.com: ユーザー「amy@gmail.com」を指定する IAM ポリシー バインディングを検索します。
    • policy:roles/compute.admin: Compute Admin ロールを指定する IAM ポリシー バインディングを検索します。
    • policy:comp*: バインディングに接頭辞として「comp」が付いている単語を含む IAM ポリシー バインディングを検索します。
    • policy.role.permissions:storage.buckets.update:「storage.buckets.update」権限を含む Cloud IAM ポリシー バインディングを検索します。なお、ロールに含まれる権限に対する iam.roles.get アクセス権が呼び出し元にない場合、このロールを指定するポリシー バインディングが検索結果から除外されます。
    • policy.role.permissions:upd*: バインディング内の任意の単語の接頭辞として、「upd」を含むロールの権限を指定する IAM ポリシー バインディングを検索します。なお、ロールに含まれる権限に対する iam.roles.get アクセス権が呼び出し元にない場合、このロールを指定するポリシー バインディングが検索結果から除外されます。
    • resource:organizations/123456:「organizations/123456」に設定されている IAM ポリシー バインディングを検索します。
    • resource=//cloudresourcemanager.googleapis.com/projects/myproject:「myproject」という名前のプロジェクトで設定されている IAM ポリシー バインディングを検索します。
    • Important: 検索可能フィールドに「Important」という単語を含む IAM ポリシー バインディングを検索します(含まれている権限を除く)。
    • resource:(instance1 OR instance2) policy:amy: リソース「instance1」または「instance2」に設定されている IAM ポリシー バインディングを検索し、ユーザー「amy」も指定します。
  • (省略可)PAGE_SIZE: 検索結果ページを分割する際のページ数。最大値は 2,000 です。値が 0 に設定されている場合は、適切なデフォルト値が選択されます。

  • (省略可)PAGE_TOKEN: このメソッドに対する前の呼び出し結果の次のバッチを表すトークン。page_token は、前の呼び出しのレスポンスの next_page_token の値と同じである必要があります。

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

クエリの作成方法

クエリ言語に関する詳細は、クエリ構文をご覧ください。

さまざまな実用例でのサンプルクエリについては、IAM ポリシーの検索のサンプルをご覧ください。

バインディング情報により IAM ポリシーを照会する

IAM ポリシーを検索するには、以下のクエリ式を使用します。

policy:QUERY

メンバー

IAM ポリシー バインディングは、次の 5 種類のメンバーをサポートしています。

  1. Google アカウント(例: user:user@gmail.com
  2. Google グループ(例: group:devs@googlegroups.com
  3. Cloud Identity および G Suite ドメイン(例: domain:google.com
  4. サービス アカウント(例: serviceAccount:my-other-app@appspot.gserviceaccount.com
  5. 特殊識別子(例: allUsersallAuthenticatedUsers

次の構文を使用して、特定のユーザーに関連するポリシーにクエリを制限できます。

policy:"user:amy@mycompany.com"

なお、user:amy@mycompany.com には特殊文字 : が含まれているため、二重引用符で囲む必要があります。クエリ値が十分に一意である場合、またはメンバータイプに関係なくメールアドレスを検索したい場合は、クエリ文字列の接頭辞 user: または group: を省略できます。たとえば、次のクエリは 1 人のユーザーにのみ一致すると考えられます。

policy:amy@mycompany.com
例: メンバーによる照会
  • ユーザー Amy を指定する IAM ポリシー バインディングをすべて検索します。

    policy:amy
    
  • ドメイン mydomain.com を指定する IAM ポリシー バインディングをすべて検索します。

    policy:mydomain.com
    
  • ユーザー AmyJohn を指定するすべての IAM ポリシー バインディングを検索します。

    policy:(amy john)
    
  • ユーザー Amy または John を指定するすべての IAM ポリシー バインディングを検索します。

    policy:(amy OR john)
    
  • amy@mycompany.com を含む組織内のすべての IAM ポリシー バインディングを検索します。

    policy:amy@mycompany.com
    
  • mycompany.com ドメインを含む組織内のすべての IAM ポリシー バインディングを検索します。

    policy:"domain:mycompany.com"
    
  • mycompany.gserviceaccount.com サービス アカウントにロールを割り当てるすべての IAM ポリシー バインディングを検索します。

    policy:"serviceAccount:mycompany.gserviceaccount.com"
    
  • admins グループにロールを割り当てるすべての IAM ポリシー バインディングを検索します。

    policy:"group:admins"
    
  • すべてのユーザーにロールを割り当てるすべての IAM ポリシー バインディングを検索します。

    policy:allUsers
    
  • すべての認証済みユーザーにロールを割り当てるすべての IAM ポリシー バインディングを検索します。

    policy:allAuthenticatedUsers
    
  • amy@mycompany.com または mycompany.com ドメインにロールを割り当てるすべての IAM ポリシー バインディングを検索します。

    policy:(amy@mycompany.com OR "domain:mycompany.com")
    

役割

IAM ポリシー バインディングでは、さまざまな種類のロールがサポートされます。すべての IAM ロール名は roles/ 接頭辞で始まります。

  1. 基本ロール: IAM 導入前に存在していた、オーナー(roles/owner)、編集者(roles/editor)、閲覧者(roles/viewer)の 3 つのロール。
  2. 事前定義ロール: IAM では、さまざまなリソースへのアクセス権をきめ細かく付与する、事前定義されたロールを使用できます。すべての事前定義ロールをご覧ください。
  3. カスタムロール: 選択された権限のリストを含むユーザー定義の IAM ロール。

次の構文を使用して、クエリを特定の役割に関連したポリシーに限定できます。

policy:roles/role-name

なお、クエリ値が十分に一意である場合は、クエリ文字列で roles/ 接頭辞を省略できます。たとえば、次のクエリはロール roles/cloudasset.owner にのみ一致すると考えられます。

policy:cloudasset.owner
例: ロールによる照会
  • owner ロールを指定するすべての IAM ポリシー バインディングを検索します。

    policy:roles/owner
    
  • amy@mycompany.com にオーナーのロールを割り当てるすべての IAM ポリシー バインディングを検索します。

    policy:(roles/owner amy@mycompany.com)
    
  • メールアドレスに john という単語が含まれるメンバーに compute.admin ロールを割り当てるすべての IAM ポリシー バインディングを検索します。

    policy:(roles/compute.admin john)
    
  • 接頭辞として「swe」または「sde」を持つユーザーに viewer のロールを付与する IAM ポリシー バインディングをすべて検索します。

    policy:(roles/viewer (swe* OR sde*))
    

IAM の条件

IAM ポリシー バインディングに condition オブジェクトを含めると、Google Cloud リソースに対する条件付き、属性ベースのアクセス制御を定義して適用できます。詳しくは、IAM Conditions の概要をご覧ください。

次の構文を使用すると、特定の条件に関連するポリシーにクエリを制限できます。

policy:condition_information
例: 条件によるクエリ
  • 条件を指定するすべての IAM ポリシー バインディングを検索します。そのタイトルまたは説明には「myCondition」という単語が含まれています。

    policy:myCondition
    
  • 式に「request.time」という属性が含まれる条件を指定するすべての IAM ポリシー バインディングを検索します。

    policy:"request.time"
    

含まれる権限により IAM ポリシーを照会する

ポリシー内のロールには、権限のリストを含めることができます。詳細については、IAM 権限のリファレンスをご覧ください。クエリは、特定の権限を含むポリシーに制限できます。クエリ式の形式は次のとおりです。

  • 完全一致: policy.role.permissions=QUERY
  • 部分一致: policy.role.permissions:QUERY
例: 権限による照会
  • compute.instances.create 権限を含む IAM ポリシー バインディングをすべて検索します。

    policy.role.permissions:compute.instances.create
    policy.role.permissions=compute.instances.create
    
  • compute.instances に関連する権限を含む IAM ポリシー バインディングをすべて検索します。

    policy.role.permissions:compute.instances
    
  • 権限 cloudasset.assets.export...cloudasset.assets.exportAssetscloudasset.assets.exportIamPolicyAnalysis など)を含む IAM ポリシー バインディングをすべて検索します。

    policy.role.permissions:cloudasset.assets.export*
    
  • IAM ポリシーを変更する権限を誰かに付与する IAM ポリシー バインディングを検索します。

    policy.role.permissions:setIamPolicy
    
  • compute.instances.create 権限と compute.disks.create 権限の両方を含むロールを持つすべての IAM ポリシー バインディングを検索します。

    policy.role.permissions:(compute.instances.create compute.disks.create)
    
  • compute.instances.create 権限を含むすべての IAM ポリシー バインディングを検索して、ユーザー amy を指定します。

    policy.role.permissions:compute.instances.create policy:amy
    policy.role.permissions=compute.instances.create policy:amy
    

リソース名により IAM ポリシーを照会する

検索を実行するときに、リソースに直接設定されたポリシーのみを検索するために、完全なリソース名を指定できます。クエリ式の形式は次のとおりです。

  • 完全一致: resource=QUERY
  • 部分一致: resource:QUERY

例: リソース名による照会

  • 完全なリソース名//cloudresourcemanager.googleapis.com/projects/myproject と完全に一致するリソースで直接設定されているすべての IAM ポリシー バインディングを検索します。

    resource=//cloudresourcemanager.googleapis.com/projects/myproject
    
  • 完全なリソース名myproject という単語を含むリソースで直接設定される IAM ポリシー バインディングをすべて検索します。

    resource:myproject
    
  • 完全なリソース名が、指定した接頭辞 myproj を含むリソースに直接設定されている IAM ポリシー バインディングをすべて検索します。

    resource:myproj*
    
  • 任意のサービスタイプのリソースに直接設定されている IAM ポリシー バインディングをすべて検索します。

    resource:cloudresourcemanager
    
  • myproject または myfolder に設定されている IAM ポリシー バインディングをすべて検索します。

    resource:(myproject OR myfolder)
    
  • cloudresourcemanager リソースに設定されているすべての IAM ポリシー バインディングを検索し、オーナーのロールを gmail.com ユーザーに割り当てます。

    resource:cloudresourcemanager policy:(roles/owner gmail.com)
    

フリーテキストにより IAM ポリシーを照会する

フィールドを指定せずに、フリーテキスト クエリだけを使用することもできます。クエリに一致する検索可能なフィールド(ポリシー バインディング フィールド、リソース名など)が存在する限り、ポリシーが返されます。

例: フリーテキストによる照会

  • メタデータ フィールド(ポリシー バインディング、リソース名など)に Important という単語が含まれる、scope 内のすべての IAM ポリシー バインディングを検索します。

    Important
    
  • メタデータ フィールド(ポリシー バインディング、リソース名など)に import という接頭辞がついた単語が含まれる、scope 内のすべての IAM ポリシー バインディングを検索します。

    import*