本文档适用于 Cloud Run for Anthos 的最新版本,此版本使用 Anthos 舰队和 Anthos Service Mesh。了解详情

过往版本已归档,但现有用户仍可使用相关文档。

使用 Workload Identity

了解如何使用 Workload Identity 对 Cloud Run for Anthos 服务进行身份验证,以访问 Google Cloud API,例如 Compute API、Storage 和数据库 API 或机器学习 API。

如需对 Cloud Run for Anthos 服务进行身份验证,您必须在集群中启用 Workload Identity 并配置权限,然后将 Kubernetes 服务帐号 (KSA) 绑定到 Google 服务帐号 (GSA),之后您便可以配置要对其使用 Workload Identity 的每项服务。

在集群上启用 Workload Identity

如果您不想使用 Google Cloud 服务帐号 JSON 文件,而是使用 Cloud Run for Anthos 来设置 Workload Identity,那么可以设置舰队 Workload Identity

使用 Workload Identity 启用所有指标

如需启用指标(例如向 Google Cloud 的运维套件报告请求数或请求延迟时间),您需要为 Cloud Monitoring 授予写入权限。例如,您可以向与 Cloud Run for Anthos 关联的 Google 服务帐号授予 Monitoring Metric Writer 角色,因为它包含写入监控数据所需的权限。

如需详细了解如何创建 Google 服务帐号,请参阅使用服务帐号

如需向 Google 服务帐号授予 Monitoring Metric Writer 角色,请执行以下操作:

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com \
--role=roles/monitoring.metricWriter

gcloud iam service-accounts add-iam-policy-binding \
    --role roles/iam.workloadIdentityUser \
    --member "serviceAccount:PROJECT_ID.svc.id.goog[knative-serving/controller]" \
    GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com

kubectl annotate serviceaccount \
    --namespace knative-serving controller \
    iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com

替换:

  • PROJECT_ID 替换为 Kubernetes 服务帐号和 Cloud Run for Anthos 服务所在集群的 Google Cloud 项目的 ID。
  • GSA_NAME@GSA_PROJECT_ID 替换为您 Google 服务帐号的名称和 Google Cloud 项目的 ID。您可以在您的组织中使用任何 Google 服务帐号。如需查看您的 Google 服务帐号,请参阅列出您的 Google 服务帐号

如需了解详情,请参阅授予、更改和撤消对资源的访问权限

绑定服务帐号

您需要为 Kubernetes 服务帐号 (KSA) 设置关系以充当 Google 服务帐号 (GSA)。作为您绑定的 KSA 运行的任何工作负载在访问 Google Cloud API 时,都会自动以 GSA 进行身份验证。您绑定的 KSA 必须存在于要对其使用 Workload Identity 的 Cloud Run for Anthos 服务的集群和命名空间中。GSA 可以属于与集群所在的 Cloud 项目不同的 Google Cloud 项目。

  1. 如果 Google 服务帐号不存在,请创建一个服务帐号;或者,跳转至下一步。您可以在组织中的任何 Google Cloud 项目中创建要用于 Cloud Run for Anthos 的 GSA,之后便可从运行 Cloud Run for Anthos 服务的 Google Cloud 项目中使用该 GSA。

    如需创建新的 GSA,请运行以下命令:

    gcloud iam service-accounts create GSA_NAME

    GSA_NAME 替换为新的 Google 服务帐号的名称。

    如需详细了解如何将 Google 服务帐号与 Cloud Run for Anthos 服务搭配使用,请参阅使用服务帐号

  2. 确保您的 GSA 具有所需的 IAM 角色。您可以使用以下命令授予其他角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --role "ROLE_NAME"
    

    替换:

    • PROJECT_ID 替换为您的 Google 服务帐号所在的 Google Cloud 项目的 ID。
    • GSA_NAME 替换为您的 Google 服务帐号的名称。
    • ROLE_NAME 替换为要分配给您的 GSA 的 IAM 角色,例如 roles/monitoring.metricWriter
  3. 如果 Kubernetes 服务帐号不存在,请在 Cloud Run for Anthos 服务所在的 Kubernetes 命名空间中创建一个;否则,请跳至下一步:

    kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
  4. 绑定 Kubernetes 服务帐号和 Google 服务帐号以创建 Workload Identity,然后将其部署到集群:

    1. 在这两者之间创建 IAM 政策绑定,以允许 KSA 模拟 GSA。

      gcloud iam service-accounts add-iam-policy-binding \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:PROJECT_ID.svc.id.goog[K8S_NAMESPACE/KSA_NAME]" \
      GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com

      替换:

      • PROJECT_ID 替换为 Kubernetes 服务帐号和 Cloud Run for Anthos 服务所在集群的 Google Cloud 项目的 ID。
      • K8S_NAMESPACE/KSA_NAME 替换为您的 Kubernetes 服务帐号的命名空间和名称。
      • GSA_NAME@GSA_PROJECT_ID 替换为您的 Google 服务帐号的名称和 Google Cloud 项目的 ID。您可以在您的组织中使用任何 Google 服务帐号。如需查看您的 Google 服务帐号,请参阅列出服务帐号
    2. 使用 GSA 的电子邮件地址,向 KSA 添加 iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID 注释。

      kubectl annotate serviceaccount \
      --namespace K8S_NAMESPACE KSA_NAME \
       iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com

      替换:

      • K8S_NAMESPACE/KSA_NAME 替换为您要为其创建绑定的 Kubernetes 服务帐号的命名空间和名称。
      • GSA_NAME@GSA_PROJECT_ID 替换为您要为其创建绑定的 Google 服务帐号的名称和 Google Cloud 项目的 ID。

