签名网址

本页面提供签名网址的概览。借助签名网址,您可向他人提供带有时限的资源访问权限,而无论对方是否拥有 Google 帐号。如需了解如何创建签名网址,请参阅使用 Cloud Storage 工具执行 V4 签名流程使用自己的程序执行 V4 签名流程。如需了解如何以其他方式控制存储分区和对象的访问权限,请参阅访问权限控制概览

概览

签名网址提供有限的权限和时间用于发出请求。签名网址的查询字符串中包含身份验证信息,这样,用户无需凭据也可对资源执行特定操作。生成签名网址时,您需要指定用户或服务帐号,且该用户或服务帐号具有的权限必须足以支持签名网址发出请求。生成签名网址后,拥有该网址的任何人都可以使用该网址,在指定的时间段内执行指定的操作(例如读取对象)。

什么时候应使用签名网址?

在某些情况下,您可能希望您的用户无需拥有 Google 帐号便可访问 Cloud Storage,不过您仍然想要根据应用的实际情况来控制访问权限。在这种使用情景下,较为典型的做法是向用户提供允许其在有限时间内对该资源拥有读取、写入或删除权限的签名网址。您需要在创建签名网址时指定到期时间。在该网址到期之前或用于对该网址进行签名的密钥被轮替之前,知道该网址的任何人都可以访问资源。

对签名网址的最常见请求就是上传和下载对象。在大多数其他情况下,例如复制对象、编写对象或修改元数据,创建一个签名网址并将其提供给他人使用,是不必要的额外步骤。您应改为考虑一项设计,让创建签名网址的实体直接向 Cloud Storage 发出所需请求。

用于生成签名网址的选项

Cloud Storage 支持多种生成签名网址的方法:

  • 使用服务帐号身份验证进行 V4 签名:此签名机制将在下文中介绍。

  • 使用服务帐号身份验证执行 V2 签名:如需详细了解此签名机制,请点击此处

  • 使用 HMAC 身份验证执行签名:如果您是 Amazon Simple Storage Service (Amazon S3) 用户,您可以使用现有的工作流生成 Cloud Storage 签名网址。只需指定 Cloud Storage 资源,指向主机 storage.googleapis.com,并在生成签名网址的过程中使用 Google HMAC 凭据。

签名网址示例

以下示例展示如何遵循“使用服务帐号身份验证执行 V4 签名流程”创建签名网址:

https://storage.googleapis.com/example-bucket/cat.jpeg?X-Goog-Algorithm=
GOOG4-RSA-SHA256&X-Goog-Credential=example%40example-project.iam.gserviceaccount
.com%2F20181026%2Fus-central-1%2Fstorage%2Fgoog4_request&X-Goog-Date=20181026T18
1309Z&X-Goog-Expires=900&X-Goog-SignedHeaders=host&X-Goog-Signature=247a2aa45f16
9edf4d187d54e7cc46e4731b1e6273242c4f4c39a1d2507a0e58706e25e3a85a7dbb891d62afa849
6def8e260c1db863d9ace85ff0a184b894b117fe46d1225c82f2aa19efd52cf21d3e2022b3b868dc
c1aca2741951ed5bf3bb25a34f5e9316a2841e8ff4c530b22ceaa1c5ce09c7cbb5732631510c2058
0e61723f5594de3aea497f195456a2ff2bdd0d13bad47289d8611b6f9cfeef0c46c91a455b94e90a
66924f722292d21e24d31dcfb38ce0c0f353ffa5a9756fc2a9f2b40bc2113206a81e324fc4fd6823
a29163fa845c8ae7eca1fcf6e5bb48b3200983c56c5ca81fffb151cca7402beddfc4a76b13344703
2ea7abedc098d2eb14a7

此签名网址提供了存储分区 example-bucket 中的对象 cat.jpeg 的读取访问权限。使此网址成为签名网址的查询参数为:

  • X-Goog-Algorithm:用于对网址进行签名的算法。

  • X-Goog-Credential:用于创建签名网址的凭据信息。

  • X-Goog-Date:可以开始使用该签名网址的日期和时间(采用 ISO 8601 基本格式 YYYYMMDD'T'HHMMSS'Z')。

  • X-Goog-Expires:签名网址的有效时长(从 X-Goog-Date 中的值开始算起,以秒为单位)。在此示例中,签名网址会在 15 分钟后到期。最长到期值为 604800 秒(7 天)。

  • X-Goog-SignedHeaders:使用签名网址的请求中必须包含的标头。

  • X-Goog-Signature:允许使用此签名网址来请求访问 cat.jpeg 的身份验证字符串。

将签名网址与可续传上传结合使用

使用可续传上传时,您只能为已启动上传POST 请求创建和使用签名网址。此初始请求会返回一个会话 URI,供您在后续的 PUT 请求中使用。由于会话 URI 充当身份验证令牌,因此 PUT 请求不使用任何签名网址。

可续传上传的一个优点是允许服务器发出启动请求,这样,客户端就不需要处理签名网址了。不过,需要注意以下特定事项:

  • 拥有该会话 URI 的所有人都可以使用会话 URI 上传数据。在将会话 URI 提供给客户端时,务必通过 HTTPS 传输会话 URI。

  • 可续传上传固定在初始请求所在的区域。为了避免上传缓慢,如果服务器和客户端位于地理位置非常遥远的地方,可通过服务器构建并签署初始 POST 请求,然后将签名网址提供给客户端,以便从其所在位置启动上传。

签名网址注意事项

使用签名网址时,请注意以下事项:

  • 签名网址只能用于通过 XML API 端点访问 Cloud Storage 资源。

  • 通常可以针对任何 XML API 请求创建签名网址;不过,存在以下两种例外情况:

    • 使用 V4 签名的签名网址无法在正文使用分块编码的请求中使用。

    • Node.js Cloud Storage 客户端库目前只能为个别对象创建签名网址。例如,不能使用此客户端库来创建用于在存储分区中列出对象的签名网址。

  • 指定凭据时,建议您使用电子邮件地址标识服务帐号;但也支持使用服务帐号 ID。

  • 请务必省略任何使用签名网址的请求中的授权标头。如果两者都使用,则 Cloud Storage 可以针对标头(而不是签名网址)中提供的凭据进行身份验证。这样做可能会使对资源的访问权限超出您的预期。

规范化请求

签名网址将规范化请求用作其 X-Goog-Signature 查询字符串参数中编码的信息的一部分。使用 Cloud Storage 工具创建签名网址时,所需的规范化请求会随之自动创建并添加。但是,当您使用自己的程序创建签名网址时,需要自行定义规范化请求。

凭据范围

凭据范围显示在要签名的字符串和 X-Goog-Credential 查询字符串参数中。

使用 IAM signBlob 为字符串签名

使用程序生成签名网址时,可利用 Google Cloud 提供的 IAM signBlob 方法对字符串签名。您在组合签名网址时会用到此方法输出的 Signature

signBlob 服务会定期轮替所用的私钥。生成的签名网址至少可以使用 12 个小时,但是如果到期时间超过 12 个小时,则签名网址可能会在您设置的到期时间之前停止工作。因此,通过 signBlob 生成的签名网址最适合短期访问资源。

后续步骤