本页面介绍了如何使用 Google Cloud 控制台、Google Cloud CLI、Identity and Access Management API 或某个 Google Cloud 客户端库来列出和获取服务账号密钥。
准备工作
启用 IAM API。
设置身份验证。
选择标签页以了解您打算如何使用本页面上的示例:
控制台
当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。
gcloud
您可以从以下任一开发环境使用本页面上的 gcloud CLI 示例:
C++
如需从本地开发环境使用本页面上的 C++ 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。
- 安装 Google Cloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
-
为您的 Google 账号创建本地身份验证凭据:
gcloud auth application-default login
如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证。
C#
如需从本地开发环境使用本页面上的 .NET 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。
- 安装 Google Cloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
-
为您的 Google 账号创建本地身份验证凭据:
gcloud auth application-default login
如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证。
Go
如需从本地开发环境使用本页面上的 Go 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。
- 安装 Google Cloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
-
为您的 Google 账号创建本地身份验证凭据:
gcloud auth application-default login
如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证。
Java
如需从本地开发环境使用本页面上的 Java 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。
- 安装 Google Cloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
-
为您的 Google 账号创建本地身份验证凭据:
gcloud auth application-default login
如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证。
Python
如需从本地开发环境使用本页面上的 Python 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。
- 安装 Google Cloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
-
为您的 Google 账号创建本地身份验证凭据:
gcloud auth application-default login
如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
了解服务账号凭据。
所需的角色
如需获得列出和获取服务账号密钥所需的权限,请让管理员向您授予要管理密钥的项目或服务账号的 View Service Accounts (roles/iam.serviceAccountViewer
) IAM 角色。
如需详细了解如何授予角色,请参阅管理访问权限。
如需了解详情,请参阅服务账号角色。
IAM 基本角色还包含管理服务账号密钥的权限。您不应在生产环境中授予基本角色,但可以在开发或测试环境中授予这些角色。
列出服务账号密钥
您可以使用 Google Cloud 控制台、gcloud CLI、serviceAccount.keys.list()
方法或某个客户端库列出服务账号的密钥。
serviceAccount.keys.list()
方法通常用于审核服务账号和密钥,或者构建用于管理服务账号的自定义工具。
要了解您的密钥属于哪个项目,您可以以 JSON 文件的格式下载该密钥并查看该文件。
您可能会发现有些列出的密钥并不是由您创建的。这些密钥由 Google 创建,由 Service Account Credentials API 使用。如需了解详情,请参阅 Google 管理的密钥对。
控制台
- 在 Google Cloud 控制台中,转到服务账号页面。
其余步骤将自动显示在 Google Cloud 控制台中。
- 选择一个项目。
- 在服务账号页面上,点击要列出其密钥的服务账号的电子邮件地址。
- 点击密钥。 Google Cloud 控制台会显示该服务账号的密钥列表。
gcloud
执行 gcloud iam service-accounts keys list
命令来列出服务账号密钥。
替换以下值:
SA_NAME
:要为其列出密钥的服务账号的名称。PROJECT_ID
:您的 Google Cloud 项目 ID。
gcloud iam service-accounts keys list \ --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com
输出如下:
KEY_ID | CREATED_AT | EXPIRES_AT | 已停用 |
8e6e3936d7024646f8ceb39792006c07f4a9760c | 2021-01-01T21:01:42Z | 9999-12-31T23:59:59Z | |
937c98f870f5c8db970af527aa3c12fd88b1c20a | 2021-01-01T20:55:40Z | 9999-12-31T23:59:59Z | True |
C++
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM C++ API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
C#
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM C# API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Go
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Go API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Java
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Java API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Python
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Python API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
REST
projects.serviceAccounts.keys.list
方法可列出服务账号的所有服务账号密钥。
在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID
:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如my-project
。SA_NAME
:您要列出其密钥的服务账号的名称。KEY_TYPES
:可选。您想要在响应中包含的密钥类型的英文逗号分隔列表。密钥类型会指出密钥是由用户管理 (USER_MANAGED
) 还是由系统管理 (SYSTEM_MANAGED
)。如果留空,则返回所有密钥。
HTTP 方法和网址:
GET https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys?keyTypes=KEY_TYPES
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "keys": [ { "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/90c48f61c65cd56224a12ab18e6ee9ca9c3aee7c", "validAfterTime": "2020-03-04T17:39:47Z", "validBeforeTime": "9999-12-31T23:59:59Z", "keyAlgorithm": "KEY_ALG_RSA_2048", "keyOrigin": "GOOGLE_PROVIDED", "keyType": "USER_MANAGED" }, { "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/e5e3800831ac1adc8a5849da7d827b4724b1fce8", "validAfterTime": "2020-03-31T23:50:09Z", "validBeforeTime": "9999-12-31T23:59:59Z", "keyAlgorithm": "KEY_ALG_RSA_2048", "keyOrigin": "GOOGLE_PROVIDED", "keyType": "USER_MANAGED" }, { "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/b97699f042b8eee6a846f4f96259fbcd13e2682e", "validAfterTime": "2020-05-17T18:58:13Z", "validBeforeTime": "9999-12-31T23:59:59Z", "keyAlgorithm": "KEY_ALG_RSA_2048", "keyOrigin": "GOOGLE_PROVIDED", "keyType": "USER_MANAGED", "disabled": true } ] }
获取服务账号密钥
您可以使用 gcloud CLI 或 REST API 获取一个服务账号密钥的公钥数据。此外还可以使用 Google Cloud 控制台、gcloud CLI 或 REST API 来获取密钥的元数据,例如密钥使用的算法,以及密钥是由您管理还是由 Google 管理。
控制台
如需获取服务账号密钥的公钥数据,请执行以下操作:
使用 gcloud CLI 或 REST API。Google Cloud 控制台中不提供这些操作。
如需获取服务账号密钥的元数据,请执行以下操作:
- 在 Google Cloud 控制台中,转到服务账号页面。
其余步骤将自动显示在 Google Cloud 控制台中。
- 选择一个项目。
- 在服务账号页面上,点击要列出其密钥的服务账号的电子邮件地址。
- 点击密钥。 Google Cloud 控制台会显示服务账号的密钥列表,其中包括各密钥的元数据。
gcloud
如需获取服务账号密钥的公钥数据,请执行以下操作:
运行 gcloud beta iam service-accounts keys get-public-key
命令:
gcloud beta iam service-accounts keys get-public-key KEY_ID \ --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --output-file=FILENAME
请提供以下值:
KEY_ID
:您要获取的公钥的 ID。 如需查找密钥的 ID,请列出服务账号的所有密钥,找到要获取的密钥,然后复制其 ID。SA_NAME
:您要获取其公钥的服务账号的名称。PROJECT_ID
:您的 Google Cloud 项目 ID。FILENAME
:要在其中保存公钥数据的文件。
默认情况下,公钥数据使用 X.509 PEM 格式保存。如需获取原始公钥,请运行带有附加标志 --type=raw
的该命令。
例如,以下命令会获取属于服务账号 my-service-account@my-project.iam.gserviceaccount.com
的密钥 c97cc34494c07c9b483701f28368f20145b9ef97
的公钥数据,然后将公钥数据保存到 public_key.pem
文件中:
gcloud beta iam service-accounts keys get-public-key \
c97cc34494c07c9b483701f28368f20145b9ef97 \
--iam-account=my-service-account@my-project.iam.gserviceaccount.com \
--output-file=public_key.pem
如需获取服务账号密钥的元数据,请执行以下操作:
运行 gcloud iam service-accounts keys list
命令:
gcloud iam service-accounts keys list --iam-account=SA_NAME \ --filter="name~KEY_ID" --format=json
请提供以下值:
SA_NAME
:您要获取其密钥元数据的服务账号的名称。KEY_ID
:您要查看其元数据的密钥的 ID。
例如,以下命令会获取属于服务账号 my-service-account@my-project.iam.gserviceaccount.com
的密钥 c97cc34494c07c9b483701f28368f20145b9ef97
的元数据:
gcloud iam service-accounts keys list \
--iam-account=my-service-account@my-project.iam.gserviceaccount.com \
--filter="name~c97cc34494c07c9b483701f28368f20145b9ef97" --format=json
REST
projects.serviceAccounts.keys.get
方法将返回该服务账号的一个公钥的相关信息。
在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID
:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如my-project
。SA_NAME
:您要获取其公钥的服务账号的名称。-
KEY_ID
:您要获取的公钥的 ID。 如需查找密钥的 ID,请列出服务账号的所有密钥,找到要获取的密钥,然后从name
字段的末尾复制其 ID。密钥的 ID 是keys/
之后的所有内容。 KEY_TYPE
:用于返回公钥的格式。使用TYPE_X509_PEM_FILE
可指定 X.509 PEM 格式,或使用TYPE_RAW_PUBLIC_KEY
以指定原始公钥。如果省略此查询参数,则该方法会返回密钥的元数据,而不会返回公钥数据。
HTTP 方法和网址:
GET https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys/KEY_ID?publicKeyType=KEY_TYPE
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/f4a83933ac07cf52bb74e0e66d99662a09f51a36", "validAfterTime": "2021-12-10T17:32:06Z", "validBeforeTime": "9999-12-31T23:59:59Z", "publicKeyData": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvRENDQWVTZ0F3SUJBZ0lJT2lCdm9hR09nV0F3RFFZSktvWklodmNOQVFFRkJRQXdJREVlTUJ3R0ExVUUKQXhNVk1UQXhNVGsxTlRFMk5UWXlPRGszTmpFek1qQXpNQ0FYRFRJeE1USXhNREUzTXpJd05sb1lEems1T1RreApNak14TWpNMU9UVTVXakFnTVI0d0hBWURWUVFERXhVeE1ERXhPVFUxTVRZMU5qSTRPVGMyTVRNeU1ETXdnZ0VpCk1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQzdzeDBFcXVUMGNwSXhlczl1SW0yRy9DS3EKdnc4YTl2a2JkaWZZbDZHSDh1ZUxEWDhGNHVUeEVQMkNzU3JLTHZtOFo2My9IVUxnWjBtQXByb0JlM08vaVR1ZwpmYVZ0NVNtakhvWm9YQ1lpbjR0MS93SkpvdDhrRFdPeDZhOEdieUdqZ215ak8yYk1XdEtaQ2dqeGZ3cUV0MmN3CklnajA5VzJKYTlHTWRsdVA0VGVubTRKSkJoaFpFbTJ1bVAwYVZZdkRnUWF5d0RCYnJuNG8yY0EzSWplRDZGM1gKK0VHRDNKU0s4VW02Sk5sM21adGp6VWNZSHBrYkF0U1A2ZDI5d1RmZkdIRFY0THJRWlM3bG15d3hsb3p5WnpaawpCOFpHckMzSkF1MVNVRTdQOTN6bWtFb1B6MlRUNWhaYXZMWFQ5TGM2SExiRklRVHFnVEJVWHlNMkpIcGZBZ01CCkFBR2pPREEyTUF3R0ExVWRFd0VCL3dRQ01BQXdEZ1lEVlIwUEFRSC9CQVFEQWdlQU1CWUdBMVVkSlFFQi93UU0KTUFvR0NDc0dBUVVGQndNQ01BMEdDU3FHU0liM0RRRUJCUVVBQTRJQkFRQkhPNXlpUDY3NkE4UEN2RjdRSzdFMApYZVljbzdsSStFZkowaGJrWVlmdUtnSENPcXcvd3FBbCtOSithanljT2FPWDFPMlRZN3ZOc05pR2t3eWc2QXdqCklhL1NHVjd3NkxpS2JldFRuSVp4UlhRY25lcnVvZEwycUR5eWphMDJJSXJVTmVKY1o0MVJBNXRTL3NkcTFGNm4KM0NjSXFoZTI1OTA4TUNna3cwaFB1K0VLbFF6R1B5T3pVRHBLdXg0cnRBaHJTYTBUVW1wbEMxdTJnUk1YRkF6aApWUjU0V2dNa2tabURyalBNeWdBS3JmNkd0bHo2VHRTYTVLb1BWdGpsWExUQkxaSnlhdk4zc1F2dFlBK1NFQWpWCnA1N1ZabFBYZmR0dWN4ekJaOC9zS25SOHNyYU5hVWFjamg1NEE1Nm1URTE3b0IyUWkrTHBJUTYvNnVqVnNXaUYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "keyAlgorithm": "KEY_ALG_RSA_2048", "keyOrigin": "GOOGLE_PROVIDED", "keyType": "USER_MANAGED" }
后续步骤
- 了解如何创建和删除服务账号密钥。
- 了解如何停用和启用服务账号密钥。
- 了解使用服务账号密钥进行身份验证的替代方案。
- 了解如何使用服务账号密钥进行服务账号身份验证。
- 了解管理服务账号密钥的最佳实践。