本页面讨论基于哈希的消息身份验证代码 (HMAC) 密钥,您可以使用该密钥验证针对 Cloud Storage 的请求。当您想要在其他云存储服务商与 Cloud Storage 之间移动数据时,HMAC 密钥很有用,因为借助 HMAC 密钥,您可以重复使用现有代码访问 Cloud Storage。
概览
HMAC 密钥是一种凭据,可以与 Cloud Storage 中的服务帐号或用户帐号相关联。您可以使用 HMAC 密钥创建签名,这些签名随后会包含在针对 Cloud Storage 的请求中。签名表明某个给定请求是由用户帐号或服务帐号授权的。
HMAC 密钥有两个主要组成部分:访问权限 ID 和密文。
访问权限 ID:与特定服务或用户帐号关联的字母数字字符串。关联到服务帐号时,该字符串的长度为 61 个字符;关联用户帐号时,该字符串的长度为 24 个字符。以下示例展示了访问 ID:
GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA
Secret:一个包含 40 个字符的 Base-64 编码字符串,该字符串与特定的访问权限 ID 关联。密文是只有您和 Cloud Storage 知道的预共享密钥。您可以使用密文创建身份验证过程中将会用到的签名。下面展示了 Secret 的一个示例:
bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ
访问权限 ID 和密文唯一地标识 HMAC 密钥,但密文是更敏感的信息,因为它会用来创建签名。
您可以选择对资源启用 restrictAuthTypes
限制条件,以限制对用户帐号或服务帐号 HMAC 密钥签名的请求的访问权限。
存储密文
为服务帐号创建 HMAC 密钥时,系统会向您提供一次密钥的密文。您必须安全地存储密文以及关联的访问权限 ID。如果您丢失了密文,则您或 Google 无法找回密文,您必须为服务帐号创建新的 HMAC 密钥才能继续对请求进行身份验证。
如需为用户帐号创建 HMAC 密钥,您必须使用用户帐号登录 Google Cloud 控制台,然后在您拥有 resourcemanager.projects.get
IAM 权限的项目的 Cloud Storage 设置菜单中转到互操作性标签页。创建后,您可以从具有 resourcemanager.projects.get
权限的任何项目的互操作性标签页中查看密钥的密文。
存储密文的最佳做法
请勿透露 HMAC 密钥的密文。您应该像对待访问凭据那样来对待 HMAC 密钥的密文。
为保证安全性,建议您在轮替密钥时定期更改您的密钥。
如果您认为其他人正在使用您的 HMAC 密钥,则应立即删除受影响的 HMAC 密钥并创建新的 HMAC 密钥。
更改 HMAC 密钥时,应先使用新 HMAC 密钥更新您的代码,然后再删除旧密钥。删除 HMAC 密钥时,这些密钥会立即失效且无法恢复。
限制
HMAC 密钥只能用于向 XML API 发出请求,而不能用于向 JSON API 发出请求。
每个服务帐号最多可以有 5 个 HMAC 密钥。删除的密钥不计入此限额。
创建后,服务帐号 HMAC 密钥最长可能需要等待 15 秒才能使用。
如果您对某个资源启用
restrictAuthTypes
限制条件,则不能再为该资源中指定的帐号类型创建或激活 HMAC 密钥。
从用户帐号 HMAC 密钥进行迁移
通常情况下,将 HMAC 密钥与服务帐号相关联比与用户帐号相关联更合适,尤其是对于生产工作负载:
借助服务帐号,您可以更好地实施管理监控措施,并消除个人用户所拥有帐号的安全和隐私隐患。
服务帐号有助于降低因依赖用户帐号而导致服务中断的风险,例如当用户帐号因为用户离开项目或公司而停用时。
如果您目前将 HMAC 密钥与用户帐号搭配使用,但想要迁移到服务帐号,请注意以下几点:
您的项目必须拥有服务帐号,并且拥有与其相关联的 HMAC 密钥。
服务帐号必须获得在 Cloud Storage 中执行操作所需的权限。
Storage Object Admin
角色拥有使用对象的广泛权限,但您可能需要使用单独的服务帐号执行不同的操作。例如,您可能需要一个用于读取的服务帐号(该帐号将具有Storage Object Viewer
角色),以及另一个用于写入的服务帐号(该帐号将具有Storage Object Creator
角色)。您应进行测试,以确保服务帐号的行为符合预期,然后再将任何更新推送到生产环境。
在您的生产工作改用服务帐号 HMAC 密钥后,您应检查以下 Cloud Monitoring 指标,以验证系统不再使用与用户帐号相关联的 HMAC 密钥:
指标 说明 storage.googleapis.com/authn/authentication_count
HMAC 密钥已用于对请求进行身份验证的次数。 您可以设置以下标签来跟踪迁移期间仍在使用的用户帐号密钥:
access_id
:标识发出请求的访问权限 ID。您还可以在密钥轮替期间使用access_id
来观察流量从一个密钥移动到另一个密钥的情况。authentication_method
:标识密钥是用户帐号密钥还是服务帐号密钥。
验证系统不再使用用户帐号 HMAP 密钥后,您应删除这些 HMAC 密钥。这样做可以降低数据遭受不当访问的风险。
如果用户帐号不再用于访问 Cloud Storage 资源,请撤消该帐号对 Cloud Storage 所具有的任何访问权限。
您可以选择对用户帐号 HMAC 密钥启用
restrictAuthTypes
限制条件,以进一步提高安全性。