服务账号和密钥

本文档介绍了在 Google Distributed Cloud 实现中创建集群所需的 Google Cloud 服务账号和密钥。

此处为完整说明。如需查看使用服务账号的简要说明,请参阅设置最小基础架构

准备工作

创建 Google Cloud 项目

服务账号概览

在创建管理员集群和用户集群之前,您需要具有以下服务账号:

  • 组件访问服务账号
  • 连接和注册服务账号
  • 日志记录和监控服务账号

根据您要启用的功能,您可能还需要有一些可选服务账号

了解服务账号和 Google Cloud 项目

创建服务账号时,请将其与一个 Google Cloud 项目相关联。此 Google Cloud 项目被称为该服务账号的父级项目。在本文档中,所有 gcloud iam service-accounts create 命令都使用占位符变量 PROJECT_ID,该变量是服务账号的父级项目的项目 ID。

您可以通过查看服务账号的电子邮件地址来确定服务账号的父项目。例如,以下是名为 logger 的服务账号的电子邮件地址。父项目为 alice-123

logger@alice-123.iam.gserviceaccount.com

向服务账号授予 Identity and Access Management (IAM) 角色时,您会将该角色授予给特定Google Cloud 项目上的该服务账号。这遵循向资源上的主账号授予角色的一般模式。

例如,您可以将 bigquery.dataEditor 角色授予给 bob-456 项目上的 logger@alice-123.iam.gserviceaccount.com 服务账号。在这种情况下,服务账号是主账号, Google Cloud 项目是资源。

您可以向不是服务账号父级项目的 Google Cloud 项目中的服务账号授予角色,也可以向同一项目中的服务账号授予角色。为了实现这种灵活性,本文档中针对组件访问服务账号、连接和注册服务账号以及日志记录和监控服务账号的 gcloud projects add-iam-policy-binding 命令都将使用占位符变量 FLEET_HOST_PROJECT_ID。这是舰队宿主项目的 ID。您在 gcloud projects add-iam-policy-binding 命令中指定为 FLEET_HOST_PROJECT_ID 的 ID 必须相同。

向服务账号授予角色的权限

您必须向每个服务账号授予相关Google Cloud 项目中的特定角色。例如,您的连接和注册服务账号必须被授予舰队宿主项目的 gkehub.editor 角色。

要授予 Google Cloud 项目的角色,您必须拥有项目的某些权限。如需了解详情,请参阅了解角色中的 roles/resourcemanager.projectIamAdmin

如果您拥有所需的权限,则可以自行授予这些角色。否则,必须由您所在组织中的其他人为您授予这些角色。

使用 gkeadm 自动创建服务账号

本页面介绍如何手动创建服务账号并向服务账号授予角色。除了手动执行这些步骤外,您还可以在创建管理员工作站时,让 gkeadm 命令行工具创建一些服务账号并授予角色。即使您允许 gkeadm 创建服务账号,也必须手动创建组件访问服务账号并授予所需的 IAM 角色,详情请参见下一部分。如需详细了解 gkeadm 可以创建的服务账号,请参阅创建管理员工作站

组件访问服务账号

Google Distributed Cloud 使用此服务账号代表您从 Artifact Registry 下载集群组件。

  1. 创建组件访问服务账号:

    gcloud iam service-accounts create component-access-sa \
        --display-name "Component Access Service Account" \
        --project PROJECT_ID
    

    PROJECT_ID 替换为要作为服务账号父级项目的 Google Cloud 项目的 ID。

  2. 获取新创建的组件访问服务账号的电子邮件地址:

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. 为组件访问服务账号创建 JSON 密钥:

    gcloud iam service-accounts keys create component-access-key.json \
    --iam-account COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL
    

    COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL 替换为您的组件访问服务账号的电子邮件地址。

向组件访问服务账号授予角色

组件访问服务账号必须被授予项目的以下 IAM 角色。这些角色是必需的,以便 Google Distributed Cloud 可以进行预检检查:

  • serviceusage.serviceUsageViewer
  • iam.roleViewer
  • iam.serviceAccountViewer
  • compute.viewer

要授予这些角色,请执行以下操作:

gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/serviceusage.serviceUsageViewer"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/iam.roleViewer"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/iam.serviceAccountViewer"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/compute.viewer"

