撤销对 Google Cloud Platform 的访问权限

本文档将介绍撤销某人对 Google Cloud Platform 项目的访问权限的最佳做法。本文档分为两部分。第一部分介绍以易于撤销访问权限的方式设置项目。第二部分介绍撤销某人对各类资源的访问权限的具体步骤。

背景

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

其中一些过程是可选的。您应根据自身安全需要、使用的产品以及对要撤销其访问权限的人的信任情况,确定要执行哪些步骤。使用此文档来制定对您和您使用 GCP 有意义的政策和程序。

设置项目

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

限制对虚拟机的访问权限

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

在授予个人登录访问权限之前,请思考他们执行登录操作需要的访问权限,并在可能的情况下找出满足这些需求的其他方法。切勿为了部署代码而授予每个开发者登录访问权限,而应考虑使用 ChefPuppetSalt 等工具来管理部署。

为凭据替换做准备

您应该设计项目和资源,以便轻松、无中断地替换项目级层凭据。这些密钥包括与项目本身相关联的密钥(例如服务账号密钥,OAuth 客户端密钥)以及应用专用密钥(例如数据库 root 密码)。立即进行规划,以便能在有相应需要的应用中轻松部署新凭据。

限制 API 密钥

创建和管理 API 密钥时,您可以限制哪些网站、IP 地址和应用可以使用这些密钥。API 密钥对所有项目成员都可见,因此需要替换或删除所有不受限制的密钥才能撤消结算访问权限。详细了解安全使用 API 密钥的最佳做法,并相应地规划您的使用。

撤消访问权限

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

从项目成员资格中删除相应帐号

  1. 在 Google Cloud Platform 控制台中,转到“IAM 权限”页面。

    IAM 权限

  2. 选择要从中删除帐号的项目。

  3. 点击包含要从成员列表中删除的账号的行旁边的复选框,然后点击删除。或者,点击要删除的帐号旁边的垃圾桶图标。

替换项目凭据

服务帐号密钥

服务帐号属于非用户帐号,默认情况下,它们被视为其关联项目的编辑者。能够充当服务帐号的人员拥有与项目编辑者相同的权限。

只有项目所有者才能为现有服务帐号创建新的服务帐号或密钥。如果要撤销其访问权限的人员是项目所有者,则需要替换所有现有服务帐号密钥。如果该人员不是项目所有者,则可以跳过此步骤。但是,请考虑该人员是否可能已在在 Google Cloud Platform 安全工具之外的某个位置访问服务帐号密钥,例如源代码库或应用配置。

  1. 在 Google Cloud Platform Console 中,转到“API 凭据”页面。

    API 凭据

  2. 点击创建凭据,然后选择服务帐号密钥

  3. 服务帐号菜单中选择目标帐号。

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

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

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

OAuth 客户端 ID 密钥

OAuth 客户端 ID 密钥不提供对项目的任何直接访问。但是,如果攻击者能够代表您的应用的用户窃取 Google 提供的 OAuth 刷新令牌,则拥有客户端 ID 密钥将允许攻击者在您的应用访问您的用户的 Google 帐号,范围与您的应用最初请求的范围相同。

项目的全部所有者和编辑者均可查看 OAuth 客户端 ID 密钥,但阅读者无此权限。如果要撤销其访问权限的人员不是所有者或编辑者,则可以跳过此步骤。但是,请考虑该人员是否可能已在在 Google Cloud Platform 安全工具之外的某个位置访问客户端 ID 密钥,例如源代码库或应用配置。

  1. 在 Google Cloud Platform Console 中,转到“API 凭据”页面。

    API 凭据

  2. 点击要修改的 OAuth 2.0 客户端 ID 的名称。这将打开客户端 ID 页面,其中包含所选 ID 的客户端的详情。

  3. 在“客户端 ID”页面上,点击重置密码

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

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

API 密钥

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

  1. 在 Google Cloud Platform Console 中,转到“API 凭据”页面。

    API 凭据

  2. 点击创建凭据,然后选择 API 密钥

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

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

撤消对虚拟机的访问权限

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

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

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

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

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

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

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

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

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

  1. 在 Google Cloud Platform Console 中,转到“SQL 实例”页面。

    SQL 实例

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

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

  4. 点击用户。在此标签中,删除或更改上述人员有权访问的任何用户帐号的密码。请务必更新依赖于这些用户帐号的所有应用。

重新部署 App Engine

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

验证对其他资源的访问权限

思考该人员可能已经访问的项目中的其他资源,并验证对这些对象的访问权限的安全。要检查的资源包括:

后续步骤

查看 Google Cloud 安全概览

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页