如何使用AWS CLI生成S3预签名URL并通过Bash脚本自动化?
编写Bash脚本自动生成AWS S3预签名下载URL
前提条件
- 已安装AWS CLI,且通过
aws configure完成凭证配置(或通过环境变量、IAM角色等方式提供权限) - 拥有目标S3文件的读取权限
脚本示例
#!/bin/bash # 配置参数 - 替换成你的实际信息 BUCKET_NAME="your-bucket-name" FILE_PATH="documents/report.pdf" # S3桶内的文件相对路径,不要带s3://前缀 EXPIRY_SECONDS=3600 # URL有效时长,单位秒,最大支持604800(7天) # 生成预签名URL PRESIGNED_URL=$(aws s3 presign "s3://${BUCKET_NAME}/${FILE_PATH}" --expires-in ${EXPIRY_SECONDS}) # 校验生成结果 if [ $? -eq 0 ]; then echo "成功生成预签名下载URL:" echo "${PRESIGNED_URL}" # 可选:自动复制到剪贴板(macOS用pbcopy,Linux需安装xclip后用xclip -selection clipboard) # echo "${PRESIGNED_URL}" | pbcopy # echo "URL已复制到剪贴板" else echo "生成失败,请检查:" echo "1. AWS CLI配置是否正确" echo "2. 桶名和文件路径是否存在" echo "3. 当前凭证是否有该文件的读取权限" exit 1 fi
使用步骤
- 将上述代码保存为
generate_s3_presign.sh - 赋予执行权限:
chmod +x generate_s3_presign.sh - 替换脚本中的
BUCKET_NAME和FILE_PATH为实际值 - 运行脚本:
./generate_s3_presign.sh
扩展技巧
- 批量生成:如果需要处理多个文件,可以把文件路径存入一个列表,循环生成:
FILES=( "docs/file1.txt" "images/photo.jpg" ) for FILE in "${FILES[@]}"; do PRESIGNED_URL=$(aws s3 presign "s3://${BUCKET_NAME}/${FILE}" --expires-in ${EXPIRY_SECONDS}) echo "${FILE}: ${PRESIGNED_URL}" done - 自定义过期时间:可以通过命令行参数传入过期时间,比如修改脚本开头:
运行时:EXPIRY_SECONDS=${1:-3600} # 默认1小时,若传入参数则用参数值./generate_s3_presign.sh 7200(设置2小时有效期)
内容的提问来源于stack exchange,提问作者user23260259
相关产品推荐
相关产品推荐

