在 Privileged Access Manager 中创建使用权

您可以创建使用权,以允许为特定主账号提供临时权限提升。创建使用权时,请注意以下事项:

  • 您可以在组织级、文件夹级或项目级创建使用权。在各级别通过使用权授予的角色遵循 Google Cloud 资源层次结构。例如,在组织级层通过使用权授予的角色会在文件夹和项目级层继承。

  • 如果您将群组作为请求者添加到某项使用权,则该群组中的所有个人账号都可以请求授予该使用权。不过,只有请求授权的个人账号才能获得升级后的权限。

  • 如果您将群组添加为某项使用权的审批者,则该群组中的所有个人账号都可以批准或拒绝授予请求。

  • 不支持基本角色

准备工作

确保您已启用 Privileged Access Manager 并为其设置权限

使用 Google Cloud 控制台创建使用权

如需创建使用权,请完成以下说明:

  1. 前往 Privileged Access Manager 页面。

    前往 Privileged Access Manager

  2. 选择您要将相应使用权应用到的组织、文件夹或项目。

  3. 点击使用权标签页。

  4. 点击创建

  5. 添加以下使用权详情:

    • 使用权名称。

    • 最多可在组织、文件夹或项目级层授予 30 个角色。您可以将 IAM 条件应用于这些角色,只要它们不与资源标记匹配即可。

    • 赠金相对于使用权的有效期。

  6. 点击下一步

  7. 搜索并添加最多 20 个有效的请求者主账号。支持所有主账号类型,但 allUsersallAuthenticatedUsers 除外。您可以将 20 个以上的身份添加到群组中,并在使用权中列出该群组。

  8. 选择授权请求的正文是否需要提供理由。

  9. 点击下一步

  10. 选择允许在不经批准的情况下授予角色,或者搜索并添加可以批准请求的有效正文。有效的主账号类型如下:

    • Google 账号

    • Google 群组

    • Google Workspace 网域

    • 员工群组标识符

    如果您选择指定审批人,还需要选择审批人是否需要提供批准授予请求的理由。您最多可以为每项使用权添加 20 位审批主账号。您可以将 20 个以上的身份添加到群组中,并在使用权中列出该群组。

  11. 点击下一步

  12. 可选:添加人员的电子邮件地址,以便在可以申请使用权、授予权限时等待批准以及请求者被授予访问权限时通知相应人员。与相应使用权相关联的 Google 身份(例如审批者和请求者)会自动收到通知。不过,您可能需要通知另一组电子邮件地址,尤其是在使用员工身份联合时。

  13. 点击创建使用权

以编程方式创建使用权

gcloud

gcloud beta pam entitlements create 命令会在组织、文件夹或项目级别创建使用权。

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

  • ENTITLEMENT_ID:要创建的使用权 ID。ID 必须为 4-63 个字符,并且使用以下字符:[a-z0-9-]。第一个字符必须是字母。
  • RESOURCE_TYPE:可选。该使用权所属的资源类型。使用值 organizationfolderproject
  • RESOURCE_ID:与 RESOURCE_TYPE 一起使用。您要管理使用权的 Google Cloud 组织、文件夹或项目的 ID。项目 ID 是字母数字字符串,例如 my-project。文件夹和组织 ID 是数字,例如 123456789012
  • SCOPE:要创建使用权的组织、文件夹或项目,格式为 organizations/ORGANIZATION_IDfolders/FOLDER_IDprojects/PROJECT_ID。项目 ID 是字母数字字符串,例如 my-project。文件夹和组织 ID 是数字,例如 123456789012
  • RESOURCE_MANAGER_RESOURCE_TYPEOrganizationFolderProject,具体取决于范围。
  • ROLE:在授予使用权时要分配的角色
  • TIME_IN_SECONDS:一项奖励的持续时长上限(以秒为单位)。
  • REQUESTING_MEMBER:可以请求授予使用权的主账号。除 allUsersallAuthenticatedUsers 之外,所有主账号类型均受支持。

  • APPROVING_EMAIL:可选。在请求授予访问权限时通知的其他电子邮件地址。与授权审批者关联的 Google 身份会自动收到通知。不过,您可能需要通知另一组电子邮件地址,尤其是在使用员工身份联合时。
  • APPROVING_MEMBER:可以批准使用权请求的主账号。有效的主账号类型如下所示:

    • 用户
    • 群组
    • 网域
    • 员工群组标识符
  • ADMIN_EMAIL_ADDRESS:可选。当请求者被授予访问权限时,系统会向这些电子邮件地址发送通知。与授权审批者关联的 Google 身份会自动收到通知。不过,您可能需要通知另一组电子邮件地址,尤其是在使用员工身份联合时。
  • REQUESTER_EMAIL_ADDRESS:可选。当此使用权可供申请时,用于接收通知的其他电子邮件地址。与授权请求者关联的 Google 身份会自动收到通知。不过,您可能需要通知另一组电子邮件地址,尤其是在使用员工身份联合时。