部署新服务以使用 Workload Identity

部署将使用您创建的 Workload Identity 的新 Cloud Run for Anthos 服务。

控制台

  1. 在 Cloud Console 中转到 Cloud Run for Anthos:

    转到 Cloud Run for Anthos

  2. 如果您是要配置一个新服务来作为部署目标,请点击创建服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本

  3. 在“高级设置”下,点击容器

    映像

  4. 点击服务帐号下拉列表,然后选择所需的服务帐号。

  5. 点击下一步以转到下一部分。

  6. 配置此服务的触发方式部分,选择您想使用哪个连接来调用服务。

  7. 点击创建以将映像部署到 Cloud Run for Anthos,然后等待部署完成。

命令行

  • 对于现有服务,请运行带有以下参数的 gcloud run services update 命令来设置 Kubernetes 服务帐号:

    gcloud run services update SERVICE --service-account KSA_NAME
    

    替换:

    • SERVICE 替换为您的 Cloud Run for Anthos 服务的名称。
    • KSA_NAME 替换为您用于创建 Workload Identity 的 Kubernetes 服务帐号。
  • 对于新服务,请运行带有 --service-account 参数的 gcloud run deploy 命令来设置 Kubernetes 服务帐号:

    gcloud run deploy --image IMAGE_URL --service-account KSA_NAME
    

    替换:

    • IMAGE_URL 替换为对容器映像的引用,例如 gcr.io/cloudrun/hello
    • KSA_NAME 替换为您用于创建 Workload Identity 的 Kubernetes 服务帐号。

YAML

您可以使用 gcloud run services describe 命令和 --format=export 标志将现有服务的配置下载到的 YAML 文件中。然后,您可以使用 gcloud run services replace 命令修改该 YAML 文件并部署这些更改。您必须确保仅修改指定的属性。

  1. 将服务配置下载到本地工作区上名为 service.yaml 的文件中:

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE 替换为您的 Cloud Run for Anthos 服务的名称。

  2. 在本地文件中,更新 serviceAccountName: 属性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          serviceAccountName: KSA_NAME
    

    替换

    • SERVICE 替换为您的 Cloud Run for Anthos 服务的名称。
    • KSA_NAME 替换为您用于创建 Workload Identity 的 Kubernetes 服务帐号。
  3. 运行以下命令,将配置部署到 Cloud Run for Anthos 服务:

    gcloud run services replace service.yaml

迁移现有服务以使用 Workload Identity

如果您在现有集群上启用了 Workload Identity,则必须迁移集群上要使用 Workload Identity 的每项服务。了解如何迁移现有服务

后续步骤

了解如何管理访问权限(对服务的访问权限)。