本文档介绍了撤销用户对 Google Cloud 项目的访问权限的最佳实践、场景和过程。由于每项业务都有不同的政策和工作负载,我们建议您使用本文档制定自己的政策和过程,以便您以一致且及时的方式撤销访问权限。
当员工离开公司、您与承包商的合作结束或者协作者转移到其他项目时,您应该执行一些操作,以便撤销对云资源的不必要访问权限。
其中一些过程是可选的。您应根据自身安全需要、使用的产品以及对要撤销其访问权限的人的信任情况,确定要执行哪些步骤。
设置项目的最佳实践
通过在设置时做出谨慎选择,您可以更加高效地在项目中撤销用户访问权限。
将用户账号与您现有的身份提供方联合
将用户账号与现有身份提供方联合后,请确保传播用户中止和删除事件。传播后,当您从身份提供方中止或移除用户账号时,相应用户也会失去对 Google Cloud 资源的访问权限。
如需了解详情,请参阅联合 Google Cloud 与外部身份提供方的最佳做法。
如需了解更多与身份相关的最佳实践,请参阅规划账号和组织的最佳实践。
如需了解员工身份联合,请参阅员工身份联合。
考虑使用 Google 群组管理对项目资源的访问权限
借助 Google 群组,您可以根据用户的团队成员资格、访问权限要求或其他条件来整理用户。创建 Google 群组后,您可以根据群组成员资格分配对 Google Cloud 项目和资源的访问权限。当用户调到另一个团队或岗位时,您可以将用户账号移至另一个群组,该操作会自动移除允许政策向之前的群组授予的访问权限。
在某些情况下,使用 Google 群组并不合适。例如,您不应该使用仅基于您企业的组织结构的群组来管理访问权限。如需了解有关群组使用的最佳实践,请参阅使用 Google 群组的最佳实践。
如需了解详情,请参阅在 Google Cloud 控制台中管理群组和在组织中创建群组
使用 OS Login
使用 OS Login(而不是基于元数据的 SSH 密钥),以便将用户的授权密钥与其 Google 身份相关联。移除用户账号时,系统会自动撤销已获授权的密钥以及对虚拟机的访问权限。如需了解详情,请参阅使用 OS Login 确保根据 IAM 政策持续评估访问权限。
如需查看说明,请参阅设置 OS Login。
限制外部用户账号的访问
请勿向外部用户授予对项目的访问权限,因为您无法控制这些用户账号的生命周期。如需限制外部用户,请使用 iam.allowedPolicyMemberDomains
列表限制条件。
有关说明,请参阅按网域限制身份。
将身份验证代理与数据库搭配使用
借助身份验证代理,您可以将数据库凭证的生命周期与 Google 身份的生命周期相关联。在 Cloud Identity 或 Google Workspace 中中止或删除用户账号时,系统会自动撤销对数据库的访问权限。
如需了解详情,请参阅 Cloud SQL Auth 代理和 AlloyDB for PostgreSQL Auth 代理。
为凭证变换做准备
设计您的项目和资源,以便无中断地轮替项目级凭证。这些密钥包括与项目本身相关联的密钥(例如服务账号密钥,OAuth 客户端密钥)以及应用专用密钥(例如数据库 root 密码)。如需了解详情,请参阅处理被破解的Google Cloud 凭证。
限制 API 密钥
创建和管理 API 密钥时,您可以限制哪些网站、IP 地址和应用可以使用这些密钥。具有 Viewer 或 API Keys Admin 等角色的用户账号可以查看项目的 API 密钥,因此必须轮替或删除所有不受限制的密钥以撤销结算权限。如需了解详情,请参阅保护 API 密钥。
监控访问权限
仔细跟踪访问权限有助于防范潜在的访问权限滥用行为。您可以使用 IAM 角色Recommender跟踪角色使用情况,以帮助强制执行最小权限原则。此外,借助 Security Command Center 的云基础设施授权管理 (CIEM) 功能,您可以管理哪些身份有权访问部署中的哪些资源,并缓解因错误配置而导致的潜在漏洞。
为 Cloud Storage 使用统一存储桶级访问权限
借助统一存储桶级访问权限,您只需使用 IAM 即可管理 Cloud Storage 存储桶的权限。将统一存储桶级访问权限与其他访问权限控制选项搭配使用,可更精细地控制哪些人可以访问存储桶中的内容。
其他最佳实践
除了本文档中介绍的最佳实践之外,请查看以下最佳实践:
撤销对 Google Cloud 项目的访问权限的场景
如果您执行了设置项目的最佳实践中列出的最佳实践,请参阅下表,了解如何撤消访问权限。
场景 | 撤消访问权限选项 |
---|---|
一名员工从公司离职。 | 如果您已在 Cloud Identity 或 Google Workspace 之间设置了联合,并启用了自动用户预配功能,则系统可能会自动撤销访问权限。 如果您未遵循最佳实践,并且向外部用户身份授予了对您的资源的访问权限,则必须从项目和资源中手动移除这些身份。 |
员工的工作职能发生变化。 | 您将该员工从团队群组中移除。 |
合同到期。 | 如果您已在 Cloud Identity 或 Google Workspace 之间设置了联合,并启用了自动用户预配功能,则系统可能会自动撤销访问权限。 如果您未遵循最佳实践,并且向外部用户身份授予了对您的资源的访问权限,则必须从项目和资源中手动移除这些身份。 |
账号被盗用。 | 如需查看相关说明,请参阅处理被破解的Google Cloud 凭证。 |
撤消访问权限
如果您的项目已设置妥当,则可以借助以下过程高效地撤消某人的访问权限。
如需确定用户有权访问哪些资源,请使用 Policy Analyzer。如需查看相关说明,请参阅分析 IAM 政策。
从身份提供方处删除用户账号
如果用户离开您的组织,并且您已将 Cloud Identity 或 Google Workspace 与您的身份提供方联合,还设置了自动用户预配功能,则系统可以自动撤销访问权限。
如需了解如何删除员工身份联合用户,请参阅删除员工身份联合用户及其数据。
将账号移至另一个群组
如果用户要更改角色,请从他们当前的 Google 群组中移除用户账号。如果您已将 Cloud Identity 或 Google Workspace 与您的身份提供方联合来管理群组成员资格,则访问权限会自动撤销。
如需了解详情,请参阅查看和修改群组详细信息。
从 IAM 允许政策中移除用户账号
如需从项目级允许政策中移除用户账号,请执行以下操作:
在 Google Cloud 控制台中,前往 IAM 权限页面。
选择要从中移除用户账号的项目。
点击包含要从成员列表中移除的用户账号的行旁边的复选框,然后点击移除。
如需验证可以设置允许政策的其他位置(包括文件夹、组织或单个资源),请参阅验证权限是否已移除。
替换项目凭据
轮替服务账号密钥
如果您使用服务账号密钥对服务账号进行身份验证,则必须轮替密钥。此外,请考虑用户是否可能拥有 Google Cloud工具之外某个位置(例如源代码库或应用配置)的服务账号密钥的访问权限。
在 Google Cloud 控制台中,前往 API 凭证页面。
点击要修改的服务账号的名称。
在密钥标签页下,点击添加密钥。
点击创建新密钥。
选择要创建的密钥类型。在大多数情况下,建议使用 JSON,但 P12 可用于向后兼容依赖于该密钥类型的代码。
点击创建。包含新密钥的文件将通过浏览器自动下载。将此密钥部署到需要它的所有应用。
确认新密钥可按预期工作后,返回凭据页面并删除与该服务账户关联的旧密钥。
轮替 OAuth 客户端 ID Secret
OAuth 客户端 ID 密钥不提供对项目的任何直接访问。 但是,如果攻击者知道 OAuth 客户端 ID Secret,则可以仿冒您的应用,并通过恶意应用请求访问您用户的 Google 账号的权限。
如果您要撤销其访问权限的用户曾经对 OAuth 客户端 ID Secret 拥有访问权限(包括在源代码库和应用配置中或通过 IAM 角色),则可能需要轮替该 Secret。
在 Google Cloud 控制台中,前往 API 凭证页面。
点击要修改的 OAuth 2.0 客户端 ID 的名称。
在客户端 ID 页面上,点击重置 Secret。
点击确认对话框中的重置,以立即撤消旧密钥并设置新新密钥。请注意,所有活跃用户都需要在下次请求时重新进行身份验证。
将新密钥部署到需要它的所有应用。
轮替 API 密钥
API 密钥不提供对您的项目或用户的数据的访问权限,但此类密钥可以控制 Google 针对 API 请求向谁收取费用。具有 Viewer 或 API Keys Admin 等角色的用户账号可以查看项目的 API 密钥。如果您有任何不受限制的密钥,则需要在撤销某人对项目的访问权限时删除或重新生成这些密钥。
在 Google Cloud 控制台中,前往 API 凭证页面。
点击您要修改的 API 密钥的名称。
点击重新生成密钥。
对话框将显示新创建的密钥。将该密钥部署到所有使用您要替换的密钥的应用。
确认您的应用能使用上述新密钥按预期工作后,返回到凭据页面并删除旧的不受限制的密钥。
撤销对虚拟机的访问权限
如果您要撤消其访问权限的用户不具有对您项目中任何虚拟机的登录权限,则可以跳过此步骤。
删除该人员有权访问的所有项目级层 SSH 密钥。
在该人员具有 SSH 访问权限的各个虚拟机上,删除所有实例级层的密钥。
从该人员具有登录访问权限的所有虚拟机中删除其账号。
检查该人员为提供对虚拟机的后门访问可能已安装的可疑应用。如果您不确定虚拟机上运行的任意代码的安全性,重新创建虚拟机并从源重新部署所需的应用。
验证虚拟机防火墙设置中您计划或预期的配置是否未发生更改。
如果从自定义基本映像创建新虚拟机,验证该基础映像并未以会损害新虚拟机安全性的方式被更改。
撤销对数据库的访问权限
如果您的项目不使用 Cloud SQL 或 AlloyDB for PostgreSQL 资源,则可以跳过此步骤。
如需撤销对 Cloud SQL 数据库的访问权限,请完成以下操作:
在 Google Cloud 控制台中,前往 SQL 实例页面。
点击要撤消对其访问权限的数据库的实例 ID。
在左侧菜单中,点击连接。
确认授权网络下的 IP 地址列表和 App Engine 授权下的应用列表符合您的预期。如果您尝试撤销其访问权限的人员可以访问此处列出的网络或应用,则他们可以访问此数据库。
在左侧菜单中,点击用户。
删除或更改此人曾经有权访问的任何用户账号的密码。请务必更新依赖于这些用户账号的所有应用。
如需撤销对 AlloyDB for PostgreSQL 数据库的访问权限,请参阅从集群中移除 IAM 用户或服务账号。
重新部署 App Engine
默认情况下,App Engine 应用可以访问作为关联项目编辑者的服务账号。App Engine 请求处理程序可以执行各类操作,例如创建新虚拟机以及读取或修改 Cloud Storage 中的数据。能够将代码部署到 App Engine 的人员可以使用此服务账号打开项目的后门。如果您担心已部署应用的代码完整性,则可能需要借助已知良好的映像从版本控制系统重新部署它们(包括所有模块)。
验证权限已移除
您可以在组织级、项目级或使用Policy Analyzer验证权限。
如需查找特定用户可能在组织级层有权访问的资源,请在 Google Cloud CLI 中使用 search-all-iam-policies
方法。例如,如需确定用户是否有权访问您的资源,请运行以下命令:
gcloud asset search-all-iam-policies --scope='organizations/ORGANIZATION_ID --query='policy:IDENTITY'
其中:
ORGANIZATION_ID
是您的组织编号。IDENTITY
是用户的身份,例如邮箱。
如需验证项目权限,请参阅主账号对项目的权限。
如需使用 Policy Analyzer 验证权限,请参阅确定主账号可以访问哪些资源。
后续步骤
创建拒绝政策,以指定用户无法再访问哪些权限。