将以下内容保存在名为 entitlement.yaml 的文件中:

privilegedAccess:
  gcpIamAccess:
    resourceType: cloudresourcemanager.googleapis.com/RESOURCE_MANAGER_RESOURCE_TYPE
    resource: //cloudresourcemanager.googleapis.com/SCOPE
    roleBindings:
    - role: ROLE_1
    - role: ROLE_2
maxRequestDuration: TIME_IN_SECONDSs
eligibleUsers:
- principals:
  - REQUESTING_MEMBER_1
  - REQUESTING_MEMBER_2
approvalWorkflow:
  manualApprovals:
    requireApproverJustification: true
    steps:
    - approvalsNeeded: 1
      approverEmailRecipients:
      - APPROVING_EMAIL_1
      - APPROVING_EMAIL_2
      approvers:
      - principals:
        - APPROVING_MEMBER_1
        - APPROVING_MEMBER_2
requesterJustificationConfig:
  unstructured: {}
additionalNotificationTargets:
  adminEmailRecipients:
  - ADMIN_EMAIL_ADDRESS_1
  - ADMIN_EMAIL_ADDRESS_2
  requesterEmailRecipients:
  - REQUESTER_EMAIL_ADDRESS_1
  - REQUESTER_EMAIL_ADDRESS_2

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud beta pam entitlements create \
    ENTITLEMENT_ID \
    --entitlement-file=entitlement.yaml \
    --location=global \
    --RESOURCE_TYPE=RESOURCE_ID

Windows (PowerShell)

gcloud beta pam entitlements create `
    ENTITLEMENT_ID `
    --entitlement-file=entitlement.yaml `
    --location=global `
    --RESOURCE_TYPE=RESOURCE_ID

Windows (cmd.exe)

gcloud beta pam entitlements create ^
    ENTITLEMENT_ID ^
    --entitlement-file=entitlement.yaml ^
    --location=global ^
    --RESOURCE_TYPE=RESOURCE_ID

您应该会收到类似如下所示的响应:

Create request issued for: [ENTITLEMENT_ID]
Waiting for operation [projects/my-project/locations/global/operations/OPERATION_ID] to complete...done.
Created entitlement [ENTITLEMENT_ID].
additionalNotificationTargets: {}
approvalWorkflow:
  manualApprovals:
    requireApproverJustification: true
    steps:
    - approvalsNeeded: 1
      approvers:
      - principals:
        - user:alex@example.com
createTime: '2024-04-09T02:39:37.011866832Z'
eligibleUsers:
- principals:
  - user:bola@example.com
etag: 00000000000000000000000000000000000000000000000000000000000=
maxRequestDuration: 7200s
name: projects/my-project/locations/global/entitlements/ENTITLEMENT_ID
privilegedAccess:
  gcpIamAccess:
    resource: //cloudresourcemanager.googleapis.com/projects/my-project
    resourceType: cloudresourcemanager.googleapis.com/Project
    roleBindings:
    - role: roles/storage.admin
requesterJustificationConfig:
  unstructured: {}
state: AVAILABLE
updateTime: '2024-04-09T02:39:40.066770306Z'

REST

