You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为无公共访问权限的S3存储桶生成可访问预签名URL

S3预签名URL生成及参数说明

1. 自行生成带签名的可访问URL的方法

你提到的带签名的URL是AWS S3的预签名URL,无需手动拼接加密参数,直接使用AWS官方各语言SDK提供的封装方法即可生成,示例(Python boto3 SDK)如下:

import boto3

# 初始化S3客户端,传入对应区域
s3_client = boto3.client('s3', region_name='eu-central-1')

# 生成预签名GET请求URL
presigned_url = s3_client.generate_presigned_url(
    # 指定调用的S3接口名
    ClientMethod='get_object',
    Params={
        'Bucket': '你的存储桶名称',
        'Key': '文件在存储桶内的完整路径,比如pathToFile/filename.pdf',
        # 配置预览而非下载,对应你示例中的response-content-disposition参数
        'ResponseContentDisposition': 'inline'
    },
    # 链接有效期,单位为秒,示例中为300秒即5分钟
    ExpiresIn=300
)

print(presigned_url)

所有AWS官方SDK(Java、Go、Node.js、PHP等)都有对应功能的方法,直接调用即可自动完成签名计算、参数拼接,避免手动实现的加密错误。

2. X-Amz-Security-Token参数的来源

该参数仅在你使用临时身份凭证生成预签名URL时才会存在,如果你使用IAM用户的长期AK/SK生成预签名URL,不会出现该参数。
临时凭证及对应X-Amz-Security-Token的常见获取渠道:

  • 若你的代码运行在AWS服务(EC2、Lambda、ECS、EKS等)上,给服务实例绑定了拥有S3对象访问权限的IAM角色后,AWS SDK会自动从实例元数据服务获取临时凭证,自动填充该参数,无需手动处理
  • 若你在本地/非AWS环境运行,调用AWS STS服务的AssumeRole接口换取临时访问凭证时,接口返回结果中会包含SessionToken字段,该字段的值就是X-Amz-Security-Token参数的取值
  • 通过IAM Identity Center(原AWS SSO)、身份提供商联合登录等方式获取的访问凭证也属于临时凭证,返回结果中同样包含对应的SessionToken

注意:用临时凭证生成的预签名URL的最长有效期,不能超过临时凭证本身的剩余有效期,否则URL会提前失效。

内容的提问来源于stack exchange,提问作者penny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:51:01