本页面介绍如何上传服务账号的公钥。上传公钥后,您可以使用密钥对中的私钥通过服务账号进行身份验证。
须知事项
Enable the IAM API.
了解服务账号凭据。
所需的角色
如需获得上传服务账号密钥所需的权限,请让管理员向您授予项目或者您要管理其密钥的服务账号的 Service Account Key Admin (roles/iam.serviceAccountKeyAdmin
) IAM 角色。
如需详细了解如何授予角色,请参阅管理访问权限。
如需了解详情,请参阅服务账号角色。
IAM 基本角色还包含管理服务账号密钥的权限。您不应在生产环境中授予基本角色,但可以在开发或测试环境中授予这些角色。
上传服务账号的公钥
您可以上传用户管理的密钥对的公钥部分,以将其与服务账号相关联。上传公钥后,您可以将密钥对中的私钥用作服务账号密钥。
您上传的密钥必须是封装在 X.509 v3 证书中并以 base64 编码的 RSA 公钥。您可以使用 OpenSSL 等工具生成此格式的密钥和证书。
请勿在 X.509 证书中包含任何私密信息。具体来说,请使用通用主题,并且不要添加任何可选特性。证书会公开显示;证书中的任何私密信息对检索证书的所有人都可见。如需了解详情,请参阅避免在上传的 X.509 证书中披露机密信息。
例如,以下命令会生成 2048 位 RSA 密钥对,并将公钥封装在有效期为 365 天的自签名证书中:
openssl req -x509 -nodes -newkey rsa:2048 -days 365 \
-keyout /path/to/private_key.pem \
-out /path/to/public_key.pem \
-subj "/CN=unused"
然后,您可以上传 public_key.pem
文件作为服务账号的公钥。
控制台
- 在 Google Cloud 控制台中,转到服务账号页面。
其余步骤将自动显示在 Google Cloud 控制台中。
- 选择一个项目。
- 在服务账号页面上,点击要为其上传密钥的服务账号的电子邮件地址。
- 点击密钥标签页。
- 点击添加密钥下拉菜单,然后选择上传现有密钥。
- 点击浏览,然后找到并选择您的公钥文件。或者,您也可以复制公钥文件的内容,并将其粘贴到粘贴现有密钥框中。
- 点击上传。
gcloud
执行 gcloud iam service-accounts keys upload
命令来上传用于签署服务账号密钥的公钥。
替换以下值:
KEY_FILE
:包含要上传的密钥数据的文件的路径,例如./public_key.pem
。SA_NAME
:要为其上传密钥的服务账号的名称。PROJECT_ID
:您的 Google Cloud 项目 ID。
gcloud iam service-accounts keys upload KEY_FILE \ --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com
输出包含所上传密钥的唯一标识符:
Name: projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0
如需确定该命令是否成功运行,请执行 gcloud iam service-accounts keys list
命令:
gcloud iam service-accounts keys list \ --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com
输出将包含创建密钥后返回的相同唯一标识符:
KEY_ID | CREATED_AT | EXPIRES_AT | 已停用 |
c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0 | 2019-06-26T21:01:42Z | 9999-12-31T23:59:59Z |
REST
projects.serviceAccounts.keys.upload
方法可上传用户管理的密钥对中的公钥,并将此公钥添加到服务账号。
在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID
:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如my-project
。SA_NAME
:要与密钥关联的服务账号的名称。PUBLIC_KEY_DATA
:密钥对的公钥数据。必须是封装在 X.509 v3 证书中的 RSA 公钥。使用 base64 对公钥数据进行编码,包括第一行-----BEGIN CERTIFICATE-----
和最后一行-----END CERTIFICATE-----
。
HTTP 方法和网址:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys:upload
请求 JSON 正文:
{ "publicKeyData": "PUBLIC_KEY_DATA" }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0", "validAfterTime": "2020-05-17T19:31:19Z", "validBeforeTime": "2021-05-17T19:31:19Z", "keyAlgorithm": "KEY_ALG_RSA_2048", "keyOrigin": "USER_PROVIDED", "keyType": "USER_MANAGED" }
停用公钥上传功能
如需停用为项目上传密钥的功能,请参阅限制服务账号密钥上传。
后续步骤
- 了解如何创建和删除服务账号密钥。
- 了解如何列出和获取服务账号密钥。
- 了解使用服务账号密钥进行身份验证的替代方案。
- 了解如何使用服务账号密钥进行服务账号身份验证。
- 了解管理服务账号密钥的最佳实践。