签名网址

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

概览

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

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

在某些情况下,您可能希望您的用户无需拥有 Google 帐号便可访问 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 请求中使用签名网址。POST 请求中不会上传任何数据;它只返回一个会话 URI,后续 PUT 请求使用该 URI 上传数据。会话 URI 实际上是一个身份验证令牌,因此 PUT 请求无需使用原始签名网址。此举允许服务器发出 POST 请求,这样,客户端就不需要自行处理签名网址了。

可续传上传固定在启动上传操作的区域中。例如,如果您在美国创建一个可续传上传网址,并将其提供给亚洲的客户,则上传仍会经由美国区域进行。如果执行可续传上传的区域并非是启动上传操作的区域,可能会导致上传速度变慢。为避免这种情况,可通过服务器构建并签署初始 POST 请求,然后将签名网址提供给客户端,以便从其所在位置启动上传。启动后,客户端可以正常使用生成的会话 URI 来发出不需要签名的 PUT 请求。

签名网址注意事项

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

  • 通常可以针对任何 XML API 请求创建签名网址;但是,Node.js Cloud Storage 客户端库当前只能为单独对象创建签名网址。例如,不能使用此客户端库来创建用于在存储分区中列出对象的签名网址。

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

规范化请求

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

凭据范围

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

[DATE]/[LOCATION]/storage/goog4_request
  • [DATE]:采用 YYYYMMDD 格式的日期,该日期必须与要签名的字符串中使用的日期相匹配。
  • [LOCATION]:资源所在的区域或将在其中创建资源的区域。对于 Cloud Storage 资源,[LOCATION] 的值为任意值:[LOCATION] 参数存在的意义是保持与 Amazon Simple Storage Service (Amazon S3) 的兼容性。
  • storage:服务名称。
  • goog4_request:签名网址的类型。

示例:20181102/us/storage/goog4_request

使用 Google Cloud Platform 工具对字符串签名

使用程序生成签名网址时,可利用 GCP 提供的工具对字符串签名。

App Engine 应用身份服务

App Engine 应用内的签名使用 App Engine 身份服务,该服务使用 App Engine 服务帐号凭据。例如,借助 Python App Identity API,您可以执行以下操作:

  • 使用 google.appengine.api.app_identity.sign_blob() 从您构造的字符串中对字节签名,然后在组合签名网址时提供所需的 Signature

  • 使用 google.appengine.api.app_identity.get_service_account_name() 检索服务帐号名称(这是您在组合签名网址时需要用到的 GoogleAccessId)。

App Engine 还以另外几种语言提供支持:

App Identity 服务在签署 blob 时会轮替私钥。从 App Identity 服务生成的签名网址至少可以使用一小时,而且最适合短期访问资源。

IAM signBlob

可以使用 IAM signBlob 方法实现签名。

后续步骤

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

发送以下问题的反馈:

此网页
Cloud Storage
需要帮助?请访问我们的支持页面