配置组织权限限制

本页面介绍了出站代理配置的前提条件,以及如何获取组织 ID、添加组织权限限制标头,以及使用目标网址列表配置代理。

负责管理 Google Cloud 的 Google Cloud 管理员和配置出站流量代理的出站流量代理管理员必须共同配置组织权限限制。如需了解通过组织权限限制验证的合作伙伴解决方案,请参阅经过验证的合作伙伴解决方案

准备工作

如果您是出站流量代理管理员,则在配置出站流量代理以添加组织权限限制标头之前,必须先满足以下前提条件:

  • 如果贵组织的 Google Cloud 管理员和出站流量代理管理员角色不同,请确保 Google Cloud 管理员与出站流量代理管理员互动以配置出站流量代理。

  • 配置您的组织防火墙规则或配置受管设备,以确保组织中所有用户的出站流量都通过出站代理。

  • 确保组织中的出站流量代理具有以下功能:

    • 插入标头。向通过出站流量代理遍历的出站请求插入自定义 HTTP 标头。
    • TLS 检查。如果流向出站代理的流量经过加密,则出站代理必须先解密数据包、插入标头并重新加密数据包,然后才能将其发送到目标。
    • 过滤并插入标头。可选。支持以下一个或多个过滤条件,然后仅为与过滤条件匹配的请求添加标头:

      • 目标网址。出站流量代理可以匹配的一系列目标网址。
      • 设备 ID。出站代理可以匹配的设备 ID 列表。设备 ID 必须传播到出站代理。
      • User-ID。出站代理可以匹配的用户 ID 列表。用户 ID 必须传播到出站代理。

获取组织 ID

作为 Google Cloud 管理员,您必须获取 Google Cloud 组织 ID,以便将其添加到组织权限限制标头中。

如需查找您的组织资源 ID,请运行以下命令:

   gcloud organizations list

此命令会列出您所属的所有组织资源及其对应的组织资源 ID。

获取组织 ID 后,您可以添加组织权限限制标头,也可以与出站流量代理管理员互动以添加标头。

添加组织权限限制标头

作为出站流量代理管理员,如需为出站请求添加组织权限限制标头,请执行以下操作:

  • 创建标头。
  • 对标头进行编码。
  • 配置出站流量代理。

创建标头

按以下格式创建标头的 JSON 表示法:X-Goog-Allowed-Resources: HEADER_VALUE

HEADER_VALUE 包含已获授权的 Google Cloud 组织 ID 的列表(以英文逗号分隔)。然后,该值必须使用网络安全的 base64 编码进行编码。

HEADER_VALUE 具有以下 JSON 结构:

  {
  "resources": [string,..],
  "options": string
  }
  • resources:字符串列表。此列表中的每个字符串都必须引用一个 Google Cloud 组织 ID。此列表中的组织 ID 在评估期间会被视为已获授权的组织。
  • options。包含以下某个值的字符串:
    • "strict"。针对向受支持的 Google Cloud 服务发出的所有请求类型强制执行组织权限限制标头。
    • "cloudStorageReadAllowed"。允许对 Cloud Storage 发出读取请求,但针对受支持的 Google Cloud 服务的所有请求类型强制执行组织权限限制标头。此选项允许访问以下 Cloud Storage 读取操作:
      • storage.objects.get
      • storage.objects.list
      • storage.objects.getIamPolicy
      • storage.buckets.get
      • storage.buckets.list
      • storage.buckets.getIamPolicy

为了演示此选项,请设想一个示例,Alex 是 Example Organization 的管理员,Lee 是该组织的员工。假设有这样一个网站(如 altostrat.com),它将静态内容存储在公共 Cloud Storage 存储分区中,并且位于示例组织之外。如果 Alex 使用 strict 选项将 Lee 的访问权限限制为仅访问示例组织,Lee 将无权访问 altostrat.com(位于 altostrat.com 所拥有的公共 Cloud Storage 存储分区中)中的静态内容。此行为会影响 Lee 有效浏览网站的能力,并且任何使用公开 Cloud Storage 存储静态内容的网站都会遇到相同的行为。 为了让 Lee 能够查看 altostrat.com 中的静态内容,并将所有其他 Google Cloud 访问权限仅限于示例组织,Alex 使用了 cloudStorageReadAllowed 选项。

以下是有效组织权限限制标头的示例:

  {
  "resources": ["organizations/1234", "organizations/3456"],
  "options": "strict"
  }

对标头进行编码

以网络安全 base64 格式对组织 ID 进行编码。编码必须遵循 RFC 4648 第 5 节规范

例如,如果标头值的 JSON 表示法存储在 authorized_orgs.json 文件中,以便对文件进行编码,请运行以下 basenc 命令:

     $ cat authorized_orgs.json | basenc --base64url -w0
ewogInJlc291cmNlcyI6IFsib3JnYW5pemF0aW9ucy8xMjM0NTY3ODkiLCAib3JnYW5pemF0aW9ucy8xMDExMTIxMzE0Il0sCiAib3B0aW9ucyI6ICJzdHJpY3QiCn0K

以下是对组织 ID 进行编码后的标头示例:

// Encoded representation
X-Goog-Allowed-Resources: ewogInJlc291cmNlcyI6IFsib3JnYW5pemF0aW9ucy8xMjM0NTY3ODkiLCAib3JnYW5pemF0aW9ucy8xMDExMTIxMzE0Il0sCiAib3B0aW9ucyI6ICJzdHJpY3QiCn0K

// Plain-text representation (As HTTP disallows some characters, encode the organization ID)
// Plain-text representation is included here only for readability
X-Goog-Allowed-Resources: {"resources": ["organizations/1234", "organizations/3456"], "options": "strict"}

配置出站流量代理

如需将标头插入源自受管设备的请求,请配置出站流量代理。

如果组织中的 Google Cloud 用户明确提供 HTTP 标头,则出站流量代理会将用户提供的值替换为 Google Cloud 管理员提供的值。

为避免将此标头添加到 Google Cloud 外部的目标,请配置出站代理,以便仅向具有以下目标的请求添加组织权限限制标头:

  • *.google.com
  • *.googleapis.com
  • *.gcr.io
  • *.pkg.dev
  • *.cloudfunctions.net
  • *.run.app
  • *.tunnel.cloudproxy.app
  • *.datafusion.googleusercontent.com

如需了解因违反组织权限限制而发生的错误消息,请参阅错误消息

后续步骤