修改主账号访问边界政策

通过主账号访问边界 (PAB) 政策,您可以限制一组主账号有资格访问的资源。本页面介绍了如何修改现有的主账号访问边界政策,以及如何修改主账号访问边界政策的政策绑定,以更改政策的适用对象。

准备工作

  • 设置身份验证。

    Select the tab for how you plan to use the samples on this page:

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

    如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

  • 阅读主账号访问边界政策概览

修改主账号访问边界政策所需的角色

如需获得修改主账号访问边界政策所需的权限,请让您的管理员为您授予组织的 Principal Access Boundary Admin (roles/iam.principalAccessBoundaryAdmin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色可提供修改主账号访问边界政策所需的 iam.principalaccessboundarypolicies.update 权限。

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

修改主账号访问边界政策绑定所需的角色

修改主账号访问边界政策的政策绑定所需的权限取决于绑定到该政策的主账号集。

如需获得修改主账号访问边界政策的政策绑定所需的权限,请让您的管理员为您授予以下 IAM 角色:

  • 针对组织的 Principal Access Boundary User (roles/iam.principalAccessBoundaryUser)
  • 修改绑定到员工身份联合池的主账号访问边界政策的政策绑定:针对目标员工身份联合池的 IAM Workforce Pool Admin (roles/iam.workforcePoolAdmin)
  • 修改绑定到工作负载身份联合池的主账号访问边界政策的政策绑定:针对拥有目标员工身份联合池的项目的 IAM Workload Identity Pool Admin (roles/iam.workloadIdentityPoolAdmin)
  • 修改绑定到 Google Workspace 网域的主账号访问边界政策的政策绑定:针对组织的 Workspace Pool IAM Admin (roles/iam.workspacePoolAdmin)
  • 修改绑定到项目的主账号集的主账号访问边界政策的政策绑定:针对项目的 Project IAM Admin (roles/resourcemanager.projectIamAdmin)
  • 修改绑定到文件夹的主账号集的主账号访问边界政策的政策绑定:针对文件夹的 Folder IAM Admin (roles/resourcemanager.folderIamAdmin)
  • 修改绑定到组织的主账号集的主账号访问边界政策的政策绑定:针对组织的 Organization Administrator (roles/resourcemanager.organizationAdmin)

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色可提供修改主账号访问边界政策的政策绑定所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

修改主账号访问边界政策的政策绑定需要以下权限:

  • 针对组织的 iam.principalaccessboundarypolicies.bind 权限
  • 修改绑定到员工身份联合池的主账号访问边界政策的政策绑定:针对目标员工身份联合池的 iam.workforcePools.updatePolicyBinding
  • 修改绑定到工作负载身份联合池的主账号访问边界政策的政策绑定:针对拥有目标员工身份联合池的项目的 iam.workloadIdentityPools.updatePolicyBinding
  • 修改绑定到 Google Workspace 网域的主账号访问边界政策的政策绑定:针对组织的 iam.workspacePools.updatePolicyBinding
  • 修改绑定到项目的主账号集的主账号访问边界政策的政策绑定:针对项目的 resourcemanager.projects.updatePolicyBinding
  • 修改绑定到文件夹的主账号集的主账号访问边界政策的政策绑定:针对文件夹的 resourcemanager.folders.updatePolicyBinding
  • 修改绑定到组织的主账号集的主账号访问边界政策的政策绑定:针对组织的 resourcemanager.organizations.updatePolicyBinding

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

修改现有的主账号访问边界政策

如果您要向主账号访问边界政策添加规则、从主账号访问边界政策中移除规则或修改主账号访问边界政策的元数据,请修改主账号访问边界政策。

您可以使用 Google Cloud 控制台、gcloud CLI 或 IAM REST API 修改主账号访问边界政策。

控制台

  1. 在 Google Cloud 控制台中,前往主账号访问权限边界政策页面。

    前往“主账号访问权限边界政策”

  2. 选择拥有您要修改的主账号访问边界政策的组织。

  3. 点击您要修改的主账号访问边界政策的政策 ID。

  4. 点击 修改政策

  5. 如需修改政策的规则,请执行以下操作:

    1. 点击您要修改的规则。
    2. 修改规则的说明或规则中包含的资源。
    3. 点击完成
  6. 如需从政策中删除规则,请点击该规则所在行的 删除

  7. 如需修改政策的显示名称,请修改显示名称字段。

  8. 如需修改政策的强制执行版本,请点击强制执行版本列表,然后选择新值。

  9. 点击保存

gcloud

gcloud beta iam principal-access-boundary-policies update 命令可更新现有的主账号访问边界政策。

在使用下面的命令数据之前,请先进行以下替换:

  • PAB_POLICY_ID:您要更新的主账号访问边界政策的 ID,例如 example-policy
  • ORG_ID:拥有主账号访问边界政策的组织的 ID。组织 ID 是数字,例如 123456789012
  • FIELD_TO_UPDATE=UPDATED_VALUE:您要更新的字段及其对应的更新值。

    以下是可用于更新政策中的字段的标志示例:

    • --display-name=DISPLAY_NAME:将政策的显示名称替换为 DISPLAY_NAME
    • --details-enforcement-version=ENFORCEMENT_VERSION:将政策的强制执行版本更新为 ENFORCEMENT_VERSION
    • --details-rules=RULES_FILE.json:将主账号访问边界政策的规则替换为 RULES_FILE.json 中的规则。如需了解如何设置规则文件的格式,请参阅创建主账号访问边界政策

      如果您使用此标志,则无法使用 --add-details-rules 标志。

    • --add-details-rules=RULES_FILE:将 RULES_FILE.json 中的规则附加到政策的现有规则。如需了解如何设置规则文件的格式,请参阅创建主账号访问边界政策

      如果您使用此标志,则无法使用 --details-rules 标志。

    • --remove-details-rules=RULES_FILE:从政策的现有规则中移除 RULES_FILE.json 中的规则。如需了解如何设置规则文件的格式,请参阅创建主账号访问边界政策。系统仅会移除与 RULES_FILE.json 中某个规则完全匹配的规则。

      如果您使用此标志,则无法使用 --clear-rule-details 标志。

    • --clear-details-rules:从主账号访问边界政策中清除所有规则。

      如果您使用此标志,则无法使用 --remove-rule-details 标志。

    如需查看可用于更新主账号访问边界政策的标志的完整列表,请参阅 gcloud beta iam principal-access-boundary-policies update 命令参考文档

  • FORMAT:响应的格式。请使用 jsonyaml

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud beta iam principal-access-boundary-policies update PAB_POLICY_ID \
    --organization=ORG_ID --location=global \
    --FIELD_TO_UPDATE=UPDATED_VALUE \
    --format=FORMAT

Windows (PowerShell)

gcloud beta iam principal-access-boundary-policies update PAB_POLICY_ID `
    --organization=ORG_ID --location=global `
    --FIELD_TO_UPDATE=UPDATED_VALUE `
    --format=FORMAT

Windows (cmd.exe)

gcloud beta iam principal-access-boundary-policies update PAB_POLICY_ID ^
    --organization=ORG_ID --location=global ^
    --FIELD_TO_UPDATE=UPDATED_VALUE ^
    --format=FORMAT

响应包含表示请求的长时间运行的操作。操作完成后,响应会输出更新后的主账号访问边界政策。

Request issued for: [example-policy]
Waiting for operation [organizations/123456789012/locations/global/operations/operation-1715374208720-6181fae5e2034-2d8a712b-5c92e5b9] to complete...done.
Updated principalAccessBoundaryPolicy [example-policy].
{
  "name": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-policy",
  "uid": "puid_13364150419245236225",
  "etag": "W/\"Gh/PcTdJD/AWHUhPW45kdw==\"",
  "displayName": "Updated display name",
  "createTime": "2024-05-07T00:05:48.295209Z",
  "updateTime": "2024-05-10T20:50:09.200421Z",
  "details": [
    "rules": {
      [
        "description": "Make principals eligible to access example.com"
        "resources": {
          "//cloudresourcemanager.googleapis.com/organizations/123456789012"
        },
        "effect": ALLOW
      ]
    },
    "enforcementVersion": "1"
  ]
}

REST

principalAccessBoundaryPolicies.patch 方法可更新现有的主账号访问边界政策。

在使用任何请求数据之前,请先进行以下替换:

  • ORG_ID:拥有主账号访问边界政策的组织的 ID。组织 ID 是数字,例如 123456789012
  • PAB_POLICY_ID:您要更新的主账号访问边界政策的 ID,例如 example-policy
  • FIELDS_TO_UPDATE:要更新的以英文逗号分隔的字段列表。如果您未指定要更新的字段,IAM 会将现有政策替换为请求正文的内容。

    接受的值包括 displayNamedetailsdetails.rulesdetails.rules.descriptiondetails.rules.resourcesdetails.rules.effectdetails.enforcementVersion

  • DISPLAY_NAME:可选。主账号访问边界政策的人类可读说明,例如 Example policy。显示名称最多可以包含 63 个字符。
  • PAB_RULES:主账号访问边界规则列表,用于定义受影响的主账号有资格访问的资源。一个主账号访问边界政策最多可以包含 500 个规则。每个规则的格式如下:

    {
    "description": "DESCRIPTION",
    "resources": [
      RESOURCES
    ],
    "effect": ALLOW
    }

    替换以下值:

    • DESCRIPTION:可选。主账号访问边界政策规则的说明。说明最多可包含 256 个字符。
    • RESOURCES:您希望主账号有资格访问的 Resource Manager 资源(项目、文件夹和组织)的列表。任何受此政策约束的主账号都有资格访问这些资源。

      每个主账号访问边界政策在其所有规则中最多可以引用 500 个资源。

  • ENFORCEMENT_VERSION:IAM 在强制执行政策时使用的主账号访问边界政策的版本。强制执行版本决定了 IAM 会针对哪些权限强制执行主账号访问边界政策。

    可接受的值为 1latest

    如需详细了解强制执行版本,请参阅主账号访问边界强制执行版本

HTTP 方法和网址:

PATCH https://iam.googleapis.com/v3beta/organizations/ORG_ID/locations/global/principalAccessBoundaryPolicies/PAB_POLICY_ID?updateMask=FIELDS_TO_UPDATE

请求 JSON 正文:

{
  "displayName": DISPLAY_NAME,
  "details": {
    "rules": [
      PAB_RULES
    ],
    "enforcementVersion": "ENFORCEMENT_VERSION",
  }
}

如需发送您的请求,请展开以下选项之一:

响应包含表示请求的长时间运行的操作。

{
  "name": "organizations/123456789012/locations/global/operations/operation-1715626721931-6185a7953ef76-76f80ee4-19cd1bf7",
  "metadata": {
    "@type": "type.googleapis.com/google.iam.v3beta.OperationMetadata",
    "createTime": "2024-05-13T18:58:43.721277235Z",
    "target": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-policy",
    "verb": "update",
    "requestedCancellation": false,
    "apiVersion": "v3beta"
  },
  "done": false
}

更改主账号访问边界政策的适用对象

为主账号访问边界政策创建政策绑定后,您将无法更改绑定中设置的政策 ID 或主账号。因此,如果您要更改主账号访问边界政策的适用对象,则必须执行以下操作之一:

修改主账号访问边界政策的现有政策绑定

创建政策绑定后,您可以修改绑定以修改绑定中的条件或绑定的显示名称。

您可以使用 Google Cloud 控制台、gcloud CLI 或 IAM REST API 修改政策绑定。

控制台

  1. 在 Google Cloud 控制台中,前往主账号访问权限边界政策页面。

    前往“主账号访问权限边界政策”

  2. 选择拥有您要修改的主账号访问边界政策的组织。

  3. 点击您要修改其绑定的主账号访问边界政策的政策 ID。

  4. 点击绑定标签页。

  5. 找到您要修改的绑定的 ID。在该绑定所在的行中,点击 操作,然后点击修改绑定

  6. 如需更新绑定的显示名称,请修改显示名称字段。

  7. 如需为绑定添加条件,请执行以下操作:

    1. 点击 添加条件
    2. 标题字段中,输入条件目的的简要摘要。
    3. 可选:在说明字段中,输入条件的详细说明。
    4. 表达式字段中,输入使用通用表达式语言 (CEL) 语法的条件表达式。该表达式必须引用 principal.typeprincipal.subject 属性。不支持其他属性。
    5. 点击保存
  8. 如需更新现有条件,请执行以下操作:

    1. 点击条件名称旁边的 修改条件
    2. 更新条件的标题、说明或表达式。
    3. 点击保存
  9. 要保存更改,请点击保存

gcloud

gcloud beta iam policy-bindings update 命令可更新现有的政策绑定。

在使用下面的命令数据之前,请先进行以下替换:

  • BINDING_ID:您要更新的政策绑定的 ID,例如 example-binding
  • RESOURCE_TYPE:政策绑定是其子级的 Resource Manager 资源(项目、文件夹或组织)的类型。使用值 projectfolderorganization

    资源类型取决于在政策绑定中设置的主账号。如需了解要使用哪种资源类型,请参阅支持的主账号类型

  • RESOURCE_ID:政策绑定是其子级的项目、文件夹或组织的 ID。项目 ID 是字母数字字符串,例如 my-project。文件夹和组织 ID 是数字,例如 123456789012
  • FIELD_TO_UPDATE=UPDATED_VALUE:您要更新的字段及其对应的更新值。

    以下是可用于更新政策绑定中的字段的标志示例:

    • --display-name=DISPLAY_NAME:将绑定的显示名称替换为 DISPLAY_NAME
    • --condition-description=CONDITION_DESCRIPTION:如果绑定具有条件,请将条件的说明替换为 CONDITION_DESCRIPTION。否则,向绑定添加包含指定说明的新条件。如果您使用此标志更新没有条件的绑定,则还必须设置 --condition-expression 标志。
    • --condition-expression=CONDITION_EXPRESSION:如果绑定具有条件,请将条件的表达式替换为 CONDITION_EXPRESSION。否则,向绑定添加包含指定表达式的新条件。
    • --condition-title=CONDITION_TITLE:如果绑定具有条件,请将条件的标题替换为 CONDITION_TITLE。否则,向绑定添加包含指定标题的新条件。如果您使用此标志更新没有条件的绑定,则还必须设置 --condition-expression 标志。

    如需查看可更新的字段的完整列表,请参阅 gcloud beta iam policy-bindings update 命令参考文档

  • FORMAT:响应的格式。请使用 jsonyaml

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud beta iam policy-bindings update BINDING_ID \
    --RESOURCE_TYPE=RESOURCE_ID --location=global \
    --FIELD_TO_UPDATE=UPDATED_VALUE \
    --format=FORMAT

Windows (PowerShell)

gcloud beta iam policy-bindings update BINDING_ID `
    --RESOURCE_TYPE=RESOURCE_ID --location=global `
    --FIELD_TO_UPDATE=UPDATED_VALUE `
    --format=FORMAT

Windows (cmd.exe)

gcloud beta iam policy-bindings update BINDING_ID ^
    --RESOURCE_TYPE=RESOURCE_ID --location=global ^
    --FIELD_TO_UPDATE=UPDATED_VALUE ^
    --format=FORMAT

响应包含表示请求的长时间运行的操作。

Update request issued for: [my-binding]
Waiting for operation [organizations/123456789012/locations/global/operations/operation-1715374545618-6181fc272c6f9-55ff07f4-97d0ac76] to complete...done.
Updated policyBinding [my-binding].
{
  "createTime": "2024-05-06T18:08:24.729843Z",
  "displayName": "Updated display name",
  "etag": "W/\"xkdnPfTxoxyVqOwhQSJbMg==\"",
  "name": "organizations/123456789012/locations/global/policyBindings/example-binding",
  "policy": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-pab-policy",
  "policyKind": "PRINCIPAL_ACCESS_BOUNDARY",
  "policyUid": "puid_9519202237377675265",
  "target": {
    "principalSet": "//cloudresourcemanager.googleapis.com/organizations/123456789012"
  },
  "uid": "buid_9904260005517852673", 
  "updateTime": "2024-05-06T18:11:16.798841Z"
}

REST

policyBindings.patch 方法可更新现有的政策绑定。

在使用任何请求数据之前,请先进行以下替换:

  • RESOURCE_TYPE:政策绑定是其子级的 Resource Manager 资源(项目、文件夹或组织)的类型。使用值 projectsfoldersorganizations

    资源类型取决于在政策绑定中设置的主账号。如需了解要使用哪种资源类型,请参阅支持的主账号类型

  • RESOURCE_ID:政策绑定是其子级的项目、文件夹或组织的 ID。项目 ID 是字母数字字符串,例如 my-project。文件夹和组织 ID 是数字,例如 123456789012
  • BINDING_ID:您要更新的政策绑定的 ID,例如 example-binding
  • FIELDS_TO_UPDATE:要更新的以英文逗号分隔的字段列表。如果您未指定要更新的字段,IAM 会将现有绑定替换为请求正文的内容。

    接受的值包括 displayNameconditioncondition.expressioncondition.titlecondition.description

  • DISPLAY_NAME:可选。直观易懂的绑定说明,例如 Example binding。显示名称最多可以包含 63 个字符。
  • CONDITION_DETAILS:可选。一个条件表达式,用于指定要为主账号集中的哪些主账号强制执行主账号访问边界政策。包含以下字段:

HTTP 方法和网址:

POST https://iam.googleapis.com/v3beta/RESOURCE_TYPE/RESOURCE_ID/locations/global/policyBindings/BINDING_ID?updateMask=FIELDS_TO_UPDATE

请求 JSON 正文:

{
  "displayName": DISPLAY_NAME,
  "condition": {
    CONDITION_DETAILS
  }
}

如需发送您的请求,请展开以下选项之一:

响应包含表示请求的长时间运行的操作。

{
  "name": "organizations/123456789012/locations/global/operations/operation-1715373159010-6181f6fcccfa7-dcd0055c-00c22cad",
  "metadata": {
    "@type": "type.googleapis.com/google.iam.v3beta.OperationMetadata",
    "createTime": "2024-05-10T20:32:39.254910121Z",
    "target": "organizations/123456789012/locations/global/policyBindings/example-binding",
    "verb": "update",
    "requestedCancellation": false,
    "apiVersion": "v3beta"
  },
  "done": false
}

后续步骤