保护 Google Cloud 控制台和 Google Cloud API

本文档介绍了如何使用基于上下文的规则保护对 Google Cloud 控制台和 Google Cloud API 的访问权限。

Google Cloud 控制台和 Google Cloud API 的情境感知访问权限通过基于上下文的规则限制对 Google Cloud 控制台和 Google Cloud API 的访问权限。它是 BeyondCorp Enterprise 的一部分,有助于确保组织内满足指定访问要求的个人和群组能够访问 Google Cloud 控制台和 Google Cloud API(包括来自 Google Cloud CLI 的访问权限)。

如需保护 Google Cloud 控制台和 Google Cloud API,请完成以下步骤:

  1. [可选] 将端点验证部署到组织中的设备。
  2. 在 Access Context Manager 中创建访问权限级别。
  3. 创建一个受情境感知限制约束的用户群组。
  4. 获取所需的 Identity and Access Management 权限。
  5. 创建一个访问权限绑定,用于为 Google Cloud 控制台和 Google Cloud API 强制执行情境感知规则。

[可选] 部署端点验证

如果您想使用设备特性来保护对 Google Cloud 控制台和 Google Cloud API 的访问权限,请将端点验证部署到组织中的设备。

在 MacOS、Windows 和 Linux 系统上,端点验证功能可以在 Chrome 扩展程序的桌面设备和笔记本电脑上运行。管理员可以从 Google 管理控制台中将它部署到组织公司自有设备,或者组织成员可以自行安装

创建访问权限级别

在确定对 Google Cloud 控制台和 Google Cloud API 的访问权限时,您需要定义一个访问权限级别,方法是在 Access Context Manager 中创建基本访问权限级别

创建用户群组

创建一组应受情境感知限制约束的用户。此群组中同时也是组织成员的任何用户都必须满足您之前创建的访问权限级别,才能访问 Google Cloud 控制台和 Google Cloud API。

授予所需的 IAM 权限

在组织级层授予创建 Access Context Manager 访问权限绑定所需的 IAM 权限。

控制台

  1. 转到 Google Cloud 控制台中的 IAM 和管理页面。

    进入“IAM 和管理”

  2. 点击添加并配置以下内容:

    • 新成员:指定要授予权限的用户或群组。
    • 选择角色:选择 Access Context Manager > Cloud Access Binding Admin
  3. 点击保存

gcloud

  1. 确保您已经过身份验证并拥有在组织级层添加 IAM 权限的足够权限。您至少需要具有 Organization Admin 角色。

    确认拥有适当权限后,运行以下命令进行登录:

    gcloud auth login
    
  2. 通过运行以下命令来分配 GcpAccessAdmin 角色:

    gcloud organizations add-iam-policy-binding ORG_ID \
      --member=user:EMAIL \
      --role=roles/accesscontextmanager.gcpAccessAdmin
    
    • ORG_ID 是您组织的 ID。如果您不知道组织 ID,可使用以下命令进行查找:

       gcloud organizations list
      
    • EMAIL 是您要授予角色的用户或群组的电子邮件地址。

创建访问权限绑定

访问权限绑定是您之前创建的用户组与您为访问 Google Cloud 控制台和 Google Cloud API 而定义的 Access Context Manager 访问权限级别之间的映射。

您可以通过以下任一方式创建访问权限绑定:

  • 群组与访问权限级别之间的访问权限绑定。
  • 群组与试运行配置之间的访问权限级别绑定。通过试运行配置,您可以在组与试运行访问权限级别之间,或在组、访问权限级别和试运行访问权限级别之间创建访问权限绑定。

创建具有访问权限级别的访问权限绑定

控制台

  1. 转到 Google Cloud 控制台中的 BeyondCorp Enterprise 页面。

    转到 BeyondCorp Enterprise

  2. 选择一个组织,然后点击选择

  3. 点击管理访问权限以选择哪些用户组应拥有访问权限。

  4. 点击添加并配置以下内容:

    • 成员组:指定要授予访问权限的群组。 您只能选择尚未绑定到访问权限级别的群组。
    • 选择访问权限级别:选择应应用于该群组的访问权限级别。
  5. 点击保存

gcloud