Privileged Access Manager API 的 createEntitlement 方法可在组织、文件夹或项目级别创建权限。

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

  • SCOPE:要创建使用权的组织、文件夹或项目,格式为 organizations/ORGANIZATION_IDfolders/FOLDER_IDprojects/PROJECT_ID。项目 ID 是字母数字字符串,例如 my-project。文件夹和组织 ID 是数字,例如 123456789012
  • ENTITLEMENT_ID:要创建的使用权 ID。ID 必须为 4-63 个字符,并且使用以下字符:[a-z0-9-]。第一个字符必须是字母。
  • REQUEST_ID:可选。必须是非零 UUID。 如果服务器收到带有请求 ID 的请求,则会检查是否有其他带有该 ID 的请求在过去 60 分钟内已完成。如果是,则系统会忽略新请求。
  • RESOURCE_MANAGER_RESOURCE_TYPEOrganizationFolderProject,具体取决于范围。
  • ROLE:在授予使用权时要分配的角色
  • TIME_IN_SECONDS:一项奖励的持续时长上限(以秒为单位)。
  • REQUESTING_MEMBER:可以请求授予使用权的主账号。除 allUsersallAuthenticatedUsers 之外,所有主账号类型均受支持。

  • APPROVING_MEMBER:可以批准使用权请求的主账号。有效的主账号类型如下所示:

    • 用户
    • 群组
    • 网域
    • 员工群组标识符
  • APPROVING_EMAIL:可选。在请求授予访问权限时通知的其他电子邮件地址。与授权审批者关联的 Google 身份会自动收到通知。不过,您可能需要通知另一组电子邮件地址,尤其是在使用员工身份联合时。
  • ADMIN_EMAIL_ADDRESS:可选。当请求者被授予访问权限时,系统会向这些电子邮件地址发送通知。与授权审批者关联的 Google 身份会自动收到通知。不过,您可能需要通知另一组电子邮件地址,尤其是在使用员工身份联合时。
  • REQUESTER_EMAIL_ADDRESS:可选。当此使用权可供申请时,用于接收通知的其他电子邮件地址。与授权请求者关联的 Google 身份会自动收到通知。不过,您可能需要通知另一组电子邮件地址,尤其是在使用员工身份联合时。

HTTP 方法和网址:

POST https://privilegedaccessmanager.googleapis.com/v1beta/SCOPE/locations/global/entitlements?entitlementId=ENTITLEMENT_ID&requestId=REQUEST_ID

请求 JSON 正文:

{
  "privilegedAccess": {
    "gcpIamAccess": {
      "resourceType": "cloudresourcemanager.googleapis.com/RESOURCE_MANAGER_RESOURCE_TYPE",
      "resource": "//cloudresourcemanager.googleapis.com/SCOPE",
      "roleBindings": [
        {
          "role": "ROLE_1"
        },
        {
          "role": "ROLE_2"
        }
      ]
    }
  },
  "maxRequestDuration": "TIME_IN_SECONDSs",
  "eligibleUsers": [
    {
      "principals": [
        "REQUESTING_MEMBER_1",
        "REQUESTING_MEMBER_2",
        ...
      ]
    }
  ],
  "approvalWorkflow": {
    "manualApprovals": {
      "requireApproverJustification": true,
      "steps": [
        {
          "approvers": [
            {
              "principals": [
                "APPROVING_MEMBER_1",
                "APPROVING_MEMBER_2",
                ...
              ]
            }
          ],
          "approvalsNeeded": 1,
          "approverEmailRecipients": [
            "APPROVING_EMAIL_1",
            "APPROVING_EMAIL_2",
            ...
          ]
        }
      ]
    }
  },
  "requesterJustificationConfig": {
    "unstructured": {
    }
  },
  "additionalNotificationTargets": {
    "adminEmailRecipients": [
      "ADMIN_EMAIL_ADDRESS_1",
      "ADMIN_EMAIL_ADDRESS_2",
      ...
    ],
    "requesterEmailRecipients": [
      "REQUESTER_EMAIL_ADDRESS_1",
      "REQUESTER_EMAIL_ADDRESS_2",
      ...
    ]
  }
}

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

您应该收到类似以下内容的 JSON 响应:

{
    "name": "projects/my-project/locations/global/operations/OPERATION_ID",
    "metadata": {
      "@type": "type.googleapis.com/google.cloud.privilegedaccessmanager.v1beta.OperationMetadata",
      "createTime": "2024-03-05T03:35:14.596739353Z",
      "target": "projects/my-project/locations/global/entitlements/ENTITLEMENT_ID",
      "verb": "create",
      "requestedCancellation": false,
      "apiVersion": "v1beta"
    },
    "done": false
}

如需检查创建操作的进度,您可以向以下端点发送 GET 请求:

https://privilegedaccessmanager.googleapis.com/v1beta/SCOPE/locations/global/operations/OPERATION_ID

向以下端点发送 GET 请求以列出所有操作:

https://privilegedaccessmanager.googleapis.com/v1beta/SCOPE/locations/global/operations

Terraform

您可以使用 Terraform 创建权限。如需了解详情,请参阅 Terraform 文档中的 google_privileged_access_manager_entitlement

后续步骤