本页面介绍如何使用 Identity and Access Management (IAM) API、Google Cloud 控制台和 gcloud
命令行工具删除和恢复删除的服务账号。
准备工作
Enable the IAM API.
设置身份验证。
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++
如需在本地开发环境中使用本页面上的 C++ 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证。
C#
如需在本地开发环境中使用本页面上的 .NET 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证。
Go
如需在本地开发环境中使用本页面上的 Go 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证。
Java
如需在本地开发环境中使用本页面上的 Java 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证。
Python
如需在本地开发环境中使用本页面上的 Python 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
了解 IAM 服务账号
所需的角色
如需获得删除和恢复删除的服务账号所需的权限,请让管理员向您授予项目的以下 IAM 角色:
- Delete Service Accounts (
roles/iam.serviceAccountDeleter
)(如需删除服务账号) - Service Account Admin (
roles/iam.serviceAccountAdmin
)(如需删除和恢复删除的服务账号)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
如需详细了解这些角色,请参阅服务账号角色。
IAM 基本角色也具有管理服务账号的权限。 您不应在生产环境中授予基本角色,但可以在开发或测试环境中授予这些角色。
删除服务账号
您删除服务账号后,应用将无法再通过该服务账号访问 Google Cloud 资源。如果您删除默认的 App Engine 和 Compute Engine 服务账号,则使用这些服务账号的 App Engine 应用和 Compute Engine 虚拟机实例将无法再访问项目中的资源。
请谨慎删除服务账号。在删除之前,请确保您的关键应用不再使用该服务账号。如果您不确定某个服务账号是否正在使用,Google 建议您停用该服务账号,而不是将其删除。已停用的服务账号可以在需要时重新启用。
如果您要恢复已删除的服务账号,可以恢复删除(如果自删除服务账号后已过去 30 天或更短时间)。30 天后,IAM 会永久移除该服务账号。服务账号被永久移除后,即使您提交支持请求,Google Cloud 也无法将其恢复。
如需进一步降低删除必要服务账号的风险,您还可以启用更改风险建议。如果您尝试删除 Google Cloud 已确定为重要账号的服务账号,更改风险建议会生成警告。
如果您删除服务账号,然后创建一个具有相同名称的新服务账号,新服务账号将被视为单独的身份;它不会继承那些授予已删除的服务账号的角色。相反,如果您删除某个服务账号,然后恢复删除,那么该服务账号的身份不会更改,并且服务账号会保留其角色。
删除服务账号时,其角色绑定不会立即移除;它们将在 60 天内自动从系统中清除。在此之前,该服务账号显示在角色绑定中,并且带有
deleted:
前缀和?uid=NUMERIC_ID
后缀,其中NUMERIC_ID
是服务账号的唯一数字 ID。已删除的服务账号不计入您的服务账号配额。
控制台
在 Google Cloud 控制台中,转到服务账号页面。
选择一个项目。
选择要删除的服务账号,然后点击删除
。
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.
-
执行
gcloud iam service-accounts delete
命令可删除服务账号。命令:
gcloud iam service-accounts delete \ SA_NAME@PROJECT_ID.iam.gserviceaccount.com
输出:
Deleted 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
serviceAccounts.delete
方法可删除服务账号。在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID
:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如my-project
。SA_ID
:您的服务账号的 ID。此 ID 可以是服务账号的电子邮件地址(格式为SA_NAME@PROJECT_ID.iam.gserviceaccount.com
)或服务账号的唯一数字 ID。
HTTP 方法和网址:
DELETE https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID
如需发送您的请求,请展开以下选项之一:
如果成功,则响应正文将为空。
恢复删除的服务账号
在某些情况下,您可以使用
undelete
命令恢复已删除的服务账号。如果已删除的服务账号满足以下条件,则通常可以对该服务账号恢复删除:服务账号删除的时间不超过 30 天。
30 天后,IAM 会永久移除该服务账号。服务账号被永久移除后,即使您提交支持请求,Google Cloud 也无法将其恢复。
现有服务账号与已删除的服务账号的名称不同。
例如,假设您意外删除了服务账号
my-service-account@project-id.iam.gserviceaccount.com
。您仍需要具有此名称的服务账号,因此您创建了一个具有相同名称的新服务账号my-service-account@project-id.iam.gserviceaccount.com
。新服务账号不会继承已删除的服务账号的权限。实际上,它与已删除的服务账号完全没有关系。但是,您无法恢复删除的原始服务账号,因为新服务账号使用了与它相同的名称。
要解决此问题,请删除新服务账号,然后尝试恢复删除的原始服务账号。
如果您无法恢复已删除的服务账号,可以创建一个具有相同名称的新服务账号;撤消已删除的服务账号中的所有角色;然后向新服务账号授予相同的角色。如需了解详情,请参阅包含已删除主账号的政策。
查找已删除服务账号的数字 ID
当您恢复删除的服务账号时,必须提供其数字 ID。数字 ID 是唯一标识服务账号的 21 位数字,例如
123456789012345678901
。例如,如果您删除某一服务账号,然后创建一个具有相同名称的新服务账号,原始服务账号和新服务账号将具有不同的数字 ID。如果您知道某项允许政策中的绑定包含已删除的服务账号,则可以获取允许政策,然后在允许政策中找到相应的数字 ID。数字 ID 附加在已删除的服务账号的名称的后面。例如,在此允许政策中,已删除的服务账号的数字 ID 为
123456789012345678901
:{ "version": 1, "etag": "BwUjMhCsNvY=", "bindings": [ { "members": [ "deleted:serviceAccount:my-service-account@project-id.iam.gserviceaccount.com?uid=123456789012345678901" ], "role": "roles/iam.serviceAccountUser" }, ] }
数字 ID 仅附加到已删除主账号的名称中。
或者,您可以在审核日志中搜索删除了服务账号的
DeleteServiceAccount
操作:在 Google Cloud 控制台中,转到日志浏览器页面。
在查询编辑器中输入以下查询,将
SERVICE_ACCOUNT_EMAIL
替换为您的服务账号的电子邮件地址(例如my-service-account@project-id.iam.gserviceaccount.com
):resource.type="service_account" resource.labels.email_id="SERVICE_ACCOUNT_EMAIL" "DeleteServiceAccount"
如果服务账号已被删除超过 1 小时,请点击
过去 1 小时,从下拉列表中选择更长的时间段,然后点击应用。点击运行查询。日志浏览器会显示具有您指定的名称的影响服务账号的
DeleteServiceAccount
操作。执行以下任一操作,找到并记下已删除服务账号的数字 ID:
如果搜索结果仅包含一项
DeleteServiceAccount
操作,请在日志字段窗格的唯一 ID 字段中查找数字 ID。如果搜索结果显示多个日志,请执行以下操作:
找到正确的日志条目。如需查找正确的日志条目,请点击日志条目旁边的
展开箭头。查看日志条目的详细信息,并确定日志条目是否显示您要撤消的操作。重复此过程,直至找到正确的日志条目。在正确的日志条目中,找到服务账号的数字 ID。如需查找数字 ID,请展开日志条目的
protoPayload
字段,然后找到resourceName
字段。数字 ID 是
resourceName
字段中serviceAccounts
之后的所有内容。
按数字 ID 恢复删除的服务账号
找到已删除的服务账号的数字 ID 后,您可以尝试恢复删除的服务账号。
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.
-
执行
gcloud beta iam service-accounts undelete
命令可恢复删除的服务账号。命令:
gcloud beta iam service-accounts undelete ACCOUNT_ID
输出:
restoredAccount: email: SA_NAME@PROJECT_ID.iam.gserviceaccount.com etag: BwWWE7zpApg= name: projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com oauth2ClientId: '123456789012345678901' projectId: PROJECT_ID uniqueId: 'ACCOUNT_ID'
REST
serviceAccounts.undelete
方法可恢复已删除的服务账号。在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID
:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如my-project
。SA_NUMERIC_ID
:服务账号的唯一数字 ID。
HTTP 方法和网址:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NUMERIC_ID:undelete
如需发送您的请求,请展开以下选项之一:
如果可以恢复删除的账号,您会收到一个
200 OK
响应代码,其中包含已恢复服务账号的详细信息,如下所示:{ "restoredAccount": { "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com", "projectId": "my-project", "uniqueId": "123456789012345678901", "email": "my-service-account@my-project.iam.gserviceaccount.com", "displayName": "My service account", "etag": "BwUp3rVlzes=", "description": "A service account for running jobs in my project", "oauth2ClientId": "987654321098765432109" } }
后续步骤
- 了解如何列出和修改服务账号。
- 查看将 IAM 角色授予所有类型的主账号(包括服务账号)的流程。
- 了解如何将服务账号关联到资源。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-12-03。