在入站和出站规则中配置 IAM 角色

本页介绍了如何在入站和出站规则中使用 Identity and Access Management (IAM) 角色,以允许访问受服务边界保护的资源。

VPC Service Controls 使用入站和出站规则来允许访问受服务边界保护的资源和客户端或来自它们的访问。(可选)您可以使用 IAM 角色限制入站和出站规则。在规则中指定 IAM 角色后,该规则仅允许与 IAM 角色所含权限相关联的操作。

准备工作

在入站规则中配置 IAM 角色

控制台

使用 Google Cloud 控制台更新服务边界的入站流量政策在创建边界时设置入站流量政策时,您可以将入站流量规则配置为使用 IAM 角色:

  1. 在 Google Cloud 控制台中创建边界或修改边界时,选择入站政策

  2. 入站流量规则窗格中,选择现有的入站流量规则,或点击添加入站流量规则

  3. 在入站政策的目标部分,从操作或 IAM 角色列表中选择选择 IAM 角色(预览版)

  4. 点击添加 IAM 角色

  5. 添加 IAM 角色窗格中,选择要允许的 IAM 角色。

    如需了解受支持的服务和角色,请参阅支持的产品

  6. 点击添加所选的 IAM 角色

  7. 点击完成

如需了解其他入站规则属性,请参阅入站规则参考

gcloud

您可以使用 JSON 文件或 YAML 文件配置入站规则以使用 IAM 角色。以下示例使用 YAML 格式:

- ingressFrom:
    identityType: ANY_IDENTITY | ANY_USER_ACCOUNT | ANY_SERVICE_ACCOUNT
    *OR*
    identities:
    - PRINCIPAL_IDENTIFIER
    sources:
    - resource: RESOURCE
      *OR*
    - accessLevel: ACCESS_LEVEL
  ingressTo:
    operations:
    - serviceName: SERVICE_NAME
      methodSelectors:
      - method: METHOD_NAME
    *OR*
    roles:
    - ROLE_NAME
    resources:
    - projects/PROJECT_NUMBER

ROLE_NAME 替换为用于定义规则中指定服务的访问权限范围的 IAM 角色。指定一个角色或角色组合,其中包含访问服务所需的所有权限。如需指定角色,请使用角色组件中提及的角色名称格式,但以下格式除外:projects/PROJECT_ID/roles/IDENTIFIER

如需了解受支持的服务和角色,请参阅支持的产品

如需了解其他入站规则属性,请参阅入站规则参考

更新现有入站规则以配置 IAM 角色后,您需要更新服务边界的规则政策:

gcloud access-context-manager perimeters update PERIMETER_ID --set-ingress-policies=RULE_POLICY.yaml

替换以下内容:

  • PERIMETER_ID:您要更新的服务边界的 ID。
  • RULE_POLICY:修改后的入站规则文件的路径。

如需了解详情,请参阅更新服务边界的入站和出站政策

在出站规则中配置 IAM 角色

控制台

使用 Google Cloud 控制台更新服务边界的出站流量政策在创建边界时设置出站流量政策时,您可以将出站流量规则配置为使用 IAM 角色:

  1. 在 Google Cloud 控制台中创建或修改边界时,选择出站流量政策

  2. 出站流量规则窗格中,选择现有出站流量规则或点击添加出站流量规则

  3. 在出站流量政策的目标部分,从操作或 IAM 角色列表中选择选择 IAM 角色(预览版)

  4. 点击添加 IAM 角色

  5. 添加 IAM 角色窗格中,选择要允许的 IAM 角色。

    如需了解受支持的服务和角色,请参阅支持的产品

  6. 点击添加所选的 IAM 角色

  7. 点击完成

如需了解其他出站规则属性,请参阅出站规则参考

gcloud

您可以使用 JSON 文件或 YAML 文件配置出站规则以使用 IAM 角色。以下示例使用 YAML 格式:

