分析组织政策

本页面介绍了如何分析组织政策设置以查看哪项组织政策涵盖哪些资源。您可以使用组织政策的政策分析器创建分析查询,以获取有关自定义和预定义组织政策的信息。

分析查询由范围和限制条件组成。

  • 限制条件:指定限制条件的资源名称。
  • 范围:指定一个组织,限定分析范围。分析中包含所有具有此范围中定义的指定限制条件的组织政策。

如需详细了解组织政策,请参阅组织政策服务简介。如需详细了解如何创建自定义限制条件,请参阅创建和管理自定义限制条件

准备工作

启用 Cloud Asset API。

启用 API

您必须在将用于发送查询的项目或组织中启用该 API。此资源不必是查询范围所限定的资源。

所需的角色和权限

如需获取运行组织政策分析所需的权限,请让管理员针对您要执行分析的组织资源向您授予以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理访问权限

这些预定义角色包含运行组织政策分析所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需运行组织政策分析,您必须拥有以下权限:

  • 要进行分析,请按以下步骤操作:
    • cloudasset.assets.analyzeOrgPolicy
    • cloudasset.assets.searchAllResources
    • cloudasset.assets.searchAllIamPolicies
  • 如需查看自定义限制条件,请执行以下操作: orgpolicy.customConstraints.get

您也可以使用自定义角色或其他预定义角色来获取这些权限。

价格和配额

组织级激活 Security Command Center 的客户才能使用组织政策的大规模政策分析器(每个组织每天超过 20 次查询)和继承可视化

组织政策的政策分析器的配额由所有政策分析器工具共享。但是,在 2024 年 4 月 29 日之前,针对 IAM 允许政策对 Policy Analyzer 的查询不会计入配额。如需了解详情,请参阅结算问题

分析已配置的政策

组织政策根据强制执行该限制条件的限制条件和可选条件构建而成。您可以使用政策分析器返回具有特定限制条件的组织政策列表以及这些政策附加的资源。

对于在查询范围内检测到的每项组织政策,Policy Analyzer 都会返回一个结果条目。结果条目包含以下字段:

  • consolidatedPolicy:组织政策挂接到的资源,以及根据层次结构评估规则对该资源的有效政策强制执行。

  • project:此合并政策所属的项目资源的 ID。

  • folders:任何文件夹资源(作为组织政策附加到的资源的祖先实体)的 ID。

  • organization:组织资源的 ID,该资源是组织政策附加到的资源的祖先实体。

  • policyBundle:附加到上述资源的完整已配置组织政策,以及针对资源层次结构中其祖先实体定义的组织政策。

控制台

  1. 在 Google Cloud 控制台中,前往政策分析器页面。

    前往政策分析器

  2. 分析组织政策部分中,找到标签为如何为我的组织中的资源配置组织政策?的窗格,然后点击该窗格中的创建查询

  3. 选择查询组织框中,选择要为其分析组织政策的组织。

  4. 选择要分析的限制条件类型。对于预定义的限制条件,请选择内置限制条件。对于自定义限制条件,请选择自定义限制条件

  5. 输入要分析的限制条件的名称。您正在分析的限制条件类型的前缀已包含在内。例如,对于预定义的网域限制条件,请输入 iam.allowedPolicyMemberDomains;对于自定义限制条件,请输入其名称,例如 disableGkeAutoUpgrade

  6. 点击分析,然后点击运行查询。报告页面会显示您输入的查询参数,以及直接应用此限制条件的所有资源的结果表。

  7. 您可以点击复制查询网址,保存此查询以便日后再次查看。 如需查看此查询,请前往生成的网址。

  8. 您可以从列表中选择至少一个资源,然后点击查看继承,直观呈现您分析的限制条件的继承情况。您还可以在创建分析查询时立即转到可视化视图,方法是依次点击分析可视化。如需了解详情,请参阅直观呈现继承情况

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 方法和网址:

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": {}
    }
  }
}

分析容器

此上下文中的容器是项目、文件夹或组织资源。您可以使用政策分析器返回具有组织政策并且强制执行了特定限制条件的所有容器的列表。政策分析器还会返回每个容器的全名、该容器在层次结构中的父级,以及被容器继承或附加到该容器的标记。

