解决方案
如果您已使用临时令牌创建预签名 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:
配置 IAM 用户凭证以用于 Boto。
编辑和运行以下代码段可创建用于 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 将提前过期。