組織のポリシーを分析

このページでは、組織のポリシー設定を分析して、どのリソースがどの組織のポリシーの対象となるかを調べる方法について説明します。組織のポリシーに組織のポリシーを使用すると、分析クエリを作成して、カスタムおよび事前定義の組織のポリシーの両方に関する情報を取得できます。

分析クエリはスコープと制約で構成されます。

  • 制約: 制約のリソース名を指定します。
  • スコープ: 分析の対象となる組織を指定します。このスコープで定義された所定の制約を持つすべての組織ポリシーが分析に含まれます。

組織のポリシーの詳細については、組織ポリシー サービスの概要をご覧ください。カスタム制約の作成方法については、カスタム制約の作成と管理をご覧ください。

始める前に

必要なロールと権限

組織ポリシーの分析を実行するために必要な権限を取得するには、分析を行う組織リソースに対して次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、組織ポリシーの分析を実行するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

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

  • 分析を行うには:
    • 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

  1. Google Cloud コンソールで、[Policy Analyzer] ページに移動します。

    Policy Analyzer に移動

  2. [組織のポリシーを分析する] セクションで、[特定の組織のポリシーが構成されている場所] というペインを見つけ、そのペインで [クエリを作成] をクリックします。

  3. [クエリ組織を選択] ボックスで、組織のポリシーを分析する組織を選択します。

  4. 分析する制約のタイプを選択します。事前定義された制約の場合は、[組み込みの制約] を選択します。カスタム制約の場合は、[カスタム制約] を選択します。

  5. 分析する制約の名前を入力します。分析している制約タイプの接頭辞はすでに含まれています。たとえば、事前定義されたドメイン制限の制約の場合は「iam.allowedPolicyMemberDomains」、カスタム制約の場合は名前(disableGkeAutoUpgrade など)を入力します。

  6. [分析]、[クエリを実行] の順にクリックします。レポートページには、入力したクエリ パラメータと、この制約が直接適用されたすべてのリソースの結果テーブルが表示されます。

  7. このクエリを保存して後で表示するには、[クエリの URL をコピー] をクリックします。このクエリを表示するには、生成された URL に移動します。

  8. リストから少なくとも 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: 含まれる条件によって組織のポリシーが適用される場合、evaluationValueTRUE です。条件によって組織ポリシーが適用されない場合、evaluationValueFALSE になります。組織ポリシーが適用されている 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

  1. Google Cloud コンソールで、[Policy Analyzer] ページに移動します。

    Policy Analyzer に移動

  2. [組織のポリシーを分析する] セクションで、[組織のポリシーの制約の影響を受けるプロジェクトまたはフォルダ] というペインを見つけ、そのペインで [クエリを作成] をクリックします。

  3. [Select query organization] ボックスで、組織のポリシーを分析する組織を選択します。

  4. 分析する制約のタイプを選択します。事前定義された制約の場合は、[組み込みの制約] を選択します。カスタム制約の場合は、[カスタム制約] を選択します。

  5. 分析する制約の名前を入力します。分析している制約タイプの接頭辞はすでに含まれています。たとえば、事前定義されたドメイン制限の制約の場合は「iam.allowedPolicyMemberDomains」と入力し、カスタム制約の場合はその名前(disableGkeAutoUpgrade など)を入力します。

  6. [クエリを実行] をクリックします。レポートページには、入力したクエリ パラメータと、この制約を適用または継承したすべてのコンテナの結果テーブルが表示されます。

  7. [クエリ URL をコピー] をクリックすると、このクエリを保存して後でもう一度表示できます。このクエリを表示するには、生成された URL に移動します。

  8. リストから少なくとも 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" は、組織 ID 012345678901 の組織の子であるコンテナのみを返します。

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" は、組織 ID 012345678901 を持つ組織の子であるコンテナのみを返します。

  • 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: 含まれる条件により組織のポリシーが適用される場合、evaluationValueTRUE です。条件によって組織ポリシーが適用されない場合、evaluationValueFALSE になります。組織のポリシーが適用されるリソースで条件がサポートされていない場合、条件自体が返されます。

  • 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

  1. Google Cloud コンソールで、[Policy Analyzer] ページに移動します。

    Policy Analyzer に移動

  2. [組織のポリシーを分析する] セクションで、[組織のポリシーの制約の影響を受けるリソース] というペインを見つけ、そのペインで [クエリを作成] をクリックします。

  3. [クエリ組織を選択] ボックスで、組織のポリシーを分析する組織を選択します。

  4. 分析する制約のタイプを選択します。事前定義された制約の場合は、[組み込みの制約] を選択します。カスタム制約の場合は、[カスタム制約] を選択します。

  5. 分析する制約の名前を入力します。分析している制約タイプの接頭辞はすでに含まれています。たとえば、事前定義されたバケットレベルのアクセス制約の場合は「storage.uniformBucketLevelAccess」と入力し、カスタム制約の場合は「disableGkeAccess」などの名前を入力します。

  6. [クエリを実行] をクリックします。レポートページには、入力したクエリ パラメータと、この制約を適用または継承したすべてのアセットの結果テーブルが表示されます。

  7. このクエリを保存して後で表示するには、[クエリの URL をコピー] をクリックします。このクエリを表示するには、生成された URL に移動します。

  8. リストから少なくとも 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.foldersgoverned_resource.projectgoverned_iam_policy.foldersgoverned_iam_policy.project です。たとえば、governed_resource.project="projects/1234567890" は、プロジェクト ID 1234567890 のプロジェクトに接続されているアセットのみを返します。

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.foldersgoverned_resource.projectgoverned_iam_policy.foldersgoverned_iam_policy.project です。たとえば、governed_resource.project="projects/1234567890" は、プロジェクト ID 1234567890 のプロジェクトに接続されているアセットのみを返します。

  • 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 に移動し、ハイライト表示するリソースを選択して、 [継承を表示] をクリックすることもできます。

[リソースの継承] ページには、分析クエリで選択されたリソースのリソース階層が可視化されます。

リソース階層での組織のポリシー継承の可視化。 適用されていないブール型ポリシーの可視化。

  1. リソースが組織、フォルダ、プロジェクトのいずれであるかを示します。

  2. 青い点は、クエリでリソースが選択されていることを示します。

  3. リソースが親リソースのポリシーをオーバーライドすることを示します。

  4. リソースが組織のポリシーをそのポリシーの Google 管理のデフォルトにリセットすることを示します。ポリシーをデフォルトにリセットするリソースには、親に接続している点線が表示されます。

  5. リソースのポリシーが親と統合されていることを示します。

  6. このリソースの組織のポリシーが、適用されるブール型制約、または許可された値を含むリスト制約を適用することを示します。

  7. このリソースの組織のポリシーが、拒否値のリスト型制約であることを示します。

  8. このリソースの組織ポリシーが、適用されないブール型制約であることを示します。

次のステップ