組織のポリシーを分析

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

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

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

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

始める前に

Cloud Asset API を有効にします。

API を有効にする

クエリの送信に使用するプロジェクトまたは組織で API を有効にする必要があります。これは、クエリのスコープを設定するのと同じリソースにする必要はありません。

必要なロールと権限

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

ロールの付与の詳細については、アクセスの管理をご覧ください。

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

必要な権限

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

  • 分析を行うには:
    • cloudasset.assets.analyzeOrgPolicy
    • cloudasset.assets.searchAllResources
    • cloudasset.assets.searchAllIamPolicies
  • カスタム制約を表示するには: orgpolicy.customConstraints.get

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

料金と割り当て

大規模な組織のポリシー(組織ごとに 1 日あたり 20 クエリを超える)用の Policy Analyzer と、継承の可視化は、Security Command Center の組織レベルでの有効化を行うお客様のみが使用できます。

組織のポリシー用の Policy Analyzer の割り当ては、すべての Policy Analyzer ツール間で共有されます。ただし、IAM 許可ポリシーの Policy Analyzer へのクエリは、2024 年 4 月 29 日まで割り当てにカウントされません。詳細については、課金に関する質問をご覧ください。

構成されているポリシーの分析

組織のポリシーは、制約と、その制約が適用されるオプションの条件から構築されます。Policy Analyzer を使用して、特定の制約を持つ組織ポリシーのリストと、それらのポリシーが適用されるリソースを返すことができます。

クエリのスコープで検出された組織のポリシーごとに、Policy Analyzer は結果エントリを返します。結果のエントリには次のフィールドが含まれます。

  • consolidatedPolicy: 組織ポリシーが接続されているリソース、および階層評価ルールに関してそのリソースに実際に適用されるポリシー。

  • project: この統合されたポリシーが属するプロジェクト リソースの ID。

  • folders: 組織ポリシーが適用されるリソースの祖先であるフォルダ リソースの ID。

  • organization: 組織ポリシーが適用されるリソースの祖先である組織リソースの ID。

  • policyBundle: 上記のリソースに接続された、完全に構成された組織ポリシーと、リソース階層の祖先で定義された組織ポリシー。

コンソール

  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: 含まれている条件によって組織のポリシーの適用される場合、evaluationValue =TRUEして、ソース別にトラフィック データを分類します。条件によって組織のポリシーが適用されない場合、evaluationValueFALSE になります。組織のポリシーが適用されている 1 つ以上のリソースで条件がサポートされていない場合、条件自体が返されます。

  • effectiveTags: 階層内でコンテナとコンテナの親に直接付加されるか、それによって継承されるすべてのタグ。

  • folders: 組織ポリシーが接続されているコンテナを含むフォルダ リソースの ID。

  • fullResourceName: コンテナの完全な名前。

  • organization: 組織ポリシーが付加されているコンテナーの祖先である組織リソースのID。

  • parent: このコンテナの親の完全なリソース名。

  • policyBundle: コンテナに直接構成された組織のポリシー(存在する場合)と、リソース階層のコンテナの祖先で定義された組織のポリシー。

  • project: 組織ポリシーが接続されているコンテナの ID(プロジェクト リソースの場合)。

コンソール

  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-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: 含まれている条件によって組織のポリシーの適用される場合、evaluationValue =TRUEして、ソース別にトラフィック データを分類します。条件によって組織のポリシーが適用されない場合、evaluationValueFALSE になります。組織のポリシーが適用されている 1 つ以上のリソースで条件がサポートされていない場合、条件自体が返されます。

  • assetType: アセットのリソースタイプ。

  • effectiveTags: 組織ポリシーが接続されているリソースと、階層内のリソースの親によって直接添付または継承されるすべてのタグ。

  • folders: 組織ポリシーが接続されているリソースを含むフォルダ リソースの ID。

  • fullResourceName: リソースの完全な名前。

  • organization: リソースを含む組織の相対的なリソース名。

  • parent: リソースの親の完全な名前。

  • project: リソースを含むプロジェクトの ID。

  • policyBundle: 上記のリソースに接続された、完全に構成された組織ポリシーと、リソース階層の祖先で定義された組織ポリシー。

許可ポリシーの結果エントリには次のフィールドが含まれます。

  • consolidatedPolicy: 組織ポリシーが接続されているリソース、および階層評価ルールに関してそのリソースに実際に適用されるポリシー。

  • assetType: 許可ポリシーが接続されているリソースのリソースタイプ。

  • attachedResource: 許可ポリシーが接続されているリソースの完全な名前。

  • folders: 許可ポリシーを含むフォルダの相対的なリソース名。

  • organization: 許可ポリシーを含む組織の相対的なリソース名。

  • policy: 許可ポリシー。

  • project: 許可ポリシーを含むプロジェクトの相対的なリソース名。

  • policyBundle: 上記のリソースに接続された、完全に構成された組織ポリシーと、リソース階層の祖先で定義された組織ポリシー。

コンソール

  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、またはアセットの組織のポリシー分析クエリを作成します。[Run query analysis] ページで [Analyze] をクリックし、[Visualize] を選択します。

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

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

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

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

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

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

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

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

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

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

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

次のステップ