本页面介绍了如何使用Google Cloud 控制台、Google Cloud CLI、Identity and Access Management API 或某个 Google Cloud 客户端库来创建和删除服务账号密钥。
准备工作
- Enable the IAM API. - Roles required to enable APIs - To enable APIs, you need the Service Usage Admin IAM role ( - roles/serviceusage.serviceUsageAdmin), which contains the- serviceusage.services.enablepermission. Learn how to grant roles.
- 设置身份验证。 - Select the tab for how you plan to use the samples on this page: - Console- When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication. - gcloud- In the Google Cloud console, activate Cloud Shell. - At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize. - C#- 如需在本地开发环境中使用本页面上的 .NET 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭证。 - 安装 Google Cloud CLI。 - 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。 - If you're using a local shell, then create local authentication credentials for your user account: - gcloud auth application-default login - You don't need to do this if you're using Cloud Shell. - If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity. - Google Cloud - C++- 如需在本地开发环境中使用本页面上的 C++ 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭证。 - 安装 Google Cloud CLI。 - 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。 - If you're using a local shell, then create local authentication credentials for your user account: - gcloud auth application-default login - You don't need to do this if you're using Cloud Shell. - If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity. - 如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置 ADC。 - Go- 如需在本地开发环境中使用本页面上的 Go 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭证。 - 安装 Google Cloud CLI。 - 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。 - If you're using a local shell, then create local authentication credentials for your user account: - gcloud auth application-default login - You don't need to do this if you're using Cloud Shell. - If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity. - Google Cloud - Java- 如需在本地开发环境中使用本页面上的 Java 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭证。 - 安装 Google Cloud CLI。 - 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。 - If you're using a local shell, then create local authentication credentials for your user account: - gcloud auth application-default login - You don't need to do this if you're using Cloud Shell. - If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity. - Google Cloud - Python- 如需在本地开发环境中使用本页面上的 Python 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭证。 - 安装 Google Cloud CLI。 - 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。 - If you're using a local shell, then create local authentication credentials for your user account: - gcloud auth application-default login - You don't need to do this if you're using Cloud Shell. - If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity. - Google Cloud - REST- 如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。 - 安装 Google Cloud CLI。 - 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。 - 如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。 - 了解服务账号凭证。 - 所需的角色- 如需获得创建和删除服务账号密钥所需的权限,请让您的管理员为您授予项目或者您要管理其密钥的服务账号的 Service Account Key Admin ( - roles/iam.serviceAccountKeyAdmin) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。- 如需了解详情,请参阅服务账号角色。 - 根据您的组织政策配置,您可能还需要允许在项目中创建服务账号密钥,然后才能创建密钥。 - 如需获得允许在项目中创建服务账号密钥所需的权限,请让您的管理员为您授予组织的以下 IAM 角色: - 
  
  
    
      Organization Policy Administrator (roles/orgpolicy.policyAdmin)
- 
  
  
    
      Organization Viewer (roles/resourcemanager.organizationViewer)
- 
  
  
    
      Tag Administrator (roles/resourcemanager.tagAdmin)
 - 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。 - 这些预定义角色可提供允许在项目中创建服务账号密钥所需的权限。如需查看所需的确切权限,请展开所需权限部分: - 所需权限- 允许在项目中创建服务账号密钥需要以下权限: - 
                  orgpolicy.constraints.list
- 
                  orgpolicy.customConstraints.create
- 
                  orgpolicy.customConstraints.delete
- 
                  orgpolicy.customConstraints.get
- 
                  orgpolicy.customConstraints.list
- 
                  orgpolicy.customConstraints.update
- 
                  orgpolicy.policies.create
- 
                  orgpolicy.policies.delete
- 
                  orgpolicy.policies.list
- 
                  orgpolicy.policies.update
- 
                  orgpolicy.policy.get
- 
                  orgpolicy.policy.set
- 
                  resourcemanager.organizations.get
- 
                  resourcemanager.projects.listTagBindings
- 
                  resourcemanager.projects.listEffectiveTags
- 
                  resourcemanager.tagKeys.get
- 
                  resourcemanager.tagKeys.list
- 
                  resourcemanager.tagValues.list
- 
                  resourcemanager.tagValues.get
 - 允许创建服务账号密钥- 在创建服务账号密钥之前,请确保系统未对您的项目强制执行 - iam.disableServiceAccountKeyCreation组织政策限制条件。如果系统对您的项目强制执行了此限制条件,您将无法在该项目中创建服务账号密钥。- 我们建议对大多数项目强制执行此限制条件,仅豁免真正需要服务账号密钥的项目。如需详细了解其他身份验证方法,请参阅为您的应用场景选择合适的身份验证方法。 - 如需在 - iam.disableServiceAccountKeyCreation组织政策限制条件中豁免某个项目,请让组织政策管理员执行以下操作:- 
    在组织级层,创建标记键和标记值,您将使用该标记值来定义资源是否应豁免该组织政策。我们建议使用键 disableServiceAccountKeyCreation和值enforced和not_enforced创建标记。如需了解如何创建标记键和标记值,请参阅创建和定义新标记。 
