使用 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 设置桶的网站配置

桶策略

  1. 检查“屏蔽公共访问权限”设置

    aws s3api get-public-access-block --bucket your-bucket     # 检查“屏蔽公共访问权限”设置
    aws s3api delete-public-access-block --bucket your-bucket  # 移除“屏蔽公共访问权限”设置
    
  2. 创建桶策略:

    vim policy.json
    
    {
      "Version": "2012-10-17",
      "Statement": [{
        "Sid": "AllowPublicReadDirectory",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::your-bucket/your-directory/*"
      }]
    }
    

    这个桶策略设置允许公共读取指定目录

  3. 应用桶策略:

    aws s3api put-bucket-policy --bucket your-bucket --policy file://policy.json
    
  4. 验证桶策略:

    aws s3api get-bucket-policy --bucket your-bucket                        # 查看桶策略
    curl https://your-bucket.s3.amazonaws.com/your-directory/test-file.txt  # 尝试访问文件
    

uPic

uPic 是一个图床上传工具,可以使用 AWS S3 作为存储位置。

20250831-022249

  • ACL:ACL 是 AWS S3 传统的权限管理机制(现推荐使用桶策略)。默认的 ACL 是 bucket-owner-full-control

参见:

其中 s3 是 AWS S3 的高级 API,s3apis3control 分别是 S3 和 S3 Glacier 的低级 API,它们提供了更多的配置选项和更详细的控制。

posted @ 2024-05-01 20:07  Undefined443  阅读(138)  评论(0)    收藏  举报