服务账号是工作负载或服务用于以编程方式使用资源和安全访问微服务的账号。它们是一种特殊的身份,由应用或工作负载(而非真人)使用。与用户账号类似,服务账号可以被授予权限和角色,但无法像真人用户一样登录。
服务账号非常适合用于管理 Google Distributed Cloud (GDC) 气隙基础架构,例如:
- 内部 Distributed Cloud 服务和工作负载,用于安全访问 Distributed Cloud 控制平面应用编程接口 (API)。例如,数据库服务与 Kubernetes API 交互以创建和删除数据库。
- Distributed Cloud 中的客户工作负载,用于访问 Distributed Cloud 服务并进行授权的应用编程接口 (API) 调用。例如,服务账号可以使用 Vertex AI Workbench 笔记本电脑通过 Speech-to-Text API 管理客户来转写音频文件。
- 要与分布式云联合的外部工作负载。例如,服务账号可以管理 Distributed Cloud 外部的一款应用,该应用可将文档数字化,但希望使用光学字符识别 (OCR) API 来替换其当前的 OCR 引擎。
- Distributed Cloud 服务或系统控制器安全地访问客户资源或用户集群。例如,服务账号可以管理身份验证和授权工作流,其中在管理员集群中运行的服务控制器需要在客户管理的用户集群中运行工作负载。
您可以使用 GDC 控制台或 gdcloud CLI 管理账号。借助 gdcloud CLI,服务身份功能基于全局 ProjectServiceAccount
API 构建。由于服务账号是全局配置的,因此它们可以在 gdcloud 宇宙中的所有可用区中运行。
准备工作
您只能在项目内创建服务账号。如需详细了解如何创建项目,请参阅创建项目。
创建服务身份
如需获得创建服务账号所需的权限,请让您的项目 IAM 管理员为您授予 Project IAM Admin (project-iam-admin
) 角色。
有权访问服务账号的用户可以访问项目中的所有服务账号。
如需在项目中创建服务账号,请使用 GDC 控制台或 gdcloud CLI。
控制台
- 登录 GDC 控制台。
- 在导航菜单中,选择身份和访问权限 > 服务身份。
- 点击 创建服务身份。 系统会打开服务身份详情页面。
- 在服务身份名称字段中,输入服务身份的名称。例如:
testserviceidentity
。 - 点击创建。
gdcloud
创建服务身份:
gdcloud iam service-accounts create NAME \
--project=PROJECT
替换以下值:
- NAME:
ProjectServiceAccount
的名称。该名称在项目命名空间中必须是唯一的。 - PROJECT:要在其中创建服务身份的项目。如果已设置
gdcloud init
,请省略--project
标志。
此命令会在管理 API 服务器上的项目命名空间中创建 ProjectServiceAccount
。
API
创建
ProjectServiceAccount
自定义资源 YAML 文件,例如my-project-sa.yaml
:apiVersion: resourcemanager.global.gdc.goog/v1 kind: ProjectServiceAccount metadata: name: NAME namespace: PROJECT spec: keys: - algorithm: ALGORITHM id: KEY_ID key: KEY validAfter: "START_TIME" validBefore: "EXPIRATION_TIME"
执行以下变量替换操作:
NAME
:ProjectServiceAccount
资源的名称。该名称在项目命名空间中必须是唯一的。PROJECT
:要在其中创建服务身份的项目。ALGORITHM
:密钥的算法。仅支持 ES256 密钥。KEY_ID
:密钥的唯一标识符。该 ID 用于确定要使用哪个密钥进行验证。KEY
:用于验证的 base64 编码公钥。START_TIME
:密钥生效的开始时间,例如2025-02-07T00:59:34Z
。EXPIRATION_TIME
:密钥的过期时间,例如2026-02-07T00:59:34Z
。
将
ProjectServiceAccount
自定义资源应用于全局 API 服务器:kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f my-project-sa.yaml
将
GLOBAL_API_SERVER_KUBECONFIG
变量替换为全局 API 服务器的 kubeconfig 文件的路径。
查看服务身份
如需查看项目中的服务账号列表,请使用 GDC 控制台或 gdcloud CLI。
控制台
- 登录 GDC 控制台。
- 选择一个项目。
- 在导航菜单中,依次点击身份和访问权限 > 服务身份,查看项目的服务账号列表。
gdcloud
列出项目中的服务账号:
gdcloud iam service-accounts list \
--project=PROJECT
为服务身份分配角色绑定
如需分配角色绑定,您必须拥有适当的权限。如需获得分配角色所需的权限,请让您的项目 IAM 管理员为您授予项目 IAM 管理员 (project-iam-admin
) 角色。
使用 GDC 控制台或 gdcloud CLI 分配角色绑定。
控制台
- 登录 GDC 控制台。
- 选择一个项目。
- 在导航菜单中,依次选择身份和访问权限 > 访问权限。
- 在成员列表中,点击 添加成员。 系统会显示用户和角色页面。
- 在成员类型列表中选择服务身份。
- 在服务身份列表中,选择要为其分配角色绑定的服务身份。
- 在角色列表中,选择要分配给服务身份的角色,例如 Backup Creator。
- 可选:如需添加其他角色,请点击 添加其他角色。 选择其他角色。
- 点击添加。
gdcloud
此命令会创建并命名项目角色绑定,以将指定角色与管理 API 服务器上的 ProjectServiceAccount
绑定:
gdcloud iam service-accounts add-iam-policy-binding \
--project=PROJECT \
--role=ROLE \
--role-namespace=ROLE_NAMESPACE \
--iam-account=NAME
替换以下值:
- PROJECT:要在其中创建角色绑定的项目。
如果已设置
gdcloud init
,则可以省略--project
标志。 - ROLE:要分配给
ProjectServiceAccount
的预定义角色。以Role/name
格式指定角色,其中角色是 Kubernetes 类型IAMRole
,名称是预定义角色的名称。例如,如需分配 Project Viewer 角色,请将角色设置为IAMRole/project-viewer
。 - ROLE_NAMESPACE:要与服务账号绑定的角色的命名空间。仅当您的宇宙包含多个可用区时,此操作才适用。
- NAME:要使用的服务身份的名称。
删除服务身份
如需删除项目中的服务账号,请使用 GDC 控制台或 gdcloud CLI。
控制台
- 登录 GDC 控制台。
- 在导航菜单中,依次选择身份和访问权限 > 服务身份。
- 选中要删除的服务身份对应的复选框。
- 点击删除。
- 系统会显示确认对话框。在请在下面输入以下内容进行确认字段中,输入
remove
。 - 点击删除。
gdcloud
运行以下命令可删除服务身份:
gdcloud iam service-accounts delete NAME \
--project=PROJECT
创建和添加密钥对
如需在项目中创建和添加密钥对,请使用 GDC 控制台或 gdcloud CLI。
控制台
- 登录 GDC 控制台。
- 在导航菜单中,依次选择身份和访问权限 > 服务身份。
- 点击要在密钥中添加的服务身份的名称。
- 点击 创建新密钥。
- 新密钥会显示在密钥列表中,并且系统会显示一个对话框,确认您已成功创建密钥。
gdcloud
此命令会创建应用默认凭据 JSON 文件以及公钥和私钥对:
gdcloud iam service-accounts keys create APPLICATION_DEFAULT_CREDENTIALS_FILENAME \
--project=PROJECT \
--iam-account=NAME \
--ca-cert-path=CA_CERTIFICATE_PATH
替换以下值:
- APPLICATION_DEFAULT_CREDENTIALS_FILENAME:JSON 文件的名称。
- PROJECT:选择要为其创建密钥的项目。
如果已设置
gdcloud init
,则可以省略--project
标志。 - NAME:要为其添加密钥的服务身份的名称。
- CA_CERTIFICATE_PATH:可选:用于验证身份验证端点的证书授权机构 (CA) 证书路径。 如果您未指定此路径,系统将使用系统 CA 证书。 您必须在系统 CA 证书中安装 CA。
Distributed Cloud 会将公钥添加到您用于验证私钥签名的 JSON Web 令牌 (JWT) 的密钥中。ProjectServiceAccount
私钥会写入应用默认凭据 JSON 文件。
以下示例展示了应用默认凭据 JSON 文件:
{
"type": "gdch_service_account",
"format_version": "1",
"project": "project_name",
"private_key_id": "abcdef1234567890",
"private_key": "-----BEGIN RSA PRIVATE KEY-----\nETC\n-----END RSA PRIVATE KEY-----\n",
"name": "service_identity_name",
"ca_cert_path": "service_identity_name",
"token_uri": "https://service-identity.<Domain>/authenticate"
}
此示例使用以下值:
project
:组织中的项目命名空间。private_key_id
:分配给密钥的 ID。private_key
:CLI 生成的私钥。name
:服务身份的名称。token_uri
:身份验证端点的地址。
列出服务账号的凭据
列出项目中的特定 ProjectServiceAccount
的公钥:
gdcloud iam service-accounts keys list \
--project=PROJECT \
--iam-account=NAME
删除凭据
如需删除公钥,请使用 GDC 控制台或 gdcloud CLI。
控制台
- 登录 GDC 控制台。
- 在导航菜单中,依次选择身份和访问权限 > 服务身份。
- 点击包含要删除的密钥的服务身份的名称。
- 点击 删除。
- 在确认对话框中点击删除。
gdcloud
从项目中的特定 ProjectServiceAccount
中移除具有相应密钥 ID 的公钥:
gdcloud iam service-accounts keys delete KEY_ID \
--project=PROJECT \
--iam-account=NAME