入站规则和出站规则

本页面介绍 VPC Service Controls 的入站和出站规则。VPC Service Controls 使用入站和出站规则来允许访问受服务边界保护的资源和客户端或来自它们的访问。

入站出站规则块指定去往和来自不同身份和资源的允许访问。入站和出站规则可以替换和简化之前需要一个或多个边界网桥的使用场景。

如需了解如何将入站和出站政策应用于服务边界,请参阅配置入站和出站政策

如需查看安全数据交换使用场景和示例的列表,请参阅使用入站和出站规则实现安全数据交换

如需查看情境感知访问权限使用场景和示例的列表,请参阅使用入站规则实现情境感知访问权限

入站和出站规则的优势

  1. 通过入站和出站规则,您可以使用 Google Cloud 服务 API 以专用方式在组织内部和组织之间高效交换数据。
  2. 通过入站和出站规则,您可以根据 API 请求的上下文授予对边界内 Google Cloud 资源的访问权限:
    1. 限制指定来源网络、IP 地址或设备时可使用的身份类型或身份。
    2. 限制指定来源网络、IP 地址、设备和身份类型时可访问的 Google Cloud API 和方法。
  3. 通过限制用于执行数据交换的确切服务、方法、Google Cloud 项目和身份,最大限度地降低渗漏风险。
  4. 授予对由您管理的外部数据集和映像的只读权限。
  5. 确保低权限细分中的客户端无权访问高权限细分中的 Google Cloud 资源;同时授予相反方向的访问权限。
  6. 简化之前需要一个或多个边界网桥的配置。

入站流量和出站流量的定义

  • 入站流量:指服务边界外 API 客户端对服务边界内资源的访问。例如:

    • 服务边界外的 Cloud Storage 客户端对服务边界内的 Cloud Storage 资源调用 Cloud Storage 读取、写入或复制操作。
  • 出站流量:指涉及服务边界内 API 客户端或资源以及服务边界外资源的任何访问。示例:

    • 服务边界内的 Compute Engine 客户端调用 Compute Engine create 操作,其中映像资源位于边界外。
    • 边界内或边界外的 Cloud Storage 客户端调用 copy 命令,其中一个存储分区在边界内,另一个存储分区在边界外。

政策模型

入站或出站规则由 fromto 块组成,其中:

  • from 引用 API 客户端的特性。
  • to 引用 Google Cloud 服务和资源的特性。

一个服务边界可以关联多个入站和出站规则。根据以下语义允许或拒绝 Google Cloud 服务调用:

  • 如果满足必要的入站规则的条件,则允许边界外客户端向边界内 Google Cloud 资源发送的请求。
  • 如果满足必要的出站规则的条件,则允许边界内客户端向边界外 Google Cloud 资源发送的请求。
  • 如果客户端满足入站规则(如果客户端不在边界内),并且外部资源满足出站规则,则允许调用边界内 Google Cloud 资源和边界外 Google Cloud 资源的 API 调用。

入站规则参考

您可以使用 Google Cloud Console、JSON 文件或 YAML 文件来配置入站规则。以下示例使用 .yaml 格式:

- ingressFrom:
    identityType: ANY_IDENTITY
    *OR*
    identities:
    - serviceAccount:service-account
    sources:
    - resource: projects/project
      *OR*
    - accessLevel: access-level
  ingressTo:
    operations:
    - serviceName: service
      methodSelectors:
      - method: method
      *OR*
      - permission: permission
    resources:
    - projects/project
特性参考文档
  • - ingressFrom: -(必需)开始 from 块,其中列出允许的边界外来源和身份。

  • identityType: -(必须使用此特性或 identities 特性)此特性定义可以从指定的 sources(网络来源)使用的身份类型。可接受的值:ANY_IDENTITYANY_USER_ACCOUNTANY_SERVICE_ACCOUNTANY_IDENTITY 允许所有身份。ANY_USER_ACCOUNT 允许所有真人用户。ANY_SERVICE_ACCOUNT 允许所有服务帐号。

  • identities: -(必须使用此特性或 identityType 特性)此特性列出可以访问边界内资源的服务账号。

  • serviceAccount - 被授予边界内资源访问权限的服务帐号。

  • sources: -(必需)此特性指的是网络来源列表。列表中的每个值为访问权限级别或 VPC 网络项目。

  • - resource: -(必须使用此特性或 accessLevel 特性)指定被授予访问权限的边界外项目。向项目的 VPC 网络授予访问权限。

  • - accessLevel: -(必须使用此特性或 resource 特性)指定被授予访问权限的边界外访问权限级别。

  • ingressTo: -(必需)开始 to 块,其中列出允许对指定的边界内 Google Cloud 资源执行的服务操作。

  • operations: -(必需)标记满足 from 块条件的客户端允许访问的可访问服务和操作/方法列表的开头。

  • - serviceName: -(必需)此字段可以是有效的服务名称,也可以设置为 \"*\" 以允许访问所有服务。例如,bigquery.googleapis.com 是有效的 serviceName。如需查看可用服务的列表,请参阅支持的产品

  • methodSelectors: -(必需)满足 from 块条件的客户端允许访问的方法列表的开头。如需查看服务的受限方法和权限列表,请参阅支持的服务方法限制

  • - method: -(必须使用此特性或 permission 特性)此字段必须是有效的服务方法,也可以设置为 \"*\" 以允许访问指定服务的所有方法。

  • - permission: -(必须使用此特性或 method 特性)此字段必须是有效的服务权限。将允许需要此权限的操作访问边界内的资源。

  • resources: -(必需)此特性指定服务边界外的客户端可以访问的服务边界内 Google Cloud 资源的列表。可以将此字段设置为 \"*\",以允许访问边界内的任何 Google Cloud 资源。