- 
    将 disableServiceAccountKeyCreation标记附加到组织,并将其值设置为enforced。组织中的所有资源都会继承此标记值,除非该标记值被其他标记值覆盖。如需了解如何将标记附加到资源,请参阅将标记附加到资源。 
- 
    对于要从组织政策中豁免的每个项目或文件夹,请附加 disableServiceAccountKeyCreation标记并将其值设置为not_enforced。以这种方式设置项目或文件夹的标记值会替换从组织继承的标记值。
- 
    创建或更新防止创建服务账号密钥的组织政策,使该政策不对豁免资源强制执行限制条件。此政策应具有以下规则: - 
        配置 iam.disableServiceAccountKeyCreation限制条件,使其不对具有disableServiceAccountKeyCreation: not_enforced标记的资源强制执行。此规则中的条件应如下所示:"resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
- 
        配置对所有其他资源强制执行的 iam.disableServiceAccountKeyCreation限制条件。
 
- 
        
 - 创建服务账号密钥- 如要在 Google Cloud之外(例如在其他平台上或在本地)使用服务账号,您必须首先确定服务账号的身份。为确保安全地实现此目标,您可以使用公钥/私钥对。 创建服务账号密钥时,公共部分存储在Google Cloud上,而不公开部分仅供您使用。如需详细了解公钥/私钥对,请参阅服务账号密钥。 - 您可以使用 Google Cloud 控制台、gcloud CLI、 - serviceAccounts.keys.create()方法或某个客户端库创建服务账号密钥。 一个服务账号最多可以有 10 个密钥。- 默认情况下,服务账号密钥永不过期。您可以使用组织政策限制条件指定服务账号密钥的有效时长。如需了解详情,请参阅用户管理的密钥的过期时间。 - 在下面的示例中, - SA_NAME是您的服务账号的名称,而- PROJECT_ID是您的Google Cloud 项目的 ID。您可以从 Google Cloud 控制台中的服务账号页面检索- SA_NAME@PROJECT_ID.iam.gserviceaccount.com字符串。- 控制台- 在 Google Cloud 控制台中,打开服务账号页面。
    
    
    
    
   
    
