このページでは、組織のポリシー設定を分析して、どのリソースがどの組織のポリシーの対象となるかを調べる方法について説明します。組織のポリシーに組織のポリシーを使用すると、分析クエリを作成して、カスタムおよび事前定義の組織のポリシーの両方に関する情報を取得できます。
分析クエリはスコープと制約で構成されます。
- 制約: 制約のリソース名を指定します。
- スコープ: 分析の対象となる組織を指定します。このスコープで定義された所定の制約を持つすべての組織ポリシーが分析に含まれます。
組織のポリシーの詳細については、組織ポリシー サービスの概要をご覧ください。カスタム制約の作成方法については、カスタム制約の作成と管理をご覧ください。
始める前に
Enable the Cloud Asset API.
クエリの送信に使用するプロジェクトまたは組織で API を有効にする必要があります。これは、クエリのスコープを設定するのと同じリソースにする必要はありません。
省略可: 組織ごとに 1 日あたり 20 件を超えるポリシー分析クエリを実行する場合は、Security Command Center のプレミアム ティアが組織レベルで有効になっていることを確認してください。詳細については、お支払いについてをご覧ください。
必要なロールと権限
組織ポリシーの分析を実行するために必要な権限を取得するには、分析を行う組織リソースに対して次の IAM ロールを付与するよう管理者に依頼してください。
- 分析を行うには: クラウド アセット閲覧者(
roles/cloudasset.viewer
) -
カスタム制約を表示するには: 組織のポリシー閲覧者(
roles/orgpolicy.policyViewer
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
これらの事前定義ロールには、組織ポリシーの分析を実行するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
組織ポリシーの分析を実行するには、次の権限が必要です。
-
分析を行うには:
-
cloudasset.assets.analyzeOrgPolicy
-
cloudasset.assets.searchAllResources
-
cloudasset.assets.searchAllIamPolicies
-
-
カスタム制約を表示するには:
orgpolicy.customConstraints.get
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
料金と割り当て
大規模な組織のポリシー(組織ごとに 1 日あたり 20 クエリを超える)用の Policy Analyzer と、継承の可視化は、Security Command Center の組織レベルでの有効化を行うお客様のみが使用できます。
組織のポリシー用の Policy Analyzer の割り当ては、すべての Policy Analyzer ツールで共有されます。詳細については、お支払いについてをご覧ください。
構成されているポリシーの分析
組織のポリシーは、制約とその制約が適用されるオプションの条件から構築されます。Policy Analyzer を使用して、特定の制約を持つ組織ポリシーのリストと、それらのポリシーが適用されるリソースを返すことができます。
クエリのスコープで検出された組織のポリシーごとに、Policy Analyzer は結果エントリを返します。結果のエントリには、次のフィールドが含まれます。
consolidatedPolicy
: 組織ポリシーが接続されているリソース、および階層評価ルールに関してそのリソースに実際に適用されるポリシー。project
: この統合ポリシーが属するプロジェクト リソースの ID。folders
: 組織ポリシーが適用されるリソースの祖先であるフォルダ リソースの ID。organization
: 組織ポリシーが適用されるリソースの祖先である組織リソースの ID。policyBundle
: 上記のリソースに接続された、完全に構成された組織ポリシーと、リソース階層の祖先で定義された組織ポリシー。
リソースが VPC Service Controls サービス境界で保護されている場合は、cloudasset.googleapis.com
サービスと google.cloud.asset.v1.AssetService.SearchAllResources
メソッドにアクセスを許可する組織リソースの境界に下り(外向き)ルールを作成する必要があります。下り(外向き)ルールがない場合、リクエストは NETWORK_NOT_IN_SAME_SERVICE_PERIMETER
エラーで失敗します。詳細については、VPC Service Controls によってブロックされたリクエストのデバッグをご覧ください。
Console
Google Cloud コンソールで、[Policy Analyzer] ページに移動します。
[組織のポリシーを分析する] セクションで、[特定の組織のポリシーが構成されている場所] というペインを見つけ、そのペインで [クエリを作成] をクリックします。
[クエリ組織を選択] ボックスで、組織のポリシーを分析する組織を選択します。
分析する制約のタイプを選択します。事前定義された制約の場合は、[組み込みの制約] を選択します。カスタム制約の場合は、[カスタム制約] を選択します。
分析する制約の名前を入力します。分析している制約タイプの接頭辞はすでに含まれています。たとえば、事前定義されたドメイン制限の制約の場合は「
iam.allowedPolicyMemberDomains
」、カスタム制約の場合は名前(disableGkeAutoUpgrade
など)を入力します。[分析]、[クエリを実行] の順にクリックします。レポートページには、入力したクエリ パラメータと、この制約が直接適用されたすべてのリソースの結果テーブルが表示されます。
このクエリを保存して後で表示するには、[クエリの URL をコピー] をクリックします。このクエリを表示するには、生成された URL に移動します。
リストから少なくとも 1 つのリソースを選択して、[継承を表示] をクリックすると、分析した制約の継承を可視化できます。また、[分析]、[可視化] の順にクリックして、分析クエリを作成するときに、すぐに可視化ビューに移動することもできます。詳細については、継承の可視化をご覧ください。
gcloud
組織ポリシーの制約が組織内でどのように適用されるかを分析するには、gcloud asset analyze-org-policies
コマンドを使用します。
gcloud asset analyze-org-policies \
--constraint=CONSTRAINT_NAME \
--scope=organizations/ORGANIZATION_ID \
--limit=LIMIT_POLICIES \
--filter=FILTER_QUERY
以下を置き換えます。
CONSTRAINT_NAME: 分析する組織ポリシーの制約の名前。制約のリストについては、組織ポリシーの制約をご覧ください。
ORGANIZATION_ID: 組織リソースの ID。組織 ID を検出する方法については、組織の作成と管理をご覧ください。
LIMIT_POLICIES: 表示する結果エントリの数。エントリを無制限に表示するには、「
unlimited
」と入力します。FILTER_QUERY: フィルタリング式に一致するポリシーのみを表示するフィルタクエリ。フィルタリングに使用できるフィールドは、唯一
consolidated_policy.attached_resource
のみです。たとえば、consolidated_policy.attached_resource="//cloudresourcemanager.googleapis.com/projects/1234567890"
は、プロジェクト ID が1234567890
のプロジェクトに適用されたポリシーのみを返します。
YAML レスポンスは次の例のようになります。
YAML レスポンスのサンプル
--- consolidatedPolicy: appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621 attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621 rules: - enforce: true policyBundle: - appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621 attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621 reset: true - appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491 rules: - enforce: true --- consolidatedPolicy: appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491 rules: - enforce: true policyBundle: - appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491 rules: - enforce: true
REST
組織ポリシーの制約が組織内でどのように適用されているかを分析するには、Cloud Asset API の analyzeOrgPolicies
メソッドを使用します。
HTTP メソッドと URL:
GET https://cloudasset.googleapis.com/v1/organizations/ORGANIZATION_ID:analyzeOrgPolicies
JSON 本文のリクエスト:
JSON_REQUEST="{ 'constraint': 'CONSTRAINT_NAME', 'filter': 'FILTER_QUERY', 'page_size': PAGE_SIZE, 'page_token': PAGE_TOKEN }"
以下を置き換えます。
ORGANIZATION_ID: 組織リソースの ID。組織 ID を検出する方法については、組織の作成と管理をご覧ください。
CONSTRAINT_NAME: 分析する組織ポリシーの制約の名前。制約のリストについては、組織ポリシーの制約をご覧ください。
FILTER_QUERY: フィルタリング式に一致するポリシーのみを表示するフィルタクエリ。フィルタリングに使用できるフィールドは、唯一
consolidated_policy.attached_resource
のみです。たとえば、consolidated_policy.attached_resource="//cloudresourcemanager.googleapis.com/projects/1234567890"
は、プロジェクト ID が1234567890
のプロジェクトに関連付けられたポリシーのみを返します。PAGE_SIZE: 表示するページあたりの結果エントリの数。エントリを無制限に表示するには、「
unlimited
」と入力します。このフラグセットを使用して作成されたリクエストは、結果エントリの合計数が PAGE_SIZE より大きい場合にnextPageToken
値を返します。PAGE_TOKEN:
page_size
フラグを含む最初のリクエストの後にのみ、リクエストに応じて設定されます。前のレスポンスから受け取ったnextPageToken
値を使用して、結果の特定のページを返すことができます。
JSON レスポンスは次の例のようになります。
JSON レスポンスの例
{ "orgPolicyResults": [ { "consolidatedPolicy": { "attachedResource": "//cloudresourcemanager.googleapis.com/folders/123456789012", "rules": [ { "values": { "allowedValues": [ "C0265whk2" ] } }, { "values": { "allowedValues": [ "C03kd36xr" ] } } ], "appliedResource": "//cloudresourcemanager.googleapis.com/folders/123456789012" }, "policyBundle": [ { "attachedResource": "//cloudresourcemanager.googleapis.com/folders/123456789012", "rules": [ { "values": { "allowedValues": [ "C03kd36xr" ] } } ], "inheritFromParent": true, "appliedResource": "//cloudresourcemanager.googleapis.com/folders/123456789012" }, { "attachedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123", "rules": [ { "values": { "allowedValues": [ "C0265whk2" ] } } ], "appliedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123" } ] }, { "consolidatedPolicy": { "attachedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123", "rules": [ { "values": { "allowedValues": [ "C0265whk2" ] } } ], "appliedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123" }, "policyBundle": [ { "attachedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123", "rules": [ { "values": { "allowedValues": [ "C0265whk2" ] } } ], "appliedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123" } ] } ] "constraint": { "googleDefinedConstraint": { "name": "constraints/iam.allowedPolicyMemberDomains", "displayName": "Domain restricted sharing", "description": "This list constraint defines one or more Cloud Identity or Google Workspace customer IDs whose principals can be added to IAM policies. \u003cbr\u003eBy default, all user identities are allowed to be added to IAM policies. Only allowed values can be defined in this constraint, denied values are not supported. \u003cbr\u003eIf this constraint is active, only principals that belong to the allowed customer IDs can be added to IAM policies.", "constraintDefault": "ALLOW", "listConstraint": {} } } }
コンテナの分析
このコンテキストのコンテナは、プロジェクト、フォルダ、または組織リソースです。 Policy Analyzer を使用して、特定の制約が適用された組織のポリシーを持つすべてのコンテナのリストを返すことができます。 Policy Analyzer は、各コンテナの完全な名前、階層内のコンテナの親、コンテナによって継承または接続されたタグも返します。
クエリのスコープで検出されたコンテナごとに、Policy Analyzer は結果エントリを返します。結果のエントリには、次のフィールドが含まれます。
consolidatedPolicy
: 組織ポリシーが接続されているコンテナ、および階層評価ルールに関してそのコンテナに実際に適用されるポリシー。conditionEvaluation
: 含まれる条件によって組織のポリシーが適用される場合、evaluationValue
はTRUE
です。条件によって組織ポリシーが適用されない場合、evaluationValue
はFALSE
になります。組織ポリシーが適用されている 1 つ以上のリソースで条件がサポートされていない場合は、条件自体が返されます。effectiveTags
: 階層内でコンテナとコンテナの親に直接付加されるか、これらによって継承されるすべてのタグ。folders
: 組織ポリシーが接続されているコンテナを含むフォルダ リソースの ID。fullResourceName
: コンテナの完全な名前。organization
: 組織ポリシーが付加されているコンテナーの祖先である組織リソースのID。parent
: このコンテナの親の完全なリソース名。policyBundle
: コンテナに直接構成された組織のポリシー(存在する場合)と、リソース階層のコンテナの祖先で定義された組織のポリシー。project
: 組織ポリシーが接続されているコンテナの ID(プロジェクト リソースの場合)。
リソースが VPC Service Controls サービス境界で保護されている場合は、cloudasset.googleapis.com
サービスと google.cloud.asset.v1.AssetService.SearchAllResources
メソッドにアクセスを許可する組織リソースの境界に下り(外向き)ルールを作成する必要があります。下り(外向き)ルールがない場合、リクエストは NETWORK_NOT_IN_SAME_SERVICE_PERIMETER
エラーで失敗します。詳細については、VPC Service Controls によってブロックされたリクエストのデバッグをご覧ください。
Console
Google Cloud コンソールで、[Policy Analyzer] ページに移動します。
[組織のポリシーを分析する] セクションで、[組織のポリシーの制約の影響を受けるプロジェクトまたはフォルダ] というペインを見つけ、そのペインで [クエリを作成] をクリックします。
[Select query organization] ボックスで、組織のポリシーを分析する組織を選択します。
分析する制約のタイプを選択します。事前定義された制約の場合は、[組み込みの制約] を選択します。カスタム制約の場合は、[カスタム制約] を選択します。
分析する制約の名前を入力します。分析している制約タイプの接頭辞はすでに含まれています。たとえば、事前定義されたドメイン制限の制約の場合は「
iam.allowedPolicyMemberDomains
」と入力し、カスタム制約の場合はその名前(disableGkeAutoUpgrade
など)を入力します。[クエリを実行] をクリックします。レポートページには、入力したクエリ パラメータと、この制約を適用または継承したすべてのコンテナの結果テーブルが表示されます。
[クエリ URL をコピー] をクリックすると、このクエリを保存して後でもう一度表示できます。このクエリを表示するには、生成された URL に移動します。
リストから少なくとも 1 つのコンテナを選択し、[継承を表示] をクリックすると、分析した制約の継承を可視化できます。また、[分析]、[可視化] の順にクリックして、分析クエリを作成するときに、すぐに可視化ビューに移動することもできます。詳細については、継承の可視化をご覧ください。
gcloud
組織ポリシーの制約が組織内のコンテナにどのように適用されるかを分析するには、gcloud asset analyze-org-policy-governed-containers
コマンドを使用します。
gcloud asset analyze-org-policy-governed-containers \
--constraint=CONSTRAINT_NAME \
--scope=organizations/ORGANIZATION_ID \
--limit=LIMIT_CONTAINERS \
--filter=FILTER_QUERY
以下を置き換えます。
CONSTRAINT_NAME: 分析する組織ポリシーの制約の名前。制約のリストについては、組織ポリシーの制約をご覧ください。
ORGANIZATION_ID: 組織リソースの ID。組織 ID を検出する方法については、組織の作成と管理をご覧ください。
LIMIT_CONTAINERS: 表示する結果エントリの数。エントリを無制限に表示するには、「
unlimited
」と入力します。FILTER_QUERY: フィルタリング式に一致するコンテナのみを表示するフィルタクエリ。フィルタリングに使用できるフィールドは、唯一
parent
のみです。たとえば、parent="//cloudresourcemanager.googleapis.com/organizations/012345678901"
は、組織 ID012345678901
の組織の子であるコンテナのみを返します。
YAML レスポンスは次の例のようになります。
YAML レスポンスのサンプル
--- consolidatedPolicy: appliedResource: //cloudresourcemanager.googleapis.com/projects/donghe-project1 attachedResource: //cloudresourcemanager.googleapis.com/projects/donghe-project1 rules: - values: allowedValues: - projects/donghe-project1/zones/us-central1-a/instances/instance-1 fullResourceName: //cloudresourcemanager.googleapis.com/projects/donghe-project1 parent: //cloudresourcemanager.googleapis.com/folders/86513245445 policyBundle: - appliedResource: //cloudresourcemanager.googleapis.com/projects/donghe-project1 attachedResource: //cloudresourcemanager.googleapis.com/projects/donghe-project1 inheritFromParent: true rules: - values: allowedValues: - projects/donghe-project1/zones/us-central1-a/instances/instance-1 --- consolidatedPolicy: appliedResource: //cloudresourcemanager.googleapis.com/projects/jeffreyai-prj01-on-ipa1 attachedResource: //cloudresourcemanager.googleapis.com/projects/jeffreyai-prj01-on-ipa1 rules: - denyAll: true fullResourceName: //cloudresourcemanager.googleapis.com/projects/jeffreyai-prj01-on-ipa1 parent: //cloudresourcemanager.googleapis.com/organizations/474566717491 policyBundle: - appliedResource: //cloudresourcemanager.googleapis.com/projects/jeffreyai-prj01-on-ipa1 attachedResource: //cloudresourcemanager.googleapis.com/projects/jeffreyai-prj01-on-ipa1 inheritFromParent: true rules: - denyAll: true --- consolidatedPolicy: appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621 attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621 rules: - values: allowedValues: - projects/opa-test-project-1-364621/zones/us-central1-a/instances/instance-1 fullResourceName: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621 parent: //cloudresourcemanager.googleapis.com/folders/666681422980 policyBundle: - appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621 attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621 rules: - values: allowedValues: - projects/opa-test-project-1-364621/zones/us-central1-a/instances/instance-1
REST
組織ポリシーの制約が組織内のコンテナにどのように適用されているかを分析するには、Cloud Asset API の analyzeOrgPolicyGovernedContainers
メソッドを使用します。
HTTP メソッドと URL:
GET https://cloudasset.googleapis.com/v1/organizations/ORGANIZATION_ID:analyzeOrgPolicyGovernedContainers
JSON 本文のリクエスト:
JSON_REQUEST="{ 'constraint': 'CONSTRAINT_NAME', 'filter': '"FILTER_QUERY"', 'page_size': PAGE_SIZE, 'page_token': PAGE_TOKEN }"
以下を置き換えます。
ORGANIZATION_ID: 組織リソースの ID。組織 ID を検出する方法については、組織の作成と管理をご覧ください。
CONSTRAINT_NAME: 分析する組織ポリシーの制約の名前。制約のリストについては、組織ポリシーの制約をご覧ください。
FILTER_QUERY: フィルタリング式に一致するコンテナのみを表示するフィルタクエリ。フィルタリングに使用できるフィールドは、唯一
parent
のみです。たとえば、parent="//cloudresourcemanager.googleapis.com/organizations/012345678901"
は、組織 ID012345678901
を持つ組織の子であるコンテナのみを返します。PAGE_SIZE: 表示する結果エントリのページ数。エントリを無制限に表示するには、「
unlimited
」と入力します。このフラグセットを使用して作成されたリクエストは、結果エントリの合計数が PAGE_SIZE より大きい場合にnextPageToken
値を返します。PAGE_TOKEN:
page_size
フラグを含む最初のリクエストの後にのみ、リクエストに応じて設定されます。前のレスポンスから受け取ったnextPageToken
値を使用して、結果の特定のページを返すことができます。
JSON レスポンスは次の例のようになります。
JSON レスポンスの例
{ "governedContainers": [ { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-2", "parent": "//cloudresourcemanager.googleapis.com/folders/513502730678", "consolidatedPolicy": { "attachedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678", "rules": [ { "enforce": false } ], "appliedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678" }, "policyBundle": [ { "attachedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678", "rules": [ { "enforce": false } ], "appliedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678" }, { "attachedResource": "//cloudresourcemanager.googleapis.com/folders/666681422980", "rules": [ { "enforce": true } ], "appliedResource": "//cloudresourcemanager.googleapis.com/folders/666681422980" } ] }, { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-1", "parent": "//cloudresourcemanager.googleapis.com/folders/513502730678", "consolidatedPolicy": { "attachedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678", "rules": [ { "enforce": false } ], "appliedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678" }, "policyBundle": [ { "attachedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678", "rules": [ { "enforce": false } ], "appliedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678" }, { "attachedResource": "//cloudresourcemanager.googleapis.com/folders/666681422980", "rules": [ { "enforce": true } ], "appliedResource": "//cloudresourcemanager.googleapis.com/folders/666681422980" } ] } ] "constraint": { "googleDefinedConstraint": { "name": "constraints/compute.requireOsLogin", "displayName": "Require OS Login", "description": "This boolean constraint, when set to \u003ccode\u003etrue\u003c/code\u003e, enables OS Login on all newly created Projects. All VM instances created in new projects will have OS Login enabled. On new and existing projects, this constraint prevents metadata updates that disable OS Login at the project or instance level. \u003cbr\u003eBy default, the OS Login feature is disabled on Compute Engine projects.\u003cbr\u003eGKE instances in private clusters running node pool versions 1.20.5-gke.2000 and later support OS Login. GKE instances in public clusters do not currently support OS Login. If this constraint is applied to a Project running public clusters, GKE instances running in that Project may not function properly.", "constraintDefault": "ALLOW", "booleanConstraint": {} } } }
アセットの分析
このコンテキストにおけるアセットは、Google Cloud リソースまたは Identity and Access Management(IAM)許可ポリシーです。Policy Analyzer を使用して、特定の制約が適用された組織のポリシーを持つすべての資産のリストを返すことができます。 カスタム制約と、次の事前定義された制約がサポートされています。
constraints/ainotebooks.accessMode
constraints/ainotebooks.disableFileDownloads
constraints/ainotebooks.disableRootAccess
constraints/ainotebooks.disableTerminal
constraints/ainotebooks.environmentOptions
constraints/ainotebooks.requireAutoUpgradeSchedule
constraints/ainotebooks.restrictVpcNetworks
constraints/compute.disableGuestAttributesAccess
constraints/compute.disableInstanceDataAccessApis
constraints/compute.disableNestedVirtualization
constraints/compute.disableSerialPortAccess
constraints/compute.disableSerialPortLogging
constraints/compute.disableVpcExternalIpv6
constraints/compute.requireOsLogin
constraints/compute.requireShieldedVm
constraints/compute.restrictLoadBalancerCreationForTypes
constraints/compute.restrictProtocolForwardingCreationForTypes
constraints/compute.restrictXpnProjectLienRemoval
constraints/compute.setNewProjectDefaultToZonalDNSOnly
constraints/compute.skipDefaultNetworkCreation
constraints/compute.trustedImageProjects
constraints/compute.vmCanIpForward
constraints/compute.vmExternalIpAccess
constraints/gcp.detailedAuditLoggingMode
constraints/gcp.resourceLocations
constraints/iam.allowedPolicyMemberDomains
constraints/iam.automaticIamGrantsForDefaultServiceAccounts
constraints/iam.disableServiceAccountCreation
constraints/iam.disableServiceAccountKeyCreation
constraints/iam.disableServiceAccountKeyUpload
constraints/iam.restrictCrossProjectServiceAccountLienRemoval
constraints/iam.serviceAccountKeyExpiryHours
constraints/resourcemanager.accessBoundaries
constraints/resourcemanager.allowedExportDestinations
constraints/sql.restrictAuthorizedNetworks
constraints/sql.restrictNoncompliantDiagnosticDataAccess
constraints/sql.restrictNoncompliantResourceCreation
constraints/sql.restrictPublicIp
constraints/storage.publicAccessPrevention
constraints/storage.restrictAuthTypes
constraints/storage.uniformBucketLevelAccess
Policy Analyzer は、各アセットの完全な名前、階層内でのアセットの親、階層内でのアセットより上位にある祖先プロジェクト、フォルダ、組織リソースを返します。
クエリのスコープで検出されたアセットごとに、Policy Analyzer は結果エントリを返します。
リソースの結果エントリには、次のフィールドが含まれます。
consolidatedPolicy
: 組織ポリシーが接続されているリソース、および階層評価ルールに関してそのリソースに実際に適用されるポリシー。conditionEvaluation
: 含まれる条件により組織のポリシーが適用される場合、evaluationValue
はTRUE
です。条件によって組織ポリシーが適用されない場合、evaluationValue
はFALSE
になります。組織のポリシーが適用されるリソースで条件がサポートされていない場合、条件自体が返されます。assetType
: アセットのリソースタイプ。effectiveTags
: 組織のポリシーが適用されるリソースと、階層内のリソースの親に直接適用されるか、それらから継承されるすべてのタグ。folders
: 組織ポリシーが接続されているリソースを含むフォルダ リソースの ID。fullResourceName
: リソースの完全な名前。organization
: リソースを含む組織の相対リソース名。parent
: リソースの親の完全な名前。project
: リソースを含むプロジェクトの ID。policyBundle
: 上記のリソースに接続された、完全に構成された組織ポリシーと、リソース階層の祖先で定義された組織ポリシー。
許可ポリシーの結果エントリには次のフィールドが含まれます。
consolidatedPolicy
: 組織ポリシーが接続されているリソース、および階層評価ルールに関してそのリソースに実際に適用されるポリシー。assetType
: 許可ポリシーが接続されているリソースのリソースタイプ。attachedResource
: 許可ポリシーが接続されているリソースの完全な名前。folders
: 許可ポリシーを含むフォルダの相対リソース名。organization
: 許可ポリシーを含む組織の相対的なリソース名。policy
: 許可ポリシー。project
: 許可ポリシーを含むプロジェクトの相対的なリソース名。policyBundle
: 上記のリソースに接続された、完全に構成された組織ポリシーと、リソース階層の祖先で定義された組織ポリシー。
リソースが VPC Service Controls サービス境界で保護されている場合は、cloudasset.googleapis.com
サービスと google.cloud.asset.v1.AssetService.SearchAllResources
メソッドにアクセスを許可する組織リソースの境界に下り(外向き)ルールを作成する必要があります。下り(外向き)ルールがない場合、リクエストは NETWORK_NOT_IN_SAME_SERVICE_PERIMETER
エラーで失敗します。詳細については、VPC Service Controls によってブロックされたリクエストのデバッグをご覧ください。
Console
Google Cloud コンソールで、[Policy Analyzer] ページに移動します。
[組織のポリシーを分析する] セクションで、[組織のポリシーの制約の影響を受けるリソース] というペインを見つけ、そのペインで [クエリを作成] をクリックします。
[クエリ組織を選択] ボックスで、組織のポリシーを分析する組織を選択します。
分析する制約のタイプを選択します。事前定義された制約の場合は、[組み込みの制約] を選択します。カスタム制約の場合は、[カスタム制約] を選択します。
分析する制約の名前を入力します。分析している制約タイプの接頭辞はすでに含まれています。たとえば、事前定義されたバケットレベルのアクセス制約の場合は「
storage.uniformBucketLevelAccess
」と入力し、カスタム制約の場合は「disableGkeAccess
」などの名前を入力します。[クエリを実行] をクリックします。レポートページには、入力したクエリ パラメータと、この制約を適用または継承したすべてのアセットの結果テーブルが表示されます。
このクエリを保存して後で表示するには、[クエリの URL をコピー] をクリックします。このクエリを表示するには、生成された URL に移動します。
リストから少なくとも 1 つのアセットを選択し、[継承を表示] をクリックすると、分析した制約の継承を可視化できます。また、分析クエリの作成時に [分析]、[可視化] の順にクリックすると、すぐに可視化ビューに移動できます。詳細については、継承の可視化をご覧ください。
gcloud
組織ポリシーの制約が組織内のアセットにどのように適用されるかを分析するには、gcloud asset analyze-org-policy-governed-assets
コマンドを使用します。
gcloud asset analyze-org-policy-governed-assets \
--constraint=CONSTRAINT_NAME \
--scope=organizations/ORGANIZATION_ID \
--limit=LIMIT_ASSETS \
--filter=FILTER_QUERY
以下を置き換えます。
CONSTRAINT_NAME: 分析する組織ポリシーの制約の名前。制約のリストについては、組織ポリシーの制約をご覧ください。
ORGANIZATION_ID: 組織リソースの ID。組織 ID を検出する方法については、組織の作成と管理をご覧ください。
LIMIT_ASSETS: 表示する結果エントリの数。エントリを無制限に表示するには、「
unlimited
」と入力します。FILTER_QUERY: フィルタリング式に一致するアセットのみを表示するフィルタクエリ。フィルタリングに使用できるフィールドは、
governed_resource.folders
、governed_resource.project
、governed_iam_policy.folders
、governed_iam_policy.project
です。たとえば、governed_resource.project="projects/1234567890"
は、プロジェクト ID1234567890
のプロジェクトに接続されているアセットのみを返します。
YAML レスポンスは次の例のようになります。
YAML レスポンスのサンプル
--- consolidatedPolicy: appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-2 attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-2 rules: - enforce: false governedResource: folders: - folders/513502730678 - folders/666681422980 fullResourceName: //container.googleapis.com/projects/opa-test-project-2/zones/us-central1-c/clusters/opa-test-project-2-cluster-1/nodePools/default-pool organization: organizations/474566717491 parent: //container.googleapis.com/projects/opa-test-project-2/zones/us-central1-c/clusters/opa-test-project-2-cluster-1 project: projects/892625391619 policyBundle: - appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-2 attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-2 reset: true - appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491 attachedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491 rules: - enforce: true --- consolidatedPolicy: appliedResource: //cloudresourcemanager.googleapis.com/projects/project2-244918 attachedResource: //cloudresourcemanager.googleapis.com/projects/project2-244918 rules: - enforce: false governedResource: folders: - folders/800636178739 - folders/408342778736 fullResourceName: //container.googleapis.com/projects/project2-244918/zones/us-central1-c/clusters/cluster-1/nodePools/default-pool organization: organizations/474566717491 parent: //container.googleapis.com/projects/project2-244918/zones/us-central1-c/clusters/cluster-1 project: projects/761097189269 policyBundle: - appliedResource: //cloudresourcemanager.googleapis.com/projects/project2-244918 attachedResource: //cloudresourcemanager.googleapis.com/projects/project2-244918 rules: - enforce: false - appliedResource: //cloudresourcemanager.googleapis.com/folders/408342778736 attachedResource: //cloudresourcemanager.googleapis.com/folders/408342778736 rules: - condition: description: cond-desc1 expression: resource.matchTag("474566717491/env", "prod") title: cond-title1 enforce: false - enforce: true - appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491 attachedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491 rules: - enforce: true --- consolidatedPolicy: appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491 attachedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491 rules: - enforce: true governedResource: fullResourceName: //container.googleapis.com/projects/probe-per-rt-project/zones/us-west1-a/clusters/test-cluster-for-backup/nodePools/default-pool organization: organizations/474566717491 parent: //container.googleapis.com/projects/probe-per-rt-project/zones/us-west1-a/clusters/test-cluster-for-backup project: projects/896190383908 policyBundle: - appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491 attachedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491 rules: - enforce: true
REST
組織ポリシーの制約が組織内のアセットにどのように適用されるかを分析するには、Cloud Asset API の analyzeOrgPolicyGovernedAssets
メソッドを使用します。
HTTP メソッドと URL:
GET https://cloudasset.googleapis.com/v1/organizations/ORGANIZATION_ID:analyzeOrgPolicyGovernedAssets
JSON 本文のリクエスト:
JSON_REQUEST="{ 'constraint': 'CONSTRAINT_NAME', 'filter': 'FILTER_QUERY', 'page_size': PAGE_SIZE, 'page_token': PAGE_TOKEN }"
以下を置き換えます。
ORGANIZATION_ID: 組織リソースの ID。組織 ID を検出する方法については、組織の作成と管理をご覧ください。
CONSTRAINT_NAME: 分析する組織ポリシーの制約の名前。制約のリストについては、組織ポリシーの制約をご覧ください。
FILTER_QUERY: フィルタリング式に一致するアセットのみを表示するフィルタクエリ。フィルタリングに使用できるフィールドは、
governed_resource.folders
、governed_resource.project
、governed_iam_policy.folders
、governed_iam_policy.project
です。たとえば、governed_resource.project="projects/1234567890"
は、プロジェクト ID1234567890
のプロジェクトに接続されているアセットのみを返します。PAGE_SIZE: 表示する結果エントリのページ数。エントリを無制限に表示するには、「
unlimited
」と入力します。このフラグセットを使用して作成されたリクエストは、結果エントリの合計数が PAGE_SIZE より大きい場合にnextPageToken
値を返します。PAGE_TOKEN:
page_size
フラグを含む最初のリクエストの後にのみ、リクエストに応じて設定されます。前のレスポンスから受け取ったnextPageToken
値を使用して、結果の特定のページを返すことができます。
JSON レスポンスは次の例のようになります。
JSON レスポンスの例
{ "governedAssets": [ { "governedResource": { "fullResourceName": "//container.googleapis.com/projects/opa-test-project-2/zones/us-central1-c/clusters/opa-test-project-2-cluster-1/nodePools/default-pool", "parent": "//container.googleapis.com/projects/opa-test-project-2/zones/us-central1-c/clusters/opa-test-project-2-cluster-1", "project": "projects/892625391619", "folders": [ "folders/513502730678", "folders/666681422980" ], "organization": "organizations/474566717491" }, "consolidatedPolicy": { "attachedResource": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-2", "rules": [ { "enforce": false } ], "appliedResource": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-2" }, "policyBundle": [ { "attachedResource": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-2", "reset": true, "appliedResource": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-2" }, { "attachedResource": "//cloudresourcemanager.googleapis.com/organizations/474566717491", "rules": [ { "enforce": true } ], "appliedResource": "//cloudresourcemanager.googleapis.com/organizations/474566717491" } ] }, { "governedResource": { "fullResourceName": "//container.googleapis.com/projects/project2-244918/zones/us-central1-c/clusters/cluster-1/nodePools/default-pool", "parent": "//container.googleapis.com/projects/project2-244918/zones/us-central1-c/clusters/cluster-1", "project": "projects/761097189269", "folders": [ "folders/800636178739", "folders/408342778736" ], "organization": "organizations/474566717491" }, "consolidatedPolicy": { "attachedResource": "//cloudresourcemanager.googleapis.com/projects/project2-244918", "rules": [ { "enforce": false } ], "appliedResource": "//cloudresourcemanager.googleapis.com/projects/project2-244918" }, "policyBundle": [ { "attachedResource": "//cloudresourcemanager.googleapis.com/projects/project2-244918", "rules": [ { "enforce": false } ], "appliedResource": "//cloudresourcemanager.googleapis.com/projects/project2-244918" }, { "attachedResource": "//cloudresourcemanager.googleapis.com/folders/408342778736", "rules": [ { "enforce": false, "condition": { "expression": "resource.matchTag(\"474566717491/env\", \"prod\")", "title": "cond-title1", "description": "cond-desc1" } }, { "enforce": true } ], "appliedResource": "//cloudresourcemanager.googleapis.com/folders/408342778736" }, { "attachedResource": "//cloudresourcemanager.googleapis.com/organizations/474566717491", "rules": [ { "enforce": true } ], "appliedResource": "//cloudresourcemanager.googleapis.com/organizations/474566717491" } ] } ] "constraint": { "customConstraint": { "name": "organizations/474566717491/customConstraints/custom.disableGkeAutoUpgrade", "resourceTypes": [ "container.googleapis.com/NodePool" ], "methodTypes": [ "CREATE", "UPDATE" ], "condition": "resource.management.autoUpgrade == false", "actionType": "ALLOW", "displayName": "Disable GKE auto upgrade", "description": "Only allow GKE NodePool resource create or updates if AutoUpgrade is not enabled" } } }
継承を可視化する
Security Command Center のプレミアム ティアを組織レベルで有効にする場合は、Google Cloud コンソールを使用して、分析した組織のポリシーの継承を可視化できます。
継承の可視化を表示するには、構成されたポリシー、containers、またはアセットの組織ポリシー分析クエリを作成します。[クエリ分析を実行] ページで、[分析] をクリックして、[可視化] を選択します。
保存したクエリの URL に移動し、ハイライト表示するリソースを選択して、
[継承を表示] をクリックすることもできます。[リソースの継承] ページには、分析クエリで選択されたリソースのリソース階層が可視化されます。
リソースが組織、フォルダ、プロジェクトのいずれであるかを示します。
青い点は、クエリでリソースが選択されていることを示します。
リソースが親リソースのポリシーをオーバーライドすることを示します。
リソースが組織のポリシーをそのポリシーの Google 管理のデフォルトにリセットすることを示します。ポリシーをデフォルトにリセットするリソースには、親に接続している点線が表示されます。
リソースのポリシーが親と統合されていることを示します。
このリソースの組織のポリシーが、適用されるブール型制約、または許可された値を含むリスト制約を適用することを示します。
このリソースの組織のポリシーが、拒否値のリスト型制約であることを示します。
このリソースの組織ポリシーが、適用されないブール型制約であることを示します。
次のステップ
- 制約の使用について詳細を学習する。
- カスタム制約の作成と管理の方法を確認する。