HMAC 密钥

设置

本页面讨论基于哈希的消息认证码 (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 Cloud 无法找回密文,您必须为服务账号创建新的 HMAC 密钥才能继续对请求进行身份验证。

如需为用户账号创建 HMAC 密钥,您必须使用用户账号登录 Google Cloud 控制台,然后在您拥有 resourcemanager.projects.get IAM 权限的项目的 Cloud Storage 设置菜单中转到互操作性标签页。创建密钥后,您可以从您具有 resourcemanager.projects.get 权限的任何项目的互操作性标签页中查看密钥的 Secret。

存储密文的最佳做法

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

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

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

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

限制

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

  • 每个服务账号最多可以有 10 个 HMAC 密钥。删除的密钥不计入此限额。

  • 创建后,服务账号 HMAC 密钥最长可能需要等待 30 秒才能使用。删除服务账号后,属于该服务账号的 HMAC 密钥可能继续有效(最长 5 分钟)。相比之下,恢复删除的拥有 HMAC 密钥的服务账号后,HMAC 密钥最长可能需要等待 5 分钟才能再次可用。

  • 如果您对某个资源启用 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 限制条件,以进一步提高安全性。

后续步骤