撤消对 Google Cloud 项目的访问权限

本文档介绍撤消用户对 Google Cloud 项目的访问权限的最佳实践、场景和过程。使用本文档制定政策和程序,可让您以一致且及时的方式撤消访问权限。

Google Cloud 资源生命周期中的关键时刻是您需要删除某人对其的访问权限。当员工离开公司、您与承包商的合作结束或者协作者转移到其他项目时,您应该执行一些操作,以便彻底撤销对资源的不必要访问权限。

其中一些过程是可选的。您应根据自身安全需要、使用的产品以及对要撤销其访问权限的人的信任情况,确定要执行哪些步骤。

设置项目的最佳实践

通过在设置时做出谨慎选择,您可以更加高效地在项目中撤销用户访问权限。

将用户账号与您现有的身份提供方联合

将用户账号与现有身份提供方联合后,您可以同步用户账号的状态。从身份提供方中移除用户账号后,Cloud Identity 中的用户身份也会被删除,并且用户将无法再通过允许政策访问 Google Cloud 资源。

如需了解详情,请参阅联合 Google Cloud 与外部身份提供方的最佳实践

如需了解更多与身份相关的最佳实践,请参阅规划账号和组织的最佳实践

使用 Google 群组管理对项目资源的访问

借助 Google 群组,您可以根据用户的团队成员资格或其他条件来整理用户。创建 Google 群组后,您可以根据群组分配对 Google Cloud 项目和资源的访问权限。然后,当用户移至另一个团队时,您只需将用户账号移动到另一个群组,该操作会自动移除允许政策向之前的群组授予的访问权限。

如需了解详情,请参阅在 Google Cloud 控制台中管理群组在组织中创建群组

使用 OS Login

使用 OS Login(而不是基于元数据的 SSH 密钥),以便您可以将用户的 Linux 账号与其 Google 身份相关联。移除用户账号时,密钥会自动撤消。

如需查看说明,请参阅设置 OS Login

限制外部用户账号的访问

请勿向外部用户授予对项目的访问权限,因为您无法控制这些用户账号的生命周期。如需限制外部用户,请使用 iam.allowedPolicyMemberDomains 列表限制条件。

有关说明,请参阅按网域限制身份

连接到 Cloud SQL 时使用 Cloud SQL Auth 代理

借助 Cloud SQL Auth 代理,您可以根据 IAM 权限(而不是基于 IP 地址的访问权限控制,例如已获授权的网络)将工作负载连接到 Cloud SQL。Cloud SQL Auth 代理通过以下方式验证连接:使用用户或服务账号的凭据,并将连接封装在针对 Cloud SQL 实例授权的 SSL/TLS 层中。这种连接方法比使用自行管理的 SSL/TLS 证书或已获授权的网络更安全。此外,您还可以在撤消用户账号权限或完全删除用户账号时移除对 Cloud SQL 的访问权限。

限制对虚拟机的访问权限

虚拟机(例如 Compute EngineGoogle Kubernetes Engine 使用的虚拟机)是潜在的大型攻击面。如果某人之前拥有对某个虚拟机的访问权限(尤其是具有根目录访问权限或管理访问权限的人员),那么很难保证该人员未修改虚拟机并留下后门以允许自己将来访问。您要设置仅允许有明确和特定需求的人员对虚拟机进行访问。

默认情况下,项目编辑者和所有者对项目中的所有虚拟机都拥有管理员权限。移除此默认访问权限并遵循虚拟机访问权限的最小权限原则。

在授予虚拟机登录访问权限之前,请思考哪些任务需要访问权限,并确定是否有其他方法可以满足这些需求(如果可能)。例如,您可以考虑使用 ChefPuppetSalt 等工具来管理您的部署,而不是为每个开发者授予虚拟机登录权限以部署代码。

为凭据替换做准备

