基于 Dataproc 服务账号的安全多租户

借助基于 Dataproc 服务账号的安全多租户(以下称为“安全多租户”),您可以与多个用户共享集群,并在创建集群时将一组用户映射到服务账户。借助安全的多租户,用户可以将交互式工作负载提交到具有隔离用户身份的集群。

当用户将作业提交到集群时,作业将:

  • 以具有特定 Kerberos 主账号的特定操作系统用户身份运行

  • 使用映射的服务账号凭据访问 Google Cloud 资源

注意事项和限制

创建启用了安全多租户的集群时:

  • 您只能通过 Dataproc Jobs API 提交作业。

  • 集群仅适用于具有映射服务账号的用户。例如,未映射的用户无法在集群上运行作业。

  • 服务账号只能映射到 Google 用户,不能映射到 Google 群组。

  • Dataproc 组件网关未启用。

  • 对集群和 Compute Engine 功能的直接 SSH 访问(例如,在集群虚拟机上运行启动脚本的功能)都会被屏蔽。此外,作业无法使用 sudo 权限运行。

  • 在该集群上启用并配置 Kerberos,可实现集群内通信。不支持通过 Kerberos 对最终用户进行身份验证。

  • 不支持 Dataproc 工作流

创建安全的多租户集群

要创建 Dataproc 安全的多租户集群,请使用 --secure-multi-tenancy-user-mapping 标志,用于指定用户到服务账号的映射列表。

示例

以下命令会创建一个用户(包含用户)集群,其会将 bob@my-company.com 映射到服务账号 service-account-for-bob@iam.gserviceaccount.com 并将用户 alice@my-company.com 映射到服务账号 service-account-for-alice@iam.gserviceaccount.com 中。

gcloud dataproc clusters create my-cluster \
    --secure-multi-tenancy-user-mapping="bob@my-company.com:service-account-for-bob@iam.gserviceaccount.com,alice@my-company.com:service-account-for-alice@iam.gserviceaccount.com" \
    --scopes=https://www.googleapis.com/auth/iam \
    --service-account=cluster-service-account@iam.gserviceaccount.com \
    --region=region \
    other args ...

或者,您也可以将用户与服务账号的映射列表存储在本地或 Cloud Storage YAML 或 JSON 文件中。使用 --identity-config-file 标志,用于指定文件位置。

身份配置文件示例:

user_service_account_mapping:
  bob@my-company.com: service-account-for-bob@iam.gserviceaccount.com
  alice@my-company.com: service-account-for-alice@iam.gserviceaccount.com

使用 --identity-config-file 标志创建集群的示例命令:

gcloud dataproc clusters create my-cluster \
    --identity-config-file=local or "gs://bucket" /path/to/identity-config-file \
    --scopes=https://www.googleapis.com/auth/iam \
    --service-account=cluster-service-account@iam.gserviceaccount.com \
    --region=region \
    other args ...

注意:

  • 如上述命令所示,集群 --scopes 必须包含至少 https://www.googleapis.com/auth/iam,需要集群服务账号才能执行模拟。

  • 集群服务账号必须具有模拟 服务账号(请参阅 服务账号权限)。

  • 建议:为不同的集群使用不同的集群服务账号,以使每个集群服务账号只能模拟有限的一组已映射的用户服务账号。