其余步骤会显示在 Google Cloud 控制台中。 
- 选择一个项目。
- 点击要为其创建密钥的服务账号的电子邮件地址。
- 点击密钥 标签页。
- 点击添加密钥下拉菜单,然后选择创建新密钥。
- 选择 JSON 作为密钥类型,然后点击创建。
 - 点击创建即会下载服务账号密钥文件。下载密钥文件后,您无法再次下载。 - 下载的密钥采用以下格式,其中 - PRIVATE_KEY是公钥/私钥对的私钥部分:- { "type": "service_account", "project_id": "PROJECT_ID", "private_key_id": "KEY_ID", "private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY\n-----END PRIVATE KEY-----\n", "client_email": "SERVICE_ACCOUNT_EMAIL", "client_id": "CLIENT_ID", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL" }- 您可以根据需要移动并重命名此文件。 - 您可以使用服务账号密钥文件来将应用作为服务账号进行身份验证。 - gcloud- 执行 - gcloud iam service-accounts keys create命令来创建服务账号密钥。- 替换以下值: - KEY_FILE:私钥的新输出文件的路径,例如- ~/sa-private-key.json。
- SA_NAME:要为其创建密钥的服务账号的名称。
- PROJECT_ID:您的 Google Cloud 项目 ID。
 - gcloud iam service-accounts keys create KEY_FILE \ --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com- 输出: - created key [e44da1202f82f8f4bdd9d92bc412d1d8a837fa83] of type [json] as [/usr/home/username/KEY_FILE] for [SA_NAME@PROJECT_ID.iam.gserviceaccount.com] - 现在,服务账号密钥文件已下载到您的机器上。下载密钥文件后,您无法再次下载。 - 下载的密钥采用以下格式,其中 - PRIVATE_KEY是公钥/私钥对的私钥部分:- { "type": "service_account", "project_id": "PROJECT_ID", "private_key_id": "KEY_ID", "private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY\n-----END PRIVATE KEY-----\n", "client_email": "SERVICE_ACCOUNT_EMAIL", "client_id": "CLIENT_ID", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL" } - 请务必将服务账号密钥存储在安全的位置。如果您未妥善存储密钥,不法分子可能会找到这些密钥,并使用它们来访问服务账号可以访问的资源。我们强烈建议您将密钥存储在基于硬件或软件的密钥库中。如需有关如何安全存储服务账号密钥的更多指导,请参阅防范权限升级。 - 您可以根据需要移动并重命名此文件。 - 您可以使用服务账号密钥文件来将应用作为服务账号进行身份验证。 - 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.create方法可为服务账号创建密钥。- 在使用任何请求数据之前,请先进行以下替换: - PROJECT_ID:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如- my-project。
- SA_NAME:您要为其创建密钥的服务账号的名称。
- KEY_ALGORITHM:可选。用于密钥的密钥算法。默认值(随时可能更改)为 2048 位 RSA 密钥。如需查看所有可能值的列表,请参阅- ServiceAccountKeyAlgorithm参考文档。
 - HTTP 方法和网址: - POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys - 请求 JSON 正文: - { "keyAlgorithm": "KEY_ALGORITHM" }- 如需发送您的请求,请展开以下选项之一: - 响应中包含您的服务账号的密钥。返回的密钥采用以下格式,其中 - ENCODED_PRIVATE_KEY是公钥/私钥对的私有部分,采用 base64 编码。- { "name": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_EMAIL/keys/KEY_ID", "privateKeyType": "TYPE_GOOGLE_CREDENTIALS_FILE", "privateKeyData": "ENCODED_PRIVATE_KEY", "validAfterTime": "DATE", "validBeforeTime": "DATE", "keyAlgorithm": "KEY_ALG_RSA_2048" }- 如要创建可用于以服务账号身份进行身份验证的密钥文件,请解码私钥数据并将其保存在文件中: - Linux- 运行以下命令: - echo 'ENCODED_PRIVATE_KEY' | base64 --decode > PATH - 将 - PATH替换为您要保存密钥的文件的路径。使用- .json文件扩展名。- macOS- 运行以下命令: - echo 'ENCODED_PRIVATE_KEY' | base64 --decode > PATH - 将 - PATH替换为您要保存密钥的文件的路径。使用- .json文件扩展名。- PowerShell- 将已编码的私钥数据 ( - ENCODED_PRIVATE_KEY) 保存在文件中。
- 使用 - certutil对文件进行解码:- certutil -decode ENCODED_FILE DECODED_FILE - 替换以下值: - ENCODED_FILE:包含已编码私钥数据的文件的路径。
- DECODED_FILE:您要在其中保存密钥的文件的路径。使用- .json文件扩展名。
 
 - 请务必将服务账号密钥存储在安全的位置。如果您未妥善存储密钥,不法分子可能会找到这些密钥,并使用它们来访问服务账号可以访问的资源。我们强烈建议您将密钥存储在基于硬件或软件的密钥库中。如需有关如何安全存储服务账号密钥的更多指导,请参阅防范权限升级。 - 您可以使用服务账号密钥文件来将应用作为服务账号进行身份验证。 - 删除服务账号密钥- 删除服务账号密钥会永久阻止您使用该密钥向 Google API 进行身份验证。 - 您不能恢复删除的密钥。在删除密钥之前,我们建议您先停用密钥,然后等到您确定不再需要该密钥时,即可将其删除。 - 最佳做法是定期变换您的服务账号密钥。如需详细了解如何变换服务账号密钥,请参阅服务账号密钥变换。 - 控制台- 在 Google Cloud 控制台中,打开服务账号页面。
    
    
    
    
   
    
其余步骤会显示在 Google Cloud 控制台中。 
- 选择一个项目。
- 在服务账号页面上,点击要删除其密钥的服务账号的电子邮件地址。
- 点击密钥标签页。
- 从密钥列表中,针对您想删除的每个密钥点击删除 。
 - gcloud- 执行 - gcloud iam service-accounts keys delete命令来删除服务账号密钥。- 替换以下值: - KEY_ID:要删除的密钥的 ID。 如需查找密钥的 ID,请列出服务账号的所有密钥,找到要删除的密钥,然后复制其 ID。
- SA_NAME:密钥所属服务账号的名称。
- PROJECT_ID:您的 Google Cloud 项目 ID。
 - gcloud iam service-accounts keys delete KEY_ID \ --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com- 输出: - Deleted key [KEY_ID] for service account [SA_NAME@PROJECT_ID.iam.gserviceaccount.com] - 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.delete方法可删除服务账号密钥。- 在使用任何请求数据之前,请先进行以下替换: - PROJECT_ID:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如- my-project。
- SA_NAME:您要删除其密钥的服务账号的名称。
- KEY_ID:您要删除的密钥的 ID。 如需查找密钥的 ID,请列出服务账号的所有密钥,找到要删除的密钥,然后从- name字段的末尾复制其 ID。密钥的 ID 是- keys/之后的所有内容。
 - HTTP 方法和网址: - DELETE https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys/KEY_ID - 如需发送您的请求,请展开以下选项之一: - 您应该收到类似以下内容的 JSON 响应: - { }- 后续步骤- 了解如何列出和获取服务账号密钥。
- 了解如何上传您自己的公共服务账号密钥。
- 了解管理服务账号密钥的最佳实践。
- 了解使用服务账号密钥进行身份验证的替代方案。
 - 如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。 - 最后更新时间 (UTC):2025-10-21。