配置资源位置限制

Cloud Composer 1 |Cloud Composer 2 |Cloud Composer 3

本页面介绍如何配置资源位置限制,以确保 Cloud Composer 存储的数据保留在您指定的位置。

位置限制的工作原理

Cloud Composer 的位置限制根据应用于创建 Cloud Composer 环境的项目的组织政策来确定。此政策在项目内部分配或从组织继承。

启用位置限制后,无法在该政策禁止的区域创建环境。如果某个区域列在拒绝列表中或未列在“允许”列表中,则您无法在此区域中创建环境。

如需创建环境,该政策必须允许整个区域,而不是该区域中的某个特定地区。例如,该政策必须允许 europe-west3 区域,以便在其中创建 Cloud Composer 环境。

Cloud Composer 会在以下位置检查位置限制:

  • 环境创建。
  • 如果操作期间创建了任何其他资源,则环境升级。
  • 环境更新(适用于未对 Cloud Composer 依赖项强制执行位置限制的旧环境)。

除了检查位置限制之外,Cloud Composer 还会执行以下操作:

  • 在区域 Artifact Registry 代码库中存储用户自定义的 Airflow 映像。
  • 如果政策明确禁止 US 多区域,则 Cloud Build 的使用会被停用。在这种情况下,用户自定义的 Airflow 映像是在 GKE 集群中构建的。

在资源位置限制下将 Python 依赖项安装到专用 IP 环境中

如果您为项目设置了资源位置限制,则不能将 Cloud Build 用于安装软件包。因此会停用直接通过公共互联网访问代码库。

如需在位置限制不允许 US 多区域时在专用 IP 环境中安装 Python 依赖项,请使用以下选项之一:

限制 Cloud Composer 日志的位置

如果您的 Cloud Composer 日志包含敏感数据,您可能需要将 Cloud Composer 日志重定向到区域 Cloud Storage 存储桶。为此,请使用日志接收器。将日志重定向到 Cloud Storage 存储桶后,您的日志不会发送到 Cloud Logging。

gcloud

  1. 创建新的 Cloud Storage 存储桶。

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION
    

    您需要将其中的:

    • LOCATION 替换为环境所在的区域。
    • BUCKET_NAME 替换为存储桶的名称。例如 composer-logs-us-central1-example-environment
  2. 创建新的日志接收器。

    gcloud logging sinks create \
    composer-log-sink-ENVIRONMENT_NAME \
    storage.googleapis.com/BUCKET_NAME \
    --log-filter "resource.type=cloud_composer_environment AND \
    resource.labels.environment_name=ENVIRONMENT_NAME AND \
    resource.labels.location=LOCATION"
    

    替换:

    • ENVIRONMENT_NAME 替换为环境的名称。
    • BUCKET_NAME 替换为存储桶的名称。
    • LOCATION 替换为环境所在的区域。
  3. 上一个命令的输出中包含服务账号编号。向此服务账号授予 Storage Object Creator 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:SA_NUMBER@gcp-sa-logging.iam.gserviceaccount.com" \
    --role='roles/storage.objectCreator' \
    --condition=None
    

    替换:

    • PROJECT_ID 替换为项目 ID
    • SA_NUMBER 替换为在上一步中通过 gcloud logging sinks create 命令提供的服务账号编号。
  4. 从 Monitoring 中排除环境的日志。

    gcloud logging sinks update _Default \
    --add-exclusion name=ENVIRONMENT_NAME-exclusion,filter=\
    "resource.type=cloud_composer_environment AND \
    resource.labels.environment_name=ENVIRONMENT_NAME AND \
    resource.labels.location=LOCATION"
    

    替换:

    • ENVIRONMENT_NAME 替换为环境的名称。
    • LOCATION 替换为环境所在的区域。

后续步骤