如需详细了解此命令以及其他 gcloud access-context-manager cloud-bindings 命令,请参阅 Google Cloud CLI。

 gcloud access-context-manager cloud-bindings create \
    --group-key GROUP_ID \
    --level ACCESS_LEVEL \
    --organization ORG_ID

其中:

  • GROUP_ID您之前创建的用户群组的群组 ID。

    如果您没有群组 ID,可以通过对 Groups 资源调用 get 方法来检索。

  • ORG_ID 是您在创建 GcpAccessAdmin 角色时使用的组织 ID。 如果未设置 access-context-manager/organization 属性,请将可选 --organization 标志中的 ORG_ID 替换为您在创建 GcpAccessAdmin 角色时使用的组织的 ID。
  • POLICY_ID 是您的组织的访问权限政策的 ID。
  • ACCESS_LEVEL 的格式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。您可以在创建访问权限级别时在 Access Context Manager 中找到 POLICY_IDACCESS_LEVEL_NAME 的值。

API

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

  • ORG_ID 是您在创建 GcpAccessAdmin 角色时使用的组织 ID。
  • GROUP_ID您之前创建的用户群组的群组 ID。

    如果您没有群组 ID,可以通过对 Groups 资源调用 get 方法来检索。

  • POLICY_ID 是您的组织的访问权限政策的 ID。
  • ACCESS_LEVEL 的格式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。您可以在创建访问权限级别时在 Access Context Manager 中找到 POLICY_IDACCESS_LEVEL_NAME 的值。

HTTP 方法和网址:

POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings

请求 JSON 正文:

{
  "groupKey": "GROUP_ID",
  "accessLevels": [ "ACCESS_LEVEL" ],
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings" | Select-Object -Expand Content

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


{
  "name": "organizations/427391306986/gcpUserAccessBindings/aAQS-YRSviv2hC12vZFUN3AZzvwa6KV2hJ89iMytB_nHUcT1l",
  "groupKey": "045jfvxd0ybeul8",
  "accessLevels": [
    "accessPolicies/305009197125/accessLevels/device_lock"
  ]
}

使用试运行配置创建访问绑定

您可以利用试运行配置创建访问绑定,以了解以下场景中访问权限级别对环境的影响:

  • 要在实施某个访问权限级别之前评估该访问权限级别的影响,请创建一个具有试运行访问权限级别的访问权限绑定。
  • 如需同时实施访问权限级别和评估试运行访问权限级别的影响,请创建具有活跃访问权限级别和试运行访问权限级别的访问权限绑定。

具有试运行访问权限级别的访问权限绑定不会阻止访问,但会记录试运行访问权限级别的违规行为。如需查看日志详细信息,请参阅拒绝日志

创建具有试运行访问权限级别的访问权限绑定

gcloud

    gcloud access-context-manager cloud-bindings create \
    --group-key = GROUP_ID \
    --dry-run-level = DRY_RUN_ACCESS_LEVEL \
    --organization ORG_ID

其中:

  • GROUP_ID您之前创建的用户群组的群组 ID。

    如果您没有群组 ID,可以通过对 Groups 资源调用 get 方法来检索。

  • ORG_ID 是您在创建 GcpAccessAdmin 角色时使用的组织 ID。 如果未设置 access-context-manager/organization 属性,请将可选 --organization 标志中的 ORG_ID 替换为您在创建 GcpAccessAdmin 角色时使用的组织的 ID。
  • POLICY_ID 是您的组织的访问权限政策的 ID。
  • DRY_RUN_ACCESS_LEVEL 是您要了解其效果的 ACCESS_LEVELACCESS_LEVEL 的格式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。您可以在创建访问权限级别时从 Access Context Manager 中找到 POLICY_IDACCESS_LEVEL_NAME 的值。

API

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

  • ORG_ID 是您在创建 GcpAccessAdmin 角色时使用的组织 ID。
  • GROUP_ID您之前创建的用户群组的群组 ID。

    如果您没有群组 ID,可以通过对 Groups 资源调用 get 方法来检索。

  • POLICY_ID 是您的组织的访问权限政策的 ID。
  • DRY_RUN_ACCESS_LEVEL 是您要了解其效果的 ACCESS_LEVELACCESS_LEVEL 的格式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。您可以在创建访问权限级别时从 Access Context Manager 中找到 POLICY_IDACCESS_LEVEL_NAME 的值。

HTTP 方法和网址:

POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings

请求 JSON 正文:

{
  "groupKey": "GROUP_ID",
  "dryRunAccessLevels": [ "DRY_RUN_ACCESS_LEVEL" ]
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings" | Select-Object -Expand Content

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


{
  "name": "organizations/427391306986/gcpUserAccessBindings/aAQS-YRSviv2hC12vZFUN3AZzvwa6KV2hJ89iMytB_nHUcT1l",
  "groupKey": "045jfvxd0ybeul8",

  "dryRunAccessLevels": [
    "accessPolicies/305009197125/accessLevels/another"
  ]
}

创建具有访问权限级别和试运行访问权限级别的访问权限绑定

gcloud

    gcloud access-context-manager cloud-bindings create \
    --group-key = GROUP_ID \
    --level = ACCESS_LEVEL \
    --dry-run-level = DRY_RUN_ACCESS_LEVEL \
    --organization ORG_ID

其中:

  • GROUP_ID您之前创建的用户群组的群组 ID。

    如果您没有群组 ID,可以通过对 Groups 资源调用 get 方法来检索。

  • ORG_ID 是您在创建 GcpAccessAdmin 角色时使用的组织 ID。 如果未设置 access-context-manager/organization 属性,请将可选 --organization 标志中的 ORG_ID 替换为您在创建 GcpAccessAdmin 角色时使用的组织的 ID。
  • POLICY_ID 是您的组织的访问权限政策的 ID。
  • ACCESS_LEVEL 的格式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。您可以在创建访问权限级别时在 Access Context Manager 中找到 POLICY_IDACCESS_LEVEL_NAME 的值。
  • DRY_RUN_ACCESS_LEVEL 是您要了解其效果的 ACCESS_LEVELACCESS_LEVEL 的格式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。您可以在创建访问权限级别时从 Access Context Manager 中找到 POLICY_IDACCESS_LEVEL_NAME 的值。

API

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

  • ORG_ID 是您在创建 GcpAccessAdmin 角色时使用的组织 ID。
  • GROUP_ID您之前创建的用户群组的群组 ID。

    如果您没有群组 ID,可以通过对 Groups 资源调用 get 方法来检索。

  • POLICY_ID 是您的组织的访问权限政策的 ID。
  • ACCESS_LEVEL 的格式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。您可以在创建访问权限级别时在 Access Context Manager 中找到 POLICY_IDACCESS_LEVEL_NAME 的值。
  • DRY_RUN_ACCESS_LEVEL 是您要了解其效果的 ACCESS_LEVELACCESS_LEVEL 的格式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。您可以在创建访问权限级别时从 Access Context Manager 中找到 POLICY_IDACCESS_LEVEL_NAME 的值。

HTTP 方法和网址:

POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings

请求 JSON 正文:

{
  "groupKey": "GROUP_ID",
  "accessLevels": [ "ACCESS_LEVEL" ],
  "dryRunAccessLevels": [ "DRY_RUN_ACCESS_LEVEL" ]
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings" | Select-Object -Expand Content

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


{
  "name": "organizations/427391306986/gcpUserAccessBindings/aAQS-YRSviv2hC12vZFUN3AZzvwa6KV2hJ89iMytB_nHUcT1l",
  "groupKey": "045jfvxd0ybeul8",
  "accessLevels": [
    "accessPolicies/305009197125/accessLevels/device_lock"
  ],
  "dryRunAccessLevels": [
    "accessPolicies/305009197125/accessLevels/another"
  ]
}

查看拒绝事件日志

创建试运行配置后,您可以查看日志以确定试运行配置拒绝访问的位置。

下表列出了可用于创建和运行查询以获取日志的日志字段:

字段名称 说明
protoPayload > authenticationInfo > principalEmail 访问遭拒的主帐号的 ID。
protoPayload > metadata > deniedApplications 访问被拒绝的应用的名称。
protoPayload > metadata > evaluationResult 有效访问政策的评估结果。可能的值包括:GRANTEDDENIED
protoPayload > metadata > appliedAccessLevels 有效访问政策要求的已应用访问权限级别。
protoPayload > metadata > appliedDryRunAccessLevels 试运行访问权限政策要求的已应用访问权限级别。
protoPayload > metadata > dryRunEvaluationResult 试运行访问政策的评估结果,它指示访问政策强制执行时的目标操作。可能的值包括:GRANTEDDENIED

如需详细了解如何为日志创建查询,请参阅 Logging 查询语言

控制台

  1. 在 Google Cloud 控制台导航菜单中,点击 Logging,然后点击日志浏览器

    转到日志浏览器

  2. 查询字段中,输入以下查询过滤条件,然后点击运行查询

    severity="ERROR" AND
    (protoPayload.metadata.evaluationResult=DENIED OR protoPayload.metadata.dryRunEvaluationResult=DENIED) AND
     protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.ContextAwareAccessAuditMetadata" AND
     protoPayload.metadata.deniedApplications.name="CLOUD_PLATFORM"
    
  3. 查询结果下查看日志。

gcloud

如需使用 gcloud CLI 查看日志,请运行如下命令:

gcloud logging read 'severity="ERROR" AND
  (protoPayload.metadata.evaluationResult=DENIED OR protoPayload.metadata.dryRunEvaluationResult=DENIED) AND
   protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.ContextAwareAccessAuditMetadata" AND
   protoPayload.metadata.deniedApplications.name="CLOUD_PLATFORM"'

管理访问权限绑定

为一组用户创建访问权限绑定后,系统将根据对绑定访问权限级别的满意度来控制对 Google Cloud 控制台和 Google Cloud API 的访问权限。

您可以查看所创建的访问权限绑定的详细信息,也可以对其进行编辑或删除。

查看访问权限绑定

控制台

您可以查看组织的所有访问绑定,也可以查看访问绑定的详细信息。

gcloud

  • 如需查看所有访问绑定,请运行以下命令:

      gcloud access-context-manager cloud-bindings list \
       --organization ORG_ID
    

    其中:

    ORG_ID 是您在创建 GcpAccessAdmin 角色时使用的组织 ID。 . 如果未设置 access-context-manager/organization 属性,请将可选 --organization 标志中的 ORG_ID 替换为您在创建 GcpAccessAdmin 角色时使用的组织的 ID。

  • 如需查看访问绑定的详细信息,请运行以下命令:

      gcloud access-context-manager cloud-bindings describe \
      --binding=BINDING_ID
    

    其中:

    BINDING_ID 是访问绑定的访问 ID 或完全限定标识符的 ID。

API

  • 查看所有访问绑定:

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

    • ORG_ID 是您在创建 GcpAccessAdmin 角色时使用的组织 ID。 如果未设置 access-context-manager/organization 属性,请将可选 --organization 标志中的 ORG_ID 替换为您在创建 GcpAccessAdmin 角色时使用的组织的 ID。

    HTTP 方法和网址:

    GET https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings

    如需发送请求,请选择以下方式之一:

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings" | Select-Object -Expand Content

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

    
    {
      "name": string,
      "groupKey": string,
      "accessLevels": [
        string
      ]
      "dryRunAccessLevels": [
      string
      ]
    }
    
    

  • 查看访问绑定的详细信息:

    HTTP 方法和网址:

    GET https://accesscontextmanager.googleapis.com/v1/BINDING_ID

    如需发送请求,请选择以下方式之一:

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://accesscontextmanager.googleapis.com/v1/BINDING_ID"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://accesscontextmanager.googleapis.com/v1/BINDING_ID" | Select-Object -Expand Content

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

    
    {
      "name": "organizations/427391306986/gcpUserAccessBindings/aAQS-YRSviv2hC12vZFUN3AZzvwa6KV2hJ89iMytB_nHUcT1l",
      "groupKey": "045jfvxd0ybeul8",
      "accessLevels": [
        "accessPolicies/305009197125/accessLevels/device_lock"
      ],
      "dryRunAccessLevels": [
        "accessPolicies/305009197125/accessLevels/another"
      ]
    }
    
    

更新访问权限绑定

控制台

您可以根据需要更新访问绑定。

gcloud

  • 如需更新访问权限绑定(例如更改访问权限级别),请运行以下命令:

      gcloud access-context-manager cloud-bindings update \
         --binding ACCESS_BINDING \
         --level ACCESS_LEVEL
    

    其中:

    • ACCESS_BINDING 的格式为 organizations/ORG_ID/gcpUserAccessBindings/ACCESS_BINDING_NAME
    • ORG_ID 是您在创建 GcpAccessAdmin 角色时使用的组织 ID。
    • ACCESS_BINDING_NAME 是创建访问绑定时为 name 标识符返回的唯一字符串。
    • 根据需要替换 ACCESS_LEVEL 的值。 ACCESS_LEVEL 的格式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。您可以在创建访问权限级别时在 Access Context Manager 中找到 POLICY_IDACCESS_LEVEL_NAME 的值。
  • 如需使用试运行访问权限级别更新访问权限绑定,请运行以下命令:

     gcloud access-context-manager cloud-bindings update --binding=ACCESS_BINDING
      --dry-run-level=DRY_RUN_ACCESS_LEVEL
    

    根据需要替换 DRY_RUN_ACCESS_LEVEL 的值。其格式为 accessPolicies/POLICY_ID/accessLevels/DRY_ACCESS_LEVEL_NAME

  • 如需更新访问权限级别绑定并更改访问权限级别和试运行访问权限级别,请运行以下命令:

     gcloud access-context-manager cloud-bindings update --binding=ACCESS_BINDING
     --level=`ACCESS_LEVEL`
     --dry-run-level=DRY_RUN_ACCESS_LEVEL
    

    根据需要替换 ACCESS_LEVELDRY_RUN_ACCESS_LEVEL 的值。ACCESS_LEVELDRY_RUN_ACCESS_LEVEL 采用 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME 格式,DRY_RUN_ACCESS_LEVELACCESS_LEVEL 相同。

  • 如需从访问绑定中移除试运行访问权限级别,请运行以下命令:

      gcloud access-context-manager cloud-bindings update --binding=ACCESS_BINDING
      --dry-run-level=
    

API

  • 更新访问权限绑定,例如更改访问权限级别:

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

    • ACCESS_BINDING_NAME 是创建访问绑定时为 name 标识符返回的唯一字符串。
    • ACCESS_LEVEL 的格式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。您可以在创建访问权限级别时在 Access Context Manager 中找到 POLICY_IDACCESS_LEVEL_NAME 的值。

    HTTP 方法和网址:

    PATCH https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME?update_mask=access_levels

    请求 JSON 正文:

    {
        "accessLevels": [ "ACCESS_LEVEL" ]
    }
    
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME?update_mask=access_levels"

    PowerShell

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method PATCH `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME?update_mask=access_levels" | Select-Object -Expand Content

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

    
    {
        "name": "organizations/427391306986/gcpUserAccessBindings/aAQS-YRSviv2hC12vZFUN3AZzvwa6KV2hJ89iMytB_nHUcT1l",
        "groupKey": "045jfvxd0ybeul8",
        "accessLevels": [
          "accessPolicies/305009197125/accessLevels/device_lock"
        ]
    }
    
    

  • 使用试运行访问权限级别更新访问权限绑定:

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

    • ACCESS_BINDING_NAME 是创建访问绑定时为 name 标识符返回的唯一字符串。
    • DRY_RUN_ACCESS_LEVEL 是您要了解其效果的 ACCESS_LEVELACCESS_LEVEL 的格式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。您可以在创建访问权限级别时从 Access Context Manager 中找到 POLICY_IDACCESS_LEVEL_NAME 的值。

    HTTP 方法和网址:

    PATCH https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME?update_mask=dry_run_access_levels

    请求 JSON 正文:

    {
      "dryRunAccessLevels": [ "DRY_RUN_ACCESS_LEVEL" ]
    }
    
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME?update_mask=dry_run_access_levels"

    PowerShell

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method PATCH `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME?update_mask=dry_run_access_levels" | Select-Object -Expand Content

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

    
    {
      name: "organizations/427391306986/gcpUserAccessBindings/aAQS-YRSviv2hC12vZFUN3AZzvwa6KV2hJ89iMytB_nHUcT1l",
    
      group_key: "045jfvxd0ybeul8",
    
      dry_run_access_levels: [ "accessPolicies/305009197125/accessLevels/another" ]
      }
    
    

  • 更新访问绑定并更改访问权限级别和试运行访问权限级别:

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

    • ACCESS_BINDING_NAME 是创建访问绑定时为 name 标识符返回的唯一字符串。
    • ACCESS_LEVEL 的格式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。您可以在创建访问权限级别时在 Access Context Manager 中找到 POLICY_IDACCESS_LEVEL_NAME 的值。
    • DRY_RUN_ACCESS_LEVEL 是您要了解其效果的 ACCESS_LEVELACCESS_LEVEL 的格式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。您可以在创建访问权限级别时从 Access Context Manager 中找到 POLICY_IDACCESS_LEVEL_NAME 的值。

    HTTP 方法和网址:

    PATCH https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME?update_mask=access_levels,dry_run_access_levels

    请求 JSON 正文:

    {
      "accessLevels": [ "ACCESS_LEVEL" ],
      "dryRunAccessLevels": [ "DRY_RUN_ACCESS_LEVEL" ]
     }
    
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME?update_mask=access_levels,dry_run_access_levels"

    PowerShell

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method PATCH `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME?update_mask=access_levels,dry_run_access_levels" | Select-Object -Expand Content

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

    
    {
      "name": "organizations/427391306986/gcpUserAccessBindings/aAQS-YRSviv2hC12vZFUN3AZzvwa6KV2hJ89iMytB_nHUcT1l",
      "groupKey": "045jfvxd0ybeul8",
      "accessLevels": [
        "accessPolicies/305009197125/accessLevels/device_lock"
      ],
      "dryRunAccessLevels": [
        "accessPolicies/305009197125/accessLevels/another"
      ]
    }
    
    

  • 从访问绑定中移除试运行访问权限级别:

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

    • ACCESS_BINDING_NAME 是创建访问绑定时为 name 标识符返回的唯一字符串。

    HTTP 方法和网址:

    PATCH PATCH https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME?update_mask=dry_run_access_levels

    请求 JSON 正文:

    {
      "dryRunAccessLevels": [ ]
    }
    
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "PATCH https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME?update_mask=dry_run_access_levels"

    PowerShell

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method PATCH `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "PATCH https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME?update_mask=dry_run_access_levels" | Select-Object -Expand Content

    您应该会收到一个成功的状态代码 (2xx) 和一个空响应。

删除访问权限绑定

控制台

您可以根据需要删除访问绑定。

gcloud

   gcloud access-context-manager cloud-bindings delete \
       --binding ACCESS_BINDING

其中:

  • ACCESS_BINDING 的格式为 organizations/ORG_ID/gcpUserAccessBindings/ACCESS_BINDING_NAME
  • ACCESS_BINDING_NAME 是创建访问绑定时为 name 标识符返回的唯一字符串。

API

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

  • ACCESS_BINDING_NAME 是创建访问绑定时为 name 标识符返回的唯一字符串。

HTTP 方法和网址:

DELETE https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME

如需发送请求,请选择以下方式之一:

curl

执行以下命令:

curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME"

PowerShell

执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method DELETE `
-Headers $headers `
-Uri "https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME" | Select-Object -Expand Content

您应该会收到一个成功的状态代码 (2xx) 和一个空响应。

常见问题解答

  • 新创建的访问权限绑定需要多长时间才能生效?

    最长可能需要 24 小时。

  • 如果我删除具有访问权限绑定的组,会发生什么情况?

    组和绑定会被删除,组中的所有用户都被允许访问。

  • 如果我删除访问绑定中使用的访问权限级别,会发生什么情况?

    始终无法满足访问权限级别,该绑定组所有用户的访问将被拒绝。

  • 如果一个用户属于多个具有访问权限绑定的组,会发生什么情况?

    该用户只需满足其中一个组的访问权限级别即可获得访问权限。

  • 不属于我的组织的用户会怎么样?

    不属于您组织的任何用户不受访问权限绑定的约束,即使您已将其添加到受情境感知限制约束的用户组也是如此。

后续步骤