- egressTo:
    operations:
    - serviceName: SERVICE_NAME
      methodSelectors:
      - method: METHOD_NAME
    *OR*
    roles:
    - ROLE_NAME
    resources:
    - projects/PROJECT_NUMBER
  egressFrom:
    identityType: ANY_IDENTITY | ANY_USER_ACCOUNT | ANY_SERVICE_ACCOUNT
    *OR*
    identities:
    - PRINCIPAL_IDENTIFIER
    sources:
    - resource: RESOURCE
      *OR*
    - accessLevel: ACCESS_LEVEL
    sourceRestriction: RESTRICTION_STATUS

ROLE_NAME 替换为用于定义规则中指定服务的访问权限范围的 IAM 角色。指定一个角色或角色组合,其中包含访问服务所需的所有权限。如需指定角色,请使用角色组件中提及的角色名称格式,但以下格式除外:projects/PROJECT_ID/roles/IDENTIFIER

如需了解受支持的服务和角色,请参阅支持的产品

如需了解其他出站规则属性,请参阅出站规则参考

更新现有出站规则以配置 IAM 角色后,您需要更新服务边界的规则政策:

gcloud access-context-manager perimeters update PERIMETER_ID --set-egress-policies=RULE_POLICY.yaml

替换以下内容:

  • PERIMETER_ID:您要更新的服务边界的 ID。
  • RULE_POLICY:修改后的出站规则文件的路径。

如需了解详情,请参阅更新服务边界的入站和出站政策

支持的产品

您可以在入站和出站规则中使用以下服务的 IAM 角色 Google Cloud :

产品 限制
Artifact Registry
artifactregistry.googleapis.com
  • 没有已知限制。
BigQuery
bigquery.googleapis.com
  • 没有已知限制。
BigQuery Data Transfer Service
bigquerydatatransfer.googleapis.com
  • 没有已知限制。
Bigtable
bigtable.googleapis.com
  • 没有已知限制。
二进制授权
binaryauthorization.googleapis.com
  • 没有已知限制。
Cloud Composer
composer.googleapis.com
  • 没有已知限制。
Cloud Key Management Service
cloudkms.googleapis.com
Cloud Logging
logging.googleapis.com
  • 没有已知限制。
Cloud Monitoring
monitoring.googleapis.com
  • 没有已知限制。
Cloud Run
run.googleapis.com
  • 没有已知限制。
Cloud Run 函数
cloudfunctions.googleapis.com
  • 没有已知限制。
Cloud SQL
sqladmin.googleapis.com
  • 没有已知限制。
Cloud Storage
storage.googleapis.com
  • VPC Service Controls 支持在入站和出站规则中为 Cloud Storage 使用自定义角色,但不支持预定义的 Cloud Storage 角色。当您尝试在入站或出站规则中使用预定义的 Cloud Storage 角色时,VPC Service Controls 会返回 INVALID_ARGUMENT 错误。
  • 向受 VPC Service Controls 保护的项目执行对象插入或写入 API 请求时,您必须配置允许 storage.objects.deletestorage.objects.create 权限的入站和出站规则。
  • 在 Cloud Storage 中启用请求方付费功能后,VPC Service Controls 不支持在入站和出站规则中使用 Cloud Storage 角色。
Compute Engine
compute.googleapis.com
  • 没有已知限制。
Dataflow
dataflow.googleapis.com
  • 没有已知限制。
Dataproc
dataproc.googleapis.com
  • 没有已知限制。
Google Kubernetes Engine
container.googleapis.com
  • 没有已知限制。
Identity and Access Management
iam.googleapis.com
  • 没有已知限制。
Pub/Sub
pubsub.googleapis.com
  • 没有已知限制。
Resource Manager
cloudresourcemanager.googleapis.com
  • 没有已知限制。
Secret Manager
secretmanager.googleapis.com
  • 没有已知限制。
Spanner
spanner.googleapis.com
  • 没有已知限制。

如需查看您可以在入站和出站规则中使用的这些服务的预定义 IAM 角色列表,请参阅预定义角色

不过,这些服务中的部分 IAM 角色在入站和出站规则中部分受支持或不受支持,因为底层的部分或全部权限不受支持:

  • 如果在入站规则或出站规则中使用部分受支持的 IAM 角色,则该规则对特定于底层不受支持的权限的请求或操作无效。

    如需查看部分受支持的角色和相关的不受支持权限的列表,请参阅部分受支持的 IAM 角色

  • 在入站或出站规则中使用不受支持的 IAM 角色会导致规则无效。

    如需查看不受支持的角色的列表,请参阅不受支持的 IAM 角色

如果您想在入站和出站规则中使用自定义角色,请确保自定义角色仅包含受支持服务支持的权限。如需查看受支持服务的不受支持权限列表,请参阅部分受支持的 IAM 角色不受支持的 IAM 角色

您无法使用在项目级创建的自定义角色。换句话说,您不能使用格式为 projects/PROJECT_ID/roles/IDENTIFIER 的自定义角色。

部分受支持的 IAM 角色

下表列出了特定服务中部分受支持的 IAM 角色:

产品 部分支持的角色 不受支持的权限
Cloud SQL
  • roles/cloudsql.viewer
  • cloudsql.backupRuns.list
  • cloudaicompanion.*
  • roles/cloudsql.editor
  • cloudsql.backupRuns.list
  • cloudaicompanion.*
Cloud Storage
  • roles/storage.objectUser
  • storage.objects.move
Identity and Access Management
  • roles/iam.serviceAccountTokenCreator
  • iam.serviceAccounts.signBlob
  • iam.serviceAccounts.signJwt
Resource Manager
  • roles/resourcemanager.tagAdmin
  • resourcemanager.tagKeys.get
  • resourcemanager.tagValues.get
  • roles/resourcemanager.tagUser
  • resourcemanager.tagKeys.get
  • resourcemanager.tagValues.get
  • alloydb.*
  • certificatemanager.*
  • clouddeploy.*
  • roles/resourcemanager.tagViewer
  • resourcemanager.tagKeys.get
  • resourcemanager.tagValues.get
  • alloydb.*
  • certificatemanager.*
  • clouddeploy.*
Spanner
  • roles/spanner.databaseReaderWithDataBoost
  • spanner.databases.useDataBoost
其他部分受支持的角色
  • alloydb.*
  • backupdr.*
  • bigquerymigration.*
  • certificatemanager.*
  • cloudaicompanion.*
  • cloudasset.*
  • cloudbuild.*
  • clouddeploy.*
  • dataform.*
  • dataplex.*
  • dns.*
  • eventarc.*
  • networkconnectivity.*
  • networkmanagement.*
  • networksecurity.*
  • networkservices.*

不受支持的 IAM 角色

下表列出了特定服务不支持的 IAM 角色:

产品 不受支持的角色
Identity and Access Management
  • roles/iam.denyReviewer
  • roles/iam.oauthClientViewer
  • roles/iam.operationViewer
  • roles/iam.workforcePoolEditor
  • roles/iam.workforcePoolViewer
  • roles/iam.workloadIdentityPoolViewer
  • roles/iam.workforcePoolEditor
  • roles/iam.workforcePoolViewer

限制

  • 您无法使用基于角色的入站规则或出站规则来允许请求跨边界设置项目的 IAM 允许政策

  • 如果您在 Google Cloud 控制台中加载服务的修改页面时遇到问题,并且问题是由于 VPC Service Controls 限制造成的,那么在入站规则中使用 IAM 角色可能无法解决此问题。此限制不会影响这些服务的查看权限页面。

  • 如果请求涉及来自不同项目的多种资源类型,使用 IAM 角色的入站规则或出站规则可能无法正常运行。例如,当您启动从其他项目中的 Cloud Storage 读取文本的 Dataflow 模板时。

  • 如果您在边界的入站规则或出站规则中引用了自定义角色,然后删除了该角色,则该边界将无法修改。

后续步骤