对于在查询范围内检测到的每个容器,政策分析器会返回一个结果条目。结果条目包含以下字段:

  • consolidatedPolicy:关联组织政策的容器,以及根据层次结构评估规则对该容器的有效政策强制执行。

  • conditionEvaluation:如果所包含的条件导致组织政策的强制执行,则 evaluationValueTRUE。如果条件导致组织政策不强制执行,则 evaluationValueFALSE。如果强制执行组织政策的一项或多项资源不支持该条件,则返回条件本身。

  • effectiveTags:层次结构中容器和容器父级直接附加或继承的所有代码。

  • folders:任何文件夹资源(包含组织政策附加到的容器)的 ID。

  • fullResourceName:容器的全名。

  • organization:组织资源的 ID,该资源是组织政策附加到的容器的祖先实体。

  • parent:此容器的父级的完整资源名称。

  • policyBundle:直接在容器上配置的组织政策(如果存在),以及在资源层次结构中容器的祖先定义的组织政策。

  • project:组织政策挂接到的容器的 ID(如果该容器是项目资源)。

控制台

  1. 在 Google Cloud 控制台中,前往政策分析器页面。

    前往政策分析器

  2. 分析组织政策部分中,找到标有哪些容器已强制执行组织政策限制条件?的窗格,然后点击该窗格中的创建查询

  3. 选择查询组织框中,选择要为其分析组织政策的组织。

  4. 选择要分析的限制条件类型。对于预定义的限制条件,请选择内置限制条件。对于自定义限制条件,请选择自定义限制条件

  5. 输入要分析的限制条件的名称。您正在分析的限制条件类型的前缀已包含在内。例如,对于预定义的网域限制条件,请输入 iam.allowedPolicyMemberDomains;对于自定义限制条件,请输入其名称,例如 disableGkeAutoUpgrade

  6. 点击运行查询。报告页面显示您输入的查询参数,以及对其强制执行或继承的所有容器的结果表。

  7. 您可以点击复制查询网址,保存此查询以便日后再次查看。 如需查看此查询,请前往生成的网址。

  8. 您可以从列表中选择至少一个容器,然后点击查看继承情况,以直观呈现您分析的限制条件的继承情况。您还可以在创建分析查询时立即转到可视化视图,方法是依次点击分析可视化。如需了解详情,请参阅直观呈现继承情况

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 方法和网址:

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) 允许政策。您可以使用政策分析器返回具有组织政策并且强制执行了特定限制条件的所有资源的列表。支持自定义限制条件和以下预定义限制条件:

  • 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:附加到上述资源的完整已配置组织政策,以及针对资源层次结构中其祖先实体定义的组织政策。

控制台

  1. 在 Google Cloud 控制台中,前往政策分析器页面。

    前往政策分析器

  2. 分析组织政策部分中,找到标签为哪些资产已强制执行组织政策限制条件?的窗格,然后点击该窗格中的创建查询

  3. 选择查询组织框中,选择要为其分析组织政策的组织。

  4. 选择要分析的限制条件类型。对于预定义的限制条件,请选择内置限制条件。对于自定义限制条件,请选择自定义限制条件

  5. 输入要分析的限制条件的名称。您正在分析的限制条件类型的前缀已包含在内。例如,对于预定义的存储桶级访问权限限制条件,请输入 storage.uniformBucketLevelAccess;对于自定义限制条件,请输入其名称,例如 disableGkeAccess

  6. 点击运行查询。报告页面显示您输入的查询参数,以及一个结果表,其中包含强制执行或继承该限制条件的所有资源。

  7. 您可以点击复制查询网址,保存此查询以便日后再次查看。 如需查看此查询,请前往生成的网址。

  8. 您可以从列表中选择至少一个素材资源,然后点击查看继承情况,以直观呈现您分析的限制条件的继承情况。您还可以在创建分析查询时立即转到可视化视图,方法是依次点击分析可视化。如需了解详情,请参阅直观呈现继承情况

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 方法和网址:

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资产创建组织政策分析查询。在运行查询分析页面上,点击分析,然后选择可视化

您也可以转到已保存查询的网址,选择要突出显示的资源,然后点击 查看继承关系

资源继承页面以直观方式展示分析查询中所选资源的资源层次结构:

直观呈现资源层次结构中的组织政策继承情况。 直观呈现未强制执行的布尔值政策。

  1. 指示资源是组织、文件夹还是项目。

  2. 蓝点表示在查询中选择了该资源。

  3. 表示资源覆盖了其父资源的政策。

  4. 表示资源将组织政策的组织政策重置为 Google 管理的默认值。将政策重置为默认值的资源有一条虚线连接到其父级。

  5. 表示资源与其父级合并政策。

  6. 表示此资源的组织政策会强制执行布尔值限制条件,或具有允许值的列表限制条件。

  7. 表示此资源的组织政策是具有拒绝值的列表限制条件。

  8. 表示此资源的组织政策是未强制执行的布尔值限制条件。

后续步骤