使用 AWS CLI 管理 S3
S3 是 AWS 的对象存储服务
S3: Simple Storage Service
桶操作
创建桶:
aws s3 mb 's3://your-bucket-name' --region 'your-region'
桶名称应遵循以下规则:
- 必须全球唯一
- 必须是小写
- 不得格式化为 IP 地址(如 192.168.5.4)
- 必须在 3 到 63 字符之间
- 不能包含下划线,以连字符开头或结尾,且不能有连续的连字符
删除桶:
aws s3 rb 's3://your-bucket-name' --force
使用桶
S3 桶的操作和我们平时使用 Bash 对文件进行操作的命令基本一致。这里只简单列出其中几条命令。
# 列出桶中所有文件
aws s3 ls --recursive 's3://your-bucket-name/'
# 文件拷贝
aws s3 cp 'local-path' 's3://your-bucket-name/remote-path'
# 文件删除
aws s3 rm 's3://your-bucket-name/file'
# 文件同步
aws s3 sync 'local-path' 's3://your-bucket-name/remote-path'
为文件生成预览链接:
aws s3 presign 's3://your-bucket-name/path/to/file' --expires-in 3600
--expires-in设定过期时间
presign,预签名。实际上是我们使用自己的身份提前解锁了文件,并生成了解锁链接。
所有支持的操作:
| 命令名 | 功能 |
|---|---|
cp |
拷贝 |
ls |
列表 |
mb |
创建桶 |
mv |
移动 / 重命名 |
presign |
预签名 |
rb |
删除桶 |
rm |
删除 |
sync |
同步 |
website |
设置桶的网站配置 |
桶策略
-
检查“屏蔽公共访问权限”设置
aws s3api get-public-access-block --bucket your-bucket # 检查“屏蔽公共访问权限”设置 aws s3api delete-public-access-block --bucket your-bucket # 移除“屏蔽公共访问权限”设置 -
创建桶策略:
vim policy.json{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowPublicReadDirectory", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket/your-directory/*" }] }这个桶策略设置允许公共读取指定目录
-
应用桶策略:
aws s3api put-bucket-policy --bucket your-bucket --policy file://policy.json -
验证桶策略:
aws s3api get-bucket-policy --bucket your-bucket # 查看桶策略 curl https://your-bucket.s3.amazonaws.com/your-directory/test-file.txt # 尝试访问文件
uPic
uPic 是一个图床上传工具,可以使用 AWS S3 作为存储位置。

ACL
ACL 是 AWS S3 的传统权限管理机制(现推荐使用桶策略)。uPic 支持对上传的图片设置 Object ACL。
| ACL | 含义 |
|---|---|
public-read |
公开可读。任何人无需认证即可读取对象,上传者/Owner 可读写。图床最常用,图片 URL 可直接访问 |
public-read-write |
公开可读写。任何人都能读取和写入,极不安全,几乎不用 |
private |
私有。只有 Owner 可访问,其他人无权限。图片 URL 无法直接访问 |
authenticated-read |
认证用户可读。所有已认证的 AWS/S3 账号用户可读,Owner 可读写。很少使用 |
aws-exec-read |
AWS 内部使用,供 EC2 等服务读取 AMI/对象,普通场景不会用到 |
bucket-owner-full-control |
Bucket 拥有者完全控制。上传者保留对象所有权,同时授予 Bucket Owner 完全控制权。跨账号上传时常用 |
bucket-owner-read |
Bucket 拥有者可读,上传者保留完全控制。跨账号场景的弱化版 |
现在部署 S3 图床时,一般建议将 Object Ownership 设为 Bucket owner enforced(禁用 ACL),并用 Bucket Policy 授权公开读取:
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket/*"
}
并在 uPic 的 ACL 设置 bucket-owner-full-control(推荐)或 private。
域名
上传图片后,可以设置拼接图片访问 URL 时使用的域名。如果不设置,会使用 S3 默认 URL(https://<bucket>.s3.<region>.amazonaws.com),缺点是地理位置远离 bucket region 的用户访问速度会慢。建议使用 Amazon CloudFront CDN 域名(https://xxxx.cloudfront.net)或使用 Cloudflare R2 桶(自带 CDN)。
参见:
其中 s3 是 AWS S3 的高级 API,s3api 和 s3control 分别是 S3 和 S3 Glacier 的低级 API,它们提供了更多的配置选项和更详细的控制。

浙公网安备 33010602011771号