为 Google 云存储对象创建生成的没有过期时间的签名 url

时间:2021-07-14 13:52:50

标签: python google-cloud-platform

我正在尝试为没有过期时间的 Google 云存储对象生成签名 url。但是,当我使用 V4 签名流程创建签名网址时,它会在 7 天后过期。

有没有其他方法可以实现这一目标?

另外,V2 签名流程的到期时间是多少?

2 个答案:

答案 0 :(得分:1)

除了@DazWilkin 的回答之外,不可能创建一个没有过期的签名 URL。 V2 签名过程必须以秒为单位接受有效的 Unix 时间戳。您可以输入 64 位整数值,但要确保时间戳有效。有一些工具可以将时间戳转换为日期时间格式。

如果您尝试设置无效的 Unix 时间戳,您将收到 MalformedSecurityHeader 响应。

但是,如果您坚持使用过期时间超过一周的签名 URL,您可以使用 V2 签名流程。正如我在评论中提到的,V2 签名的 url 可以持续数年。

如果使用客户端库,首先确保先设置身份验证:

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/keyfile.json"

快速示例代码(V4 signing process 的修改版):

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(blob_name)

url = blob.generate_signed_url(
  version="v2",
  # This URL is valid for 365 days
  expiration=datetime.timedelta(days=365),
  # Allow GET requests using this URL.
  method="GET",
)

有关详细信息,请参阅 V2 Signing process

答案 1 :(得分:0)

签名 URL 的目的是提供对云存储 URL 的(时间)限制访问。

去掉时间限制,您可能希望考虑只公开 URL。

任何拥有该 URL 的人都可以访问签名 URL。因此,如果您担心发现可猜测的 URL(例如 my-bucket/my-object-path),那么您可以考虑混淆对象名称,也许使用 base64 编码使 URL 不易猜测但易于推导:

my-bucket/my-object-path --> my-bucket/bXktb2JqZWN0LXBhdGg=

相关问题