Cloud Composer 1 | Cloud Composer 2
借助 VPC Service Controls,组织可以为 Google Cloud 资源定义边界,从而降低数据渗漏风险。
Cloud Composer 环境可以部署在服务边界内。通过使用 VPC Service Controls 配置您的环境,您可以在利用 Cloud Composer 的全代管式工作流编排功能的同时确保敏感数据的私密性。
VPC Service Controls 对 Cloud Composer 的支持意味着:
- 现在可以选择 Cloud Composer 作为 VPC Service Controls 边界内的安全服务。
- 将 Cloud Composer 使用的所有底层资源都配置为支持 VPC Service Controls 架构并遵循其规则。
使用 VPC Service Controls 部署 Cloud Composer 环境时,您可以:
- 降低数据泄露风险。
- 防止因访问权限控制配置错误而导致数据泄露。
- 降低恶意用户将数据复制到未经授权的 Google Cloud 资源或外部攻击者从互联网访问 Google Cloud 资源的风险。
VPC Service Controls 模式下的 Airflow 网络服务器
在 VPC Service Controls 模式下,对 Web 服务器的访问受边界保护,并且从边界外的访问被阻止。
如需允许从服务边界外进行访问,请适当配置访问权限级别。
创建服务边界
如需了解如何创建和配置服务边界,请参阅创建服务边界。确保选择 Cloud Composer 作为边界内保护的一项服务。
在边界中创建环境
在边界内部署 Cloud Composer 需要执行一些额外步骤。创建 Cloud Composer 环境时:
为您的项目启用 Access Context Manager API 和 Cloud Composer API。如需参考,请参阅启用 API。
请确保您的服务边界具有以下 VPC 可访问服务,否则您的环境可能无法创建:
- Cloud Composer API (composer.googleapis.com)
- Compute Engine API (compute.googleapis.com)
- Kubernetes Engine API (container.googleapis.com)
- Container Registry API (containerregistry.googleapis.com)
- Artifact Registry API (artifactregistry.googleapis.com)
- Cloud Storage API (storage.googleapis.com)
- Cloud SQL Admin API (sqladmin.googleapis.com)
- Cloud Build API (cloudbuild.googleapis.com)
- Cloud Logging API (logging.googleapis.com)
- Cloud Monitoring API (monitoring.googleapis.com)
- Cloud Pub/Sub API (pubsub.googleapis.com)
- Security Token Service API (sts.googleapis.com)
- Cloud Resource Manager API (cloudresourcemanager.googleapis.com)
- Service Directory API (servicedirectory.googleapis.com)
- Cloud Key Management Service API (cloudkms.googleapis.com)(如果您使用的是 Cloud KMS 或 CMEK 密钥)
- Secret Manager API (secretmanager.googleapis.com)(如果您使用 Secret Manager 作为 Secret 后端)
创建启用专用 IP 的新 Cloud Composer 环境。 请注意,必须在环境创建期间配置此设置。
默认情况下,只允许从安全边界内访问 Airflow 界面和 API。如果要使其可在安全边界外使用,请按照允许从边界外访问受保护的资源中所述适当配置访问权限级别。
使用 VPC Service Controls 配置现有环境
在以下情况下,您可以将环境所属的项目添加到边界:
安装 PyPI 软件包
在默认 VPC Service Controls 配置中,Cloud Composer 仅支持从可从 VPC 网络的专用 IP 地址空间访问的专用代码库安装 PyPI 软件包。此过程的推荐配置是设置私有 PyPI 代码库,使用组织使用的经过审核的软件包填充,然后配置 Cloud Composer 以从私有代码库安装 Python 依赖项。
您还可以从专用 IP 空间之外的代码库安装 PyPI 软件包。请按照以下步骤操作:
使用此设置时,确保您了解使用外部代码库的风险。请务必信任任何外部代码库的内容和完整性,因为这些连接可能会被用作泄露矢量。
配置与 Google API 和服务的连接
在 VPC Service Controls 配置中,如需控制网络流量,请通过 restricted.googleapis.com
配置对 Google API 和服务的访问权限。此网域会阻止访问不支持 VPC Service Controls 的 Google API 和服务。
Cloud Composer 环境使用以下网域:
*.googleapis.com
用于访问其他 Google 服务。*.composer.cloud.google.com
用于使您的环境的 Airflow Web 服务器可供访问。此规则必须先应用,然后才能创建环境。- 您也可以为特定区域创建规则。为此,请使用
REGION.composer.cloud.google.com
。将REGION
替换为环境所在的区域,例如us-central1
。
- 您也可以为特定区域创建规则。为此,请使用
(可选)
*.composer.googleusercontent.com
用于访问您环境的 Airflow Web 服务器。仅当您从 VPC 网络中运行的实例访问 Airflow Web 服务器时,才需要使用此规则,其他情况则不需要。此规则的一个常见场景是,您希望从 VPC 网络内调用 Airflow REST API。- 或者,您也可以为特定环境创建规则。为此,请使用
ENVIRONMENT_WEB_SERVER_NAME.composer.googleusercontent.com
。将ENVIRONMENT_WEB_SERVER_NAME
替换为环境的 Airflow 界面网址的唯一部分,例如bffe6ce6c4304c55acca0e57be23128c-dot-us-central1
。
- 或者,您也可以为特定环境创建规则。为此,请使用
*.pkg.dev
用于获取环境映像,例如在创建或更新环境时。无论 Cloud Composer 版本如何,
*.gcr.io
GKE 都需要连接到 Container Registry 网域。
配置与 restricted.googleapis.com
端点的连接:
网域 | DNS 名称 | CNAME 记录 | A 记录 |
---|---|---|---|
*.googleapis.com
|
googleapis.com. |
DNS 名称:*.googleapis.com. 资源记录类型: CNAME 规范名称: googleapis.com. |
资源记录类型:A IPv4 地址: 199.36.153.4 、199.36.153.5 、199.36.153.6 、199.36.153.7
|
*.composer.cloud.google.com
|
composer.cloud.google.com. |
DNS 名称:*.composer.cloud.google.com. 资源记录类型: CNAME 规范名称: composer.cloud.google.com. |
资源记录类型:A IPv4 地址: 199.36.153.4 、199.36.153.5 、199.36.153.6 、199.36.153.7
|
*.composer.googleusercontent.com
(可选,参见说明) |
composer.googleusercontent.com. |
DNS 名称:*.composer.googleusercontent.com. 资源记录类型: CNAME 规范名称: composer.googleusercontent.com. |
资源记录类型:A IPv4 地址: 199.36.153.4 、199.36.153.5 、199.36.153.6 、199.36.153.7
|
*.pkg.dev
|
pkg.dev. |
DNS 名称:*.pkg.dev. 资源记录类型: CNAME 规范名称: pkg.dev. |
资源记录类型:A IPv4 地址: 199.36.153.4 、199.36.153.5 、199.36.153.6 、199.36.153.7
|
*.gcr.io
|
gcr.io. |
DNS 名称:*.gcr.io. 资源记录类型: CNAME 规范名称: gcr.io. |
资源记录类型:A IPv4 地址: 199.36.153.4 、199.36.153.5 、199.36.153.6 、199.36.153.7
|
如需创建 DNS 规则,请执行以下操作:
创建新的 DNS 区域,并使用 DNS 名称作为此区域的 DNS 名称。
示例:
pkg.dev.
为 CNAME 记录添加一个记录集。
示例:
- DNS 名称:
*.pkg.dev.
- 资源记录类型:
CNAME
- 规范名称:
pkg.dev.
- DNS 名称:
为 A 记录添加记录集:
示例:
- 资源记录类型:
A
- IPv4 地址:
199.36.153.4
、199.36.153.5
、199.36.153.6
、199.36.153.7
- 资源记录类型:
如需了解详情,请参阅设置与 Google API 和服务的专用连接。
配置防火墙规则
如果您的项目具有非默认防火墙规则,例如覆盖隐式防火墙规则或修改默认网络中预先填充的规则的规则,请验证是否配置了以下防火墙规则。
例如,如果您的防火墙规则拒绝所有出站流量,则 Cloud Composer 可能无法创建环境。为避免出现问题,请定义遵循列表且优先级高于全局 deny
规则的精选 allow
规则。
将您的 VPC 网络配置为允许来自您的环境的流量:
说明 | 方向 | 操作 | 来源或目标 | 协议 | 端口 |
---|---|---|---|---|---|
DNS 按照针对 Cloud DNS 的 VPC Service Controls 支持中的说明进行配置 |
- | - | - | - | - |
Google API 和服务 | 出站 | 允许 | 您用于 Google API 和服务的 restricted.googleapis.com 的 IPv4 地址。 |
TCP | 443 |
环境的集群节点 | 出站 | 允许 | 环境的子网主要 IP 地址范围 | TCP、UDP | 全部 |
环境的集群 Pod | 出站 | 允许 | 环境子网中 Pod 的次要 IP 地址范围 | TCP、UDP | 全部 |
环境的集群控制平面 | 出站 | 允许 | GKE 控制平面 IP 地址范围 | TCP、UDP | 全部 |
(如果您的环境使用 Private Service Connect)连接子网 | 出站 | 允许 | Cloud Composer 连接子网范围 | TCP | 3306、3307 |
(如果您的环境使用 VPC 对等互连)租户网络 | 出站 | 允许 | Cloud Composer 租户网络 IP 地址范围 | TCP | 3306、3307 |
如需获取 IP 范围,请执行以下操作:
您可以在环境集群的集群页面上找到 Pod、Service 和控制平面地址范围:
在 Google Cloud 控制台中,前往环境页面。
在环境列表中,点击您的环境名称。环境详情页面会打开。
转到环境配置标签页。
点击查看集群详情链接。
您可以在环境配置标签页上查看环境的 Cloud Composer 租户网络 IP 地址范围。
您可以在环境配置标签页中查看环境的子网 ID 和 Cloud Composer 连接子网 ID。如需获取子网的 IP 地址范围,请转到 VPC 网络页面,然后点击该网络的名称以查看详细信息:
VPC Service Controls 日志
排查环境创建问题时,您可以分析 VPC Service Controls 生成的审核日志。
除了其他日志消息之外,您还可以检查日志,了解用于配置环境组件的 cloud-airflow-prod@system.gserviceaccount.com
和 service-PROJECT_ID@cloudcomposer-accounts.iam.gserviceaccount.com
服务帐号的相关信息。
Cloud Composer 服务使用 cloud-airflow-prod@system.gserviceaccount.com
服务帐号管理环境的租户项目组件。
service-PROJECT_ID@cloudcomposer-accounts.iam.gserviceaccount.com
服务帐号(也称为 Composer Service Agent Service Account
)管理服务项目和宿主项目中的环境组件。
限制
- 所有 VPC Service Controls 网络限制条件也适用于您的 Cloud Composer 环境。如需了解详情,请参阅 VPC Service Controls 文档。
- 当 Cloud Composer 在边界内运行时,对公共 PyPI 代码库的访问权限会受到限制。请参阅安装 Python 依赖项,了解如何在专用 IP 模式下安装 PyPI 模块。