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

如果您已使用临时令牌创建预签名 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 将提前过期。


此页内容对您是否有帮助? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS 支持中心

发布时间:2018 年 08 月 06 日