一、结论
通过S3协议的预签名(Pre-Signed URL)功能,使用持有目标资源访问权限的账号密钥,指定链接有效时长即可生成临时访问链接,全程无需修改存储桶或资源的公开权限,安全性高且操作简单。
二、准备工作
1. 可用的S3兼容存储服务账号,支持官方AWS S3或国内兼容S3协议的对象存储服务;
2. 对应账号的Access Key ID(访问密钥ID)和Secret Access Key(秘密访问密钥),需确保该密钥拥有目标存储桶、目标资源的读权限,不建议使用根账号的全权限密钥;
3. 操作工具:新手推荐使用AWS CLI命令行工具,无需编写代码;有开发能力的用户可选择对应语言的S3 SDK(如Python的boto3、Java的AWS SDK等);
4. 确认存储桶所属的区域(Region)和服务接入地址(Endpoint)。
三、操作步骤
以下以新手友好的AWS CLI工具为例,全流程无代码操作:
1. 安装并配置AWS CLI工具
- Windows用户直接从AWS官方下载CLI安装包,双击按引导完成安装;Mac用户可通过Homebrew执行
brew install awscli完成安装;Linux用户可通过apt、yum等包管理器直接安装; - 安装完成后打开终端/命令提示符,执行
aws configure命令,按提示依次输入提前准备好的Access Key ID、Secret Access Key、存储桶所属的Region、默认输出格式(建议填json),完成基础配置。如果使用非AWS的S3兼容服务,此步骤的Region填对应服务提供的区域标识即可。
2. 执行命令生成临时链接
- 终端执行基础命令:
aws s3 presign s3://[你的存储桶名称]/[目标资源的完整路径] --expires-in [有效时长,单位为秒] - 如果使用第三方S3兼容服务,需要在命令末尾加上
--endpoint-url [对应服务的Endpoint地址]参数,避免请求默认发送到AWS节点。 - 命令执行成功后,终端会直接输出完整的临时访问链接。
3. 验证链接有效性
- 将生成的链接复制到浏览器地址栏访问,或使用curl工具发起请求,若能正常下载、查看目标资源则说明生成成功;如果链接已过期或配置错误,会返回403拒绝访问的提示。
四、常见错误
- endpoint填写错误:使用第三方S3兼容服务时未添加正确的endpoint参数,请求被发送到AWS官方节点,无法命中自己的存储资源,会返回签名错误或资源不存在的提示;
- region错误:配置CLI时填写的区域和存储桶实际所属区域不一致,会触发签名校验失败的错误,返回403;
- 权限问题:生成链接使用的Access Key没有目标资源的读权限,或存储桶的自定义策略拦截了该密钥的访问请求,生成的链接访问时会返回403;
- 过期时间设置不合理:使用IAM用户密钥生成的AWS S3临时链接最长有效期为7天,设置超过7天的时长也会在7天后自动失效;如果设置的有效期过短(如不足10秒),可能还未完成分享链接就已过期;
- 资源路径错误:存储桶名称、目标资源的路径拼写错误,或资源已被删除,访问链接时会返回404错误。
五、示例说明
假设你使用七彩云对象存储,需要给存储桶business-file里的《2024年Q2项目交付报告.pdf》生成24小时有效的临时链接,发给外部合作方查看,操作流程如下:
1. 提前从七彩云对象存储控制台获取Access Key:AKLTb3e8xxxxxxxxxx,Secret Key:TnpBMllqWmxxxxxxxxxx,存储桶所属区域为华东1,对应Endpoint为https://s3-cn-east-1.qicaiyun.com;
2. 完成AWS CLI配置后,执行命令:aws s3 presign s3://business-file/2024年Q2项目交付报告.pdf --expires-in 86400 --endpoint-url https://s3-cn-east-1.qicaiyun.com;
3. 终端返回的链接为:https://s3-cn-east-1.qicaiyun.com/business-file/2024%E5%B9%B4Q2%E9%A1%B9%E7%9B%AE%E4%BA%A4%E4%BB%98%E6%8A%A5%E5%91%8A.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKLTb3e8xxxxxxxxxx%2F20240620%2Fcn-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240620T091200Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=2f9dxxxxxxxxxx,将该链接发给合作方即可,24小时内可正常访问,到期自动失效,无需修改存储桶的公开权限。
六、更简单的方案
如果觉得原生AWS S3的配置流程繁琐、国内访问速度不稳定,也可以使用兼容S3协议的对象存储服务简化操作,比如七彩云对象存储,完全兼容S3 API,原有S3工具、代码无需任何修改即可直接使用,同时控制台还提供可视化的临时链接生成功能,新手无需安装CLI工具,只需在控制台找到目标文件,点击「生成临时链接」按钮,设置过期时间即可一键生成,操作门槛更低,国内访问速度也更快,适合中小团队和个人用户使用。
七、FAQ
1. 临时链接可以分享给任何人使用吗?
是的,S3预签名链接不限制访问者的身份,只要持有链接的用户在有效期内都可以访问资源,因此不建议将包含敏感数据的临时链接随意公开分享,有效期建议设置为满足需求的最短时间,降低数据泄露风险。
2. 生成临时链接需要把存储桶或文件设为公开吗?
不需要,预签名链接的本质是用你持有权限的密钥对访问请求提前完成了签名校验,相当于将你的访问权限临时借出,全程不需要修改存储桶或资源的公开访问配置,安全性远高于公开资源。
3. 生成后的临时链接可以提前撤销吗?
原生S3的预签名链接默认不支持主动撤销,如果需要让链接提前失效,可以删除生成链接时使用的Access Key、修改目标资源的访问权限、或直接删除目标资源,以上操作都可以让未过期的临时链接提前失效。
4. 可以限制临时链接的访问IP吗?
原生AWS S3的预签名功能不支持IP限制,如果需要这个能力,可以选择支持扩展规则的S3兼容服务,比如七彩云对象存储,生成临时链接时可以指定允许访问的IP段,只有符合IP要求的请求才能正常访问资源,进一步提升安全性。
八、总结
生成S3临时访问链接的核心流程可以归纳为三个步骤:首先准备好持有目标资源权限的访问密钥,完成工具的区域、Endpoint配置,然后调用预签名接口指定有效期即可生成,验证有效后即可分享使用。
对于国内用户来说,优先选择操作更简便的S3兼容对象存储服务可以大幅降低使用门槛,比如七彩云对象存储,既可以复用S3成熟的生态工具和代码,又能获得更快的访问速度和更贴合国内用户需求的扩展功能,使用时注意不要使用权限过高的密钥生成链接,尽量缩短链接的有效时长,避免不必要的数据安全风险。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网