FLEET_HOST_PROJECT_ID 替换为您的舰队宿主项目的 ID。此项目可以是在其中创建了服务账号的项目,也可以是其他项目。您在此处指定的项目 ID 必须与您向连接和注册服务账号以及日志记录和监控服务账号授予 IAM 角色时指定的 ID 相同。

连接和注册服务账号

Google Distributed Cloud 使用此服务账号将集群注册到舰队

  1. 创建连接和注册服务账号:

    gcloud iam service-accounts create connect-register-sa \
        --display-name "Connect-register Service Account" \
        --project PROJECT_ID
    

    PROJECT_ID 替换为要作为连接和注册服务账号父级项目的Google Cloud 项目的 ID。

  2. 获取新创建的连接和注册服务账号的电子邮件地址:

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. 如需为您的连接和注册服务账号创建 JSON 密钥,请输入以下命令:

    gcloud iam service-accounts keys create connect-register-key.json \
    --iam-account CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL
    

    CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL 替换为您的连接和注册服务账号的电子邮件地址。

  4. gkehub.editor 角色授予您的连接和注册服务账号:

    gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
        --member "serviceAccount:CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL" \
        --role "roles/gkehub.editor"
    

    您在此处指定的项目 ID 必须与您向组件访问服务账号以及日志记录和监控服务账号授予 IAM 角色时指定的 ID 相同。

日志记录和监控服务账号

Google Distributed Cloud 使用此服务账号将日志和指标从集群导出到 Cloud LoggingCloud Monitoring

  1. 创建日志记录和监控服务账号:

    gcloud iam service-accounts create logging-monitoring-sa \
        --display-name "Logging-monitoring Service Account" \
        --project=PROJECT_ID
    

    PROJECT_ID 替换为要作为日志记录和监控服务账号父级项目的Google Cloud 项目的 ID。

  2. 获取新创建的日志记录和监控服务账号的电子邮件地址:

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. 如需为日志记录和监控服务账号创建 JSON 密钥,请输入以下命令:

    gcloud iam service-accounts keys create logging-monitoring-key.json \
        --iam-account LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL
    

    LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL 替换为日志记录和监控服务账号的电子邮件地址。

向日志记录和监控服务账号授予角色

您的日志记录和监控服务账号必须获得项目上的以下角色:

  • opsconfigmonitoring.resourceMetadata.writer
  • logging.logWriter
  • monitoring.metricWriter
  • monitoring.dashboardEditor
  • kubernetesmetadata.publisher

如需向日志记录监控服务账号授予所需角色,请输入以下命令:

gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/opsconfigmonitoring.resourceMetadata.writer"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/logging.logWriter"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/monitoring.metricWriter"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/monitoring.dashboardEditor"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/kubernetesmetadata.publisher"

您在此处指定的项目 ID 必须与您向组件访问服务账号以及连接和注册服务账号授予 IAM 角色时指定的 ID 相同。

可选服务账号

本部分介绍的服务账号为可选账号。

审核日志记录服务账号

Google Distributed Cloud 使用此服务账号将集群中的 Kubernetes 审核日志发送到 Cloud Audit Logs

如果您计划创建启用了高级集群功能的集群(这是设置拓扑网域所必需的),请使用日志记录和监控服务账号及密钥进行审核日志记录,而无需创建其他服务账号。

  1. 创建审核日志记录服务账号:

    gcloud iam service-accounts create audit-logging-sa \
        --project PROJECT_ID
    

    PROJECT_ID 替换为要作为审核日志记录服务账号父级项目的Google Cloud 项目的 ID。

  2. 获取新创建的审核日志记录服务账号的电子邮件地址:

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. 为审核日志记录服务账号创建 JSON 密钥:

    gcloud iam service-accounts keys create audit-logging-key.json \
    --iam-account AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL
    

    AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL 替换为审核日志记录服务账号的电子邮件地址。

您无需向审核日志记录服务账号授予任何角色。

Binary Authorization 服务账号

Google Distributed Cloud 使用此服务账号调用 Binary Authorization API

如需了解如何创建 Binary Authorization 服务账号,请参阅 GKE On-Prem 中的 Binary Authorization

后续步骤

创建管理员工作站