配置入站政策文件后,请参阅更新入站和出站政策,了解有关将入站政策文件应用于服务边界的说明。

出站规则参考

您可以使用 Google Cloud Console、JSON 文件或 YAML 文件来配置出站规则。以下示例使用 .yaml 格式:

- egressTo:
    operations:
    - serviceName:service-name
      methodSelectors:
      - method: method
      *OR*
      - permission: permission
    resources:
    - projects/project
  egressFrom:
    identityType: ANY_IDENTITY
    *OR*
    identities:
    - serviceAccount:service-account
  • - egressTo: -(必需)开始 to 块,其中列出允许对指定的边界外项目中的 Google Cloud 资源执行的服务操作。

  • operations: -(必需)标记满足 from 块条件的客户端允许访问的可访问服务和操作/方法列表的开头。

  • - serviceName: -(必需)此字段可以是有效的服务名称,也可以设置为 \"*\" 以允许访问所有服务。如需查看可用服务的列表,请参阅支持的产品

  • methodSelectors: -(必需)满足 from 块条件的客户端允许访问的方法列表的开头。如需查看服务的受限方法和权限列表,请参阅支持的服务方法限制

  • - method: -(必须使用此特性或 permission 特性)。此字段可以是有效的服务方法,也可以设置为 \"*\" 以允许访问指定服务的所有方法。

  • - permission: -(必须使用此特性或 method 特性)此字段必须是有效的服务权限。将允许需要此权限的操作访问边界外的指定资源。

  • resources: -(必需)此特性是边界内客户端可以访问的 Google Cloud 资源列表,这些资源由其项目指定。此字段可设置为 \"*\",以允许对任何 Google Cloud 资源的出站访问。

  • egressFrom: -(必需)开始列出允许对指定的边界外项目中的 Google Cloud 资源执行的服务操作的块。

  • identityType: -(必须使用此特性或 identities 特性)此特性定义可用于访问边界外的指定资源的身份类型。可接受的值:ANY_IDENTITYANY_USER_ACCOUNTANY_SERVICE_ACCOUNTANY_IDENTITY 允许所有身份。ANY_USER_ACCOUNT 允许所有真人用户。ANY_SERVICE_ACCOUNT 允许所有服务帐号。

  • identities: -(必须使用此特性或 identityType 特性)此特性会启动可访问边界外的指定资源的服务帐号列表。

  • serviceAccount - 可以访问边界外的指定资源的服务帐号。

配置出站政策文件后,请参阅更新入站和出站政策,了解有关将出站政策文件应用于服务边界的说明。

使用试运行模式测试入站/出站政策

如果您不想授予对某个服务的所有方法的访问权限,有时可能很难确定要允许的方法的精确列表。之所以发生这种情况,是因为服务的某个给定方法可能会导致对另一个 Google Cloud 服务调用另一个方法(例如,BigQuery 从 Cloud Storage 存储分区加载表以运行查询)。

为了确定一组正确的允许方法,您可以使用 VPC Service Controls 试运行模式。为此,首先在试运行模式下启用边界(无入站或出站政策),并从审核日志收集调用的方法列表。然后,在试运行模式下逐渐向入站/出站政策添加这些方法,直到所有违规都停止。此时,可以将配置从试运行模式转移到实施模式。

限制

使用入站和出站规则时,您受到以下配额的限制:

每个服务边界的限制 每项访问权限政策的限制
入站政策 100 10000
出站政策 100 10000
入站来源1 30 500
身份 2000
API 操作 proto 消息 可以在一条 AccessPolicy proto 消息中指定 1000 条 ApiOperation proto 消息

1 sources 中的访问权限级别引用计入服务边界中定义的访问权限级别引用总数。sources 中的资源计入访问权限政策中允许的服务边界总数。

不支持的特性

目前,入站和出站规则不支持以下功能:

  1. 按标签(而非项目)确定 Google Cloud 资源。
  2. 在入站/出站 from 规则的 identities 字段中指定组。
  3. 并非所有服务都支持每种方法的入站/出站规则。 请参阅支持的服务方法限制