組織のポリシーを分析

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

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

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

  • 組織のポリシーの詳細については、組織ポリシー サービスの概要をご覧ください。

  • カスタム制約の作成方法の詳細については、カスタム制約の作成と管理をご覧ください。

  • マネージド制約の詳細については、制約の使用をご覧ください。

始める前に

必要なロールと権限

組織ポリシーの分析を実行するために必要な権限を取得するには、分析を行う組織リソースに対して次の 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、サービス アカウント作成の管理対象制約の場合は iam.managed.disableServiceAccountKeyCreation、カスタム制約の場合は名前(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 です。組織のポリシーが適用されているリソースで条件がサポートされていない場合、条件自体が返されます。

  • 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. [クエリの組織を選択] ボックスで、組織のポリシーを分析する組織を選択します。

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

  5. 分析する制約の名前を入力します。分析対象の制約の種類の接頭辞がすでに含まれています。たとえば、事前定義されたドメイン制限制約の場合は iam.allowedPolicyMemberDomains、サービス アカウント作成の管理対象制約の場合は iam.managed.disableServiceAccountKeyCreation、カスタム制約の場合は名前(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、サービス アカウント作成の管理対象制約の場合は iam.managed.disableServiceAccountKeyCreation、カスタム制約の場合は名前(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 コンソールを使用して、分析した組織のポリシーの継承を可視化できます。

継承の可視化を表示するには、構成済みのポリシーコンテナアセットの組織のポリシー分析クエリを作成します。[クエリ分析を実行] ページで [分析] をクリックし、[可視化] を選択します。

保存したクエリの URL に移動し、ハイライト表示するリソースを選択して、 [継承を表示] をクリックすることもできます。

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

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

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

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

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

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

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

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

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

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

次のステップ