设计您的项目和资源,以便轻松、无中断地轮替项目级凭据。这些密钥包括与项目本身相关联的密钥(例如服务账号密钥,OAuth 客户端密钥)以及应用专用密钥(例如数据库 root 密码)。如需了解详情,请参阅处理被破解的 Google Cloud 凭据

限制 API 密钥

创建和管理 API 密钥时,您可以限制哪些网站、IP 地址和应用可以使用这些密钥。具有 Viewer 或 API Keys Admin 等角色的用户账号可以查看项目的 API 密钥,因此必须轮替或删除所有不受限制的密钥以撤消结算权限。如需了解详情,请参阅保护 API 密钥

其他最佳实践

除了本文档中介绍的最佳实践之外,请查看以下最佳实践:

撤消对 Google Cloud 项目的访问权限的场景

如果您执行了设置项目的最佳实践中列出的最佳实践,请参阅下表,了解如何撤消访问权限。

场景 撤消访问权限选项
一名员工从公司离职。 如果您已在 Cloud Identity 或 Google Workspace 之间设置了联合,并启用了自动用户预配功能,则系统可能会自动撤消访问权限。

如果您未遵循最佳实践,并且向外部用户身份授予了对您的资源的访问权限,则必须从项目和资源中手动移除这些身份。
员工的工作职能发生变化。 您将该员工从团队群组中移除。
合同到期。 如果您已在 Cloud Identity 或 Google Workspace 之间设置了联合,并启用了自动用户预配功能,则系统可能会自动撤消访问权限。

如果您未遵循最佳实践,并且向外部用户身份授予了对您资源的访问权限,则必须从项目和资源中手动移除这些身份。
账号被盗用。 如需查看相关说明,请参阅处理被盗用的 Google Cloud 凭据

撤消访问权限

如果您的项目已设置妥当,则可以借助以下过程高效地撤消某人的访问权限。

如需确定用户有权访问哪些资源,请使用 Policy Analyzer。如需查看相关说明,请参阅分析 IAM 政策

从身份提供方处删除用户账号

如果用户离开您的组织,并且您已将 Cloud Identity 或 Google Workspace 与您的身份提供方联合,还设置了自动用户预配功能,则系统可以自动撤消访问权限。

将账号移至另一个群组

如果用户要更改角色,请从他们当前的 Google 群组中移除用户账号。如果您已将 Cloud Identity 或 Google Workspace 与您的身份提供方联合来管理群组成员资格,则访问权限会自动撤消。

从项目成员资格中移除用户账号

  1. 在 Google Cloud 控制台中,进入 IAM 权限页面。

    IAM 权限

  2. 选择要从中移除用户账号的项目。

  3. 点击包含要从成员列表中移除的用户账号的行旁边的复选框,然后点击移除

替换项目凭据

轮替服务账号密钥

如果您使用服务账号密钥对服务账号进行身份验证,则必须轮替密钥。此外,请考虑用户是否可能拥有 Google Cloud 工具之外某个位置(例如源代码库或应用配置)的服务账号密钥的访问权限。

  1. 在 Google Cloud 控制台中,转到 API 凭据页面。

    API 凭据

  2. 点击要修改的服务账号的名称。

  3. 密钥标签页下,点击添加密钥

  4. 点击创建新密钥

  5. 选择要创建的密钥类型。在大多数情况下,建议使用 JSON,但 P12 可用于向后兼容依赖于该密钥类型的代码。

  6. 点击创建。包含新密钥的文件将通过浏览器自动下载。将此密钥部署到需要它的所有应用。

  7. 确认新密钥可按预期工作后,返回凭据页面并删除与该服务账户关联的旧密钥。

轮替 OAuth 客户端 ID Secret

OAuth 客户端 ID 密钥不提供对项目的任何直接访问。 但是,如果攻击者知道 OAuth 客户端 ID Secret,则可以仿冒您的应用,并通过恶意应用请求访问您用户的 Google 账号的权限。

如果您要撤销其访问权限的用户曾经对 OAuth 客户端 ID Secret 拥有访问权限(包括在源代码库和应用配置中或通过 IAM 角色),则可能需要轮替该 Secret。

  1. 在 Google Cloud 控制台中,转到 API 凭据页面。

    API 凭据

  2. 点击要修改的 OAuth 2.0 客户端 ID 的名称。

  3. 客户端 ID 页面上,点击重置 Secret

  4. 点击确认对话框中的重置,以立即撤消旧密钥并设置新新密钥。请注意,所有活跃用户都需要在下次请求时重新进行身份验证。

  5. 将新密钥部署到需要它的所有应用。

轮替 API 密钥

API 密钥不提供对您的项目或用户的数据的访问权限,但此类密钥可以控制 Google 针对 API 请求向谁收取费用。具有 Viewer 或 API Keys Admin 等角色的用户账号可以查看项目的 API 密钥。如果您有任何不受限制的密钥,则需要在撤消某人对项目的访问权限时删除或重新生成这些密钥。

  1. 在 Google Cloud 控制台中,转到 API 凭据页面。

    API 凭据

  2. 点击您要修改的 API 密钥的名称。

  3. 点击重新生成密钥

  4. 对话框将显示新创建的密钥。将该密钥部署到所有使用您要替换的密钥的应用。

  5. 确认您的应用能使用上述新密钥按预期工作后,返回到凭据页面并删除旧的不受限制的密钥。

撤消对虚拟机的访问权限

如果您要撤消其访问权限的用户不具有对您项目中任何虚拟机的登录权限,则可以跳过此步骤。

  1. 删除该人员有权访问的所有项目级层 SSH 密钥

  2. 在该人员具有 SSH 访问权限的各个虚拟机上,删除所有实例级层的密钥

  3. 从该人员具有登录访问权限的所有虚拟机中删除其账号。

  4. 检查该人员为提供对虚拟机的后门访问可能已安装的可疑应用。如果您不确定虚拟机上运行的任意代码的安全性,重新创建虚拟机并从源重新部署所需的应用。

  5. 验证虚拟机防火墙设置中您计划或预期的配置是否未发生更改。

  6. 如果从自定义基本映像创建新虚拟机,验证该基础映像并未以会损害新虚拟机安全性的方式被更改。

撤消对 Cloud SQL 数据库的访问权限

如果您的项目不使用 Cloud SQL 资源,则可以跳过此步骤。

  1. 在 Google Cloud 控制台中,转到 SQL 实例页面。

    SQL 实例

  2. 点击要撤消对其访问权限的数据库的实例 ID。

  3. 在左侧菜单中,点击连接

  4. 确认授权网络下的 IP 地址列表和 App Engine 授权下的应用列表符合您的预期。如果您尝试撤销其访问权限的人员可以访问此处列出的网络或应用,则他们可以访问此数据库。

  5. 在左侧菜单中,点击用户

  6. 删除或更改此人曾经有权访问的任何用户账号的密码。请务必更新依赖于这些用户账号的所有应用。

重新部署 App Engine

默认情况下,App Engine 应用可以访问作为关联项目编辑者的服务账号。App Engine 请求处理程序可以执行各类操作,例如创建新虚拟机以及读取或修改 Cloud Storage 中的数据。能够将代码部署到 App Engine 的人员可以使用此服务账号打开项目的后门。如果您担心已部署应用的代码完整性,则可能需要借助已知良好的映像从版本控制系统重新部署它们(包括所有模块)。

验证权限已移除

在 Google Cloud CLI 中,运行 search-all-iam-policies 方法以查找特定用户账号可能有权访问的任何资源。例如,如需确定用户是否有权访问您的资源,请运行以下命令:

gcloud asset search-all-iam-policies --scope='organizations/ORGANIZATION_ID --query='policy:IDENTITY'

其中:

  • ORGANIZATION_ID 是您的组织编号。
  • IDENTITY 是用户的身份,例如电子邮件地址。

后续步骤