问与答 为什么我的 Amazon S3 存储桶的预签名 URL 在我指定的过期时间前过期?

gerald · 2020-02-14 10:50:41 · 热度: 356

我使用临时令牌为 Amazon Simple Storage Service (Amazon S3) 存储桶创建了一个预签名 URL,但是此 URL 在我指定的过期时间前过期。为什么会出现这种情况? 如何创建具有更长有效时间的预签名 URL?

猜你喜欢:
共收到 1 条回复
老猫是我 #1 · 2020-02-14 10:51:42

解决方案
如果您已使用临时令牌创建预签名 URL,则此 URL 将在令牌过期时过期,即使创建的 URL 的过期时间更晚也是如此。

可用于创建预签名 URL 的凭证包括:

  • AWS Identity and Access Management (IAM) 实例配置文件: 有效期长达 6 小时
  • AWS Security Token Service (STS): 在使用永久凭证(例如,AWS 账户根用户或 IAM 用户的凭证)签名时,有效期长达 36 小时
  • IAM 用户: 在使用 AWS 签名版本 4 时,有效期长达 7 天

要创建有效期长达 7 天的预签名 URL,请先为所使用的开发工具包指定 IAM 用户凭证(访问密钥和秘密访问密钥)。然后,使用 AWS 签名版本 4 生成预签名 URL。

例如,执行以下步骤通过 Boto 3 创建预签名 URL:

  1. 配置 IAM 用户凭证以用于 Boto。

  2. 编辑和运行以下代码段可创建用于 S3 对象的预签名 URL:

import boto3
from botocore.client import Config

# Get the service client with sigv4 configured
s3 = boto3.client('s3', config=Config(signature_version='s3v4'))

# Generate the URL to get 'key-name' from 'bucket-name'
# URL expires in 604800 seconds (seven days)
url = s3.generate_presigned_url(
    ClientMethod='get_object',
    Params={
        'Bucket': 'bucket-name',
        'Key': 'key-name'
    },
    ExpiresIn=604800
)

print(url)

警告: 如果删除 IAM 用户或停用访问密钥和秘密访问密钥,预签名 URL 将提前过期。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册