HMAC 密钥

转到示例

本页面讨论基于哈希的消息身份验证代码 (HMAC) 密钥,您可以使用该密钥验证针对 Cloud Storage 的请求。

概览

HMAC 密钥是一种凭据,可以与 Cloud Storage 中的服务帐号或用户帐号相关联。您可以使用 HMAC 密钥创建签名,这些签名随后会包含在针对 Cloud Storage 的请求中。签名表明某个给定请求是由用户帐号或服务帐号授权的。

HMAC 密钥有两个主要组成部分:访问权限 ID 和密文。

  • 访问权限 ID:一个包含 24 个字符的字母数字字符串,该字符串与您的 Google 帐号关联。访问权限 ID 示例:

    GOOGTS7C7FUP3AIRVJTE2BCD

  • 密文:一个包含 40 个字符的 Base-64 编码字符串,该字符串与特定的访问权限 ID 关联。密文是只有您和 Cloud Storage 知道的预共享密钥。您可以使用密文创建身份验证过程中将会用到的签名。密文示例:

    bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ

访问权限 ID 和密文唯一地标识 HMAC 密钥,但密文是更敏感的信息,因为它会用来创建签名。

HMAC 密钥在以下情况下很有用:

  • 您想要在其他云存储服务商与 Cloud Storage 之间移动数据,因为借助 HMAC 密钥,您可以重复使用现有代码访问 Cloud Storage。

存储密文

为服务帐号创建 HMAC 密钥时,系统会向您提供一次密钥的密文。您必须安全地存储密文以及关联的访问权限 ID。如果您丢失了密文,则您或 Google 无法找回密文,您必须为服务帐号创建新的 HMAC 密钥才能继续对请求进行身份验证。

为用户帐号创建 HMAC 密钥时,您可以通过 Google Cloud Console 查看该密钥的密文。如需执行此操作,您必须使用用户帐号登录到 Cloud Console。您可以在 Cloud Storage 的互操作标签页的设置菜单中找到与用户帐号关联的密文。

存储密文的最佳做法

  • 请勿透露 HMAC 密钥的密文。您应该像对待访问凭据那样来对待 HMAC 密钥的密文。

  • 为保证安全性,建议您在轮替密钥时定期更改您的密钥。

  • 如果您认为其他人正在使用您的 HMAC 密钥,则应立即删除受影响的 HMAC 密钥并创建新的 HMAC 密钥。

  • 更改 HMAC 密钥时,应先使用新 HMAC 密钥更新您的代码,然后再删除旧密钥。删除 HMAC 密钥时,这些密钥会立即失效且无法恢复。

限制

  • HMAC 密钥只能用于向 XML API 发出请求,而不能用于向 JSON API 发出请求。

  • 每个服务帐号最多可以有 5 个 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 所具有的任何访问权限。

后续步骤