Cloud Asset API では、カスタムクエリ言語を使用して、プロジェクト、フォルダ、組織内の Identity and Access Management(IAM)ポリシーを検索できます。
始める前に
- プロジェクトで Cloud Asset API を有効にします。
- 呼び出し元に、
cloudasset.assets.searchAllIamPolicies
権限を含むロールが付与されていることを確認します。詳細については、アクセス制御をご覧ください。
ポリシーを検索
Console
すべての IAM ポリシーを検索するには、次の手順を行います。
- Cloud Console の [アセット インベントリ] ページに移動します。
[アセット インベントリ] ページに移動 - 検索のスコープを設定するには、メニューバーで [プロジェクト] リストボックスを開き、クエリする組織、フォルダ、またはプロジェクトを選択します。
- [IAM ポリシー] タブを選択します。
- ポリシーを検索するには、プリセット クエリを使用するか、独自のクエリを作成します。
- プリセット クエリを使用するには、[結果をフィルタする] ペインで [クエリのプリセット] からオプションを選択します。結果をフィルタするには、[フィルタ] からオプションを選択します。
- 独自のクエリを作成するには、[Filter] バーにクエリテキストを入力します。テキスト ボックスを選択して、検索可能なフィールドのリストを表示します。ポリシー検索では複数のフィールドがサポートされます。詳しくは、クエリ構文をご覧ください。
クエリに一致するポリシーが [結果] テーブルに一覧表示されます。
クエリを Google Cloud CLI コマンドとして表示するには、[クエリを表示] を選択します。
結果をエクスポートするには、[CSV 形式でダウンロード] を選択します。
gcloud
SearchAllIamPolicies
は、gcloud asset search-all-iam-policies
コマンドを使用して呼び出せます。Google Cloud CLI のバージョン 302.0.0 以降を実行している必要があります。バージョンは、gcloud version
コマンドで確認できます。
gcloud asset search-all-iam-policies \ --scope=SCOPE \ --query=QUERY \ --asset-types=ASSET_TYPES,… \ --order-by=ORDER_BY \ --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 ポリシーの構造の詳細については、ポリシーについてをご覧ください。例:
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
: ユーザー「amy」も指定して、リソース「instance1」または「instance2」に設定されている IAM ポリシー バインディングを検索します。roles:roles/compute.admin
: Compute Admin ロールを指定する IAM ポリシー バインディングを検索します。memberTypes:user
: 「user」プリンシパル タイプを含む IAM ポリシー バインディングを検索します。
(省略可)ASSET_TYPES: Identity and Access Management ポリシーが関連付けられているアセットタイプのリスト。空の場合、すべての検索可能なアセットタイプに関連付けられている Identity and Access Management ポリシーが検索されます。正規表現もサポートされています。次に例を示します。
"compute.googleapis.com.*"
は、"compute.googleapis.com"
で始まるアセットタイプに添付される IAM ポリシーのみに限定します。".*Instance"
は、"Instance"
で終わるアセットタイプに添付される IAM ポリシーのみに限定します。".*Instance.*"
は、"Instance"
を含むアセットタイプに添付される IAM ポリシーのみに限定します。
サポートされているすべての正規表現の構文については、RE2 をご覧ください。正規表現が、サポートされているアセットタイプと一致しない場合は、
INVALID_ARGUMENT
エラーが返されます。(省略可)ORDER_BY: 結果の並べ替え順序を指定するフィールドのカンマ区切りリスト。デフォルトの順序は昇順です。降順を適用するには、フィールド名の後に
" DESC"
を追加します。重複したスペース文字は無視されます(例:"assetType DESC, resource"
)。レスポンス内の単一のプリミティブ フィールドのみを並べ替えることができます。resource
assetType
project
繰り返しフィールドなどの他フィールド(例:
folders
)と非プリミティブ フィールド(例:policy
)はサポートされていません。(省略可)PAGE_SIZE: 検索結果ページを分割する際のページ数。最大値は 500 です。値が
0
に設定されている場合は、適切なデフォルト値が選択されます。
gcloud
コマンドの例を以下に示します。
mycompany.com
ドメインを含むorganizations/123456
内の IAM ポリシー バインディングをすべて検索します。gcloud asset search-all-iam-policies \ --scope=organizations/123456 \ --query='policy:"domain:mycompany.com"'
myuser@mycompany.com
にオーナー(roles/owner
)基本ロールが付与されているorganizations/123456
内の 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
SearchAllIamPolicies
は、プロジェクトで有効な OAuth トークンを使用して呼び出せます。Cloud Shell や gcloud
コマンドを使用できるコンソールから SearchAllIamPolicies
メソッドを呼び出すには、次のようにします。
プロジェクトの OAuth 同意画面を構成していない場合は、構成する必要があります。OAuth 同意画面には、メールアドレスとプロダクト名が必要です。
- プロジェクトの OAuth 同意画面に移動します。
同意画面を構成 - [アプリケーション名] に、アプリケーションの表示名を入力します。
- [サポートメール] で、一般公開される連絡先として表示するメールアドレスを選択します。これは、自分のメールアドレスまたは自分が所有する Google グループである必要があります。
- 任意の詳細を追加します。
- [保存] をクリックします。
- プロジェクトの OAuth 同意画面に移動します。
プロジェクトの OAuth トークンを作成します。詳しくは、OAuth 2.0 の設定をご覧ください。
- OAuth クライアント ID の作成ページに移動します。
OAuth クライアントの作成 - [デスクトップ アプリ] を [アプリケーションの種類] として選択します。
- [作成] をクリックします。
- OAuth クライアント ID の作成ページに移動します。
client_secret.json
ファイルをダウンロードします。- [認証情報] ページに移動します。
- 新しい [クライアント ID] の右側にある [JSON をダウンロード] をクリックします。
- ご使用のアプリだけがアクセスできる場所に、ファイルを安全に保存します。
次のコマンドを使用して、JSON ファイルを使用してログインします。
gcloud auth application-default login --client-id-file=YOUR_JSON_FILE
このコマンドを実行すると、リンクを開くよう求めるメッセージが表示されます。OAuth 同意画面で設定したアプリケーション名がページに表示されるかを確認します。
次のコマンドを使用して、アカウントの認証トークンを生成します。
TOKEN=$(gcloud auth application-default print-access-token)
curl
コマンドを使用して IAM ポリシーを照会できるようになりました。PAGE_SIZE=PAGE_SIZE PAGE_TOKEN="PAGE_TOKEN" SCOPE="SCOPE" QUERY="QUERY" ASSET_TYPES="ASSET_TYPES,…" ORDER_BY="ORDER_BY" curl -s -G \ -H "Authorization: Bearer $TOKEN" \ -d "page_size=$PAGE_SIZE" \ -d "page_token=$PAGE_TOKEN" \ -d "scope=$SCOPE" \ -d "asset_types=$ASSET_TYPES,…" \ -d "order_by=$ORDER_BY" \ --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 ポリシーの構造の詳細については、ポリシーについてをご覧ください。例:
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」も指定します。roles:roles/compute.admin
: Compute Admin ロールを指定する IAM ポリシー バインディングを検索します。memberTypes:user
: 「user」プリンシパル タイプを含む IAM ポリシー バインディングを検索します。
(省略可)ASSET_TYPES: Identity and Access Management ポリシーが関連付けられているアセットタイプのリスト。空の場合、すべての検索可能なアセットタイプに関連付けられている Identity and Access Management ポリシーが検索されます。正規表現もサポートされています。次に例を示します。
"compute.googleapis.com.*"
は、"compute.googleapis.com"
で始まるアセットタイプに添付される IAM ポリシーのみに限定します。".*Instance"
は、"Instance"
で終わるアセットタイプに添付される IAM ポリシーのみに限定します。".*Instance.*"
は、"Instance"
を含むアセットタイプに添付される IAM ポリシーのみに限定します。
サポートされているすべての正規表現の構文については、RE2 をご覧ください。正規表現が、サポートされているアセットタイプと一致しない場合は、
INVALID_ARGUMENT
エラーが返されます。(省略可)ORDER_BY: 結果の並べ替え順序を指定するフィールドのカンマ区切りリスト。デフォルトの順序は昇順です。降順を適用するには、フィールド名の後に
" DESC"
を追加します。重複したスペース文字は無視されます(例:"assetType DESC, resource"
)。レスポンス内の単一のプリミティブ フィールドのみを並べ替えることができます。resource
assetType
project
繰り返しフィールドなどの他フィールド(例:
folders
)と非プリミティブ フィールド(例:policy
)はサポートされていません。(省略可)PAGE_SIZE: 検索結果ページを分割する際のページ数。最大値は 2,000 です。値が
0
に設定されている場合は、適切なデフォルト値が選択されます。(省略可)PAGE_TOKEN: このメソッドに対する前の呼び出し結果の次のバッチを表すトークン。
page_token
は、前の呼び出しのレスポンスのnext_page_token
の値と同じである必要があります。
クライアント ライブラリと API リファレンス
SearchAllIamPolicies
:
クエリの作成方法
クエリ言語に関する詳細は、クエリ構文をご覧ください。
さまざまな実用例でのサンプルクエリについては、IAM ポリシーの検索のサンプルをご覧ください。
バインディング情報により IAM ポリシーを照会する
IAM ポリシーを検索するには、以下のクエリ式を使用します。
policy:QUERY
次の形式のプリンシパル タイプやロールだけを検索することもできます。
- 完全一致
memberTypes=QUERY
roles=QUERY
- 部分一致
memberTypes:QUERY
roles:QUERY
プリンシパル
IAM ポリシー バインディングでは、次の 5 種類のプリンシパルがサポートされています。
- Google アカウント(例:
user:user@gmail.com
) - Google グループ(例:
group:devs@googlegroups.com
) - Cloud Identity および G Suite ドメイン(例:
domain:google.com
) - サービス アカウント(例:
serviceAccount:my-other-app@appspot.gserviceaccount.com
) - 特殊識別子(例:
allUsers
、allAuthenticatedUsers
)
次の構文を使用して、特定のユーザーに関連するポリシーにクエリを制限できます。
policy:"user:amy@mycompany.com"
なお、user:amy@mycompany.com
には特殊文字 :
が含まれているため、二重引用符で囲む必要があります。クエリ値が十分に一意である場合、またはプリンシパル タイプに関係なくメールアドレスを検索したい場合は、クエリ文字列の接頭辞 user:
または group:
を省略できます。たとえば、次のクエリは 1 人のユーザーにのみ一致すると考えられます。
policy:amy@mycompany.com
次の構文を使用して、クエリを特定のプリンシパル タイプに関連したポリシーに限定することもできます。
policy:user
memberTypes:user
memberTypes=user
policy:user
は異なるプリンシパル型と一致する場合があります。例: group:test-user@mycompany.com
。memberTypes
を使用して、検索対象を特定のプリンシパル タイプに限定します。
例: プリンシパルによるクエリ
ユーザー
Amy
を指定する IAM ポリシー バインディングをすべて検索します。policy:amy
ドメイン
mydomain.com
を指定する IAM ポリシー バインディングをすべて検索します。policy:mydomain.com
ユーザー
Amy
とJohn
を指定する 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 ポリシー バインディングを検索します。
memberTypes:allUsers
すべての認証済みユーザーにロールを割り当てる IAM ポリシー バインディングをすべて検索します。
memberTypes:allAuthenticatedUsers
amy@mycompany.com
またはmycompany.com
ドメインにロールを割り当てるすべての IAM ポリシー バインディングを検索します。policy:(amy@mycompany.com OR "domain:mycompany.com")
ロール
IAM ポリシー バインディングでは、さまざまな種類のロールがサポートされます。すべての IAM ロール名は roles/
接頭辞で始まります。
- 基本ロール: IAM 導入前に存在していた、オーナー(
roles/owner
)、編集者(roles/editor
)、閲覧者(roles/viewer
)の 3 つのロール。 - 事前定義ロール: IAM では、さまざまなリソースへのアクセス権をきめ細かく付与する、事前定義されたロールを使用できます。すべての事前定義ロールをご覧ください。
- カスタムロール: 選択された権限のリストを含むユーザー定義の IAM ロール。
次の構文を使用して、クエリを特定のロールに関連したポリシーに限定できます。
policy:roles/role-name
roles:roles/role-name
roles=roles/role-name
なお、クエリ値が十分に一意である場合は、クエリ文字列で roles/
接頭辞を省略できます。たとえば、次のクエリはロール roles/cloudasset.owner
にのみ一致すると考えられます。
policy:cloudasset.owner
roles:cloudasset.owner
policy:cloudasset.owner
は異なるロールと一致する場合があります。たとえば、ロールがプリンシパル user:cloudasset.owner@mycompany.com
に付与された場合です。roles
を使用して、検索をロールに限定します。
例: ロールによるクエリ
owner
ロールを指定するすべての IAM ポリシー バインディングを検索します。policy:roles/owner roles:roles/owner roles=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.exportAssets
、cloudasset.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
ユーザーamy
を指定して、権限を含む IAM ポリシー バインディングをすべて検索します。policy.role.permissions:compute.instances.create policy:amy policy.role.permissions=compute.instances.create policy:amy
関連付けられたリソースにより IAM ポリシーを照会する
検索を実行するときに、リソースに直接設定されたポリシーのみを検索するために、完全なリソース名を指定できます。また、プロジェクト、フォルダ、または組織を指定して、指定したプロジェクト / フォルダ / 組織にあるリソースに設定されたポリシーのみを検索することもできます。クエリ式の形式は次のとおりです。
- 完全一致
resource=QUERY
project=QUERY
folders=QUERY
organization=QUERY
- 部分一致
resource:QUERY
project:QUERY
folders:QUERY
organization: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)
番号が
123
のproject
のリソースに設定されている IAM ポリシー バインディングをすべて検索します。project:123
番号が
123
のfolder
に含まれるリソースに設定されているすべての IAM ポリシー バインディングを検索します。folders:123
番号が
123
のorganization
のリソースに設定されている IAM ポリシー バインディングをすべて検索します。organization:123
フリーテキストにより IAM ポリシーを照会する
フィールドを指定せずに、フリーテキスト クエリだけを使用することもできます。クエリに一致する検索可能なフィールド(ポリシー バインディング フィールドやリソース フィールドなど)がある限り、レスポンスはポリシーを返します。
例: フリーテキストによるクエリ
メタデータ フィールド(ポリシー バインディングやリソース フィールドなど)に
Important
という単語が含まれる、scope
内の IAM ポリシー バインディングをすべて検索します。Important
メタデータ フィールド(ポリシー バインディングやリソース フィールドなど)に
import
という接頭辞がついた単語が含まれる、scope
内の IAM ポリシー バインディングをすべて検索します。import*