跳到主要内容

AWS S3 命令速查 — 58+ 条桶操作/同步/版本控制/加密命令

AWS S3 命令速查,58+ 条涵盖桶操作/同步/预签名/版本控制/生命周期/加密/CORS/分段上传。

  • 本地处理
  • 分类 开发运维
  • 适合 格式化、校验、压缩或检查和代码相关的文本。
58 条命令
基本操作 (6)
aws s3 ls

不带参数:列出你拥有的所有桶。加路径:列出该前缀下的对象或伪目录。加 --recursive 展开所有层级,--human-readable --summarize 显示类似 du 的汇总信息。

常见坑: 输出在 1000 条时静默截断。数量是 1000 整数倍说明可能还有更多。精确计数请用 list-objects-v2 配合 --starting-token 循环翻页。

例子
aws s3 ls
aws s3 ls s3://my-bucket/
aws s3 ls s3://my-bucket/logs/ --recursive --human-readable --summarize
aws s3 cp

在本地和 S3 之间、或两个 S3 路径之间复制文件。加 --recursive 复制整个目录树。支持 --include/--exclude glob 过滤和 --storage-class 设置存储类型。

常见坑: 不加 --recursive,`aws s3 cp ./dir s3://bucket/prefix/` 会静默复制零文件——它会尝试复制一个叫 "dir" 的文件,这个文件不存在。复制目录必须加 --recursive。

例子
aws s3 cp ./report.pdf s3://my-bucket/reports/report.pdf
aws s3 cp s3://my-bucket/reports/report.pdf ./report.pdf
aws s3 cp ./dist/ s3://my-bucket/ --recursive --exclude "*.map"
aws s3 cp s3://src-bucket/data/ s3://dst-bucket/data/ --recursive
aws s3 mv

将对象移动到目标位置,底层是复制后删原始。支持 --recursive 移动目录。跨账号或跨 region 移动会走 copy + delete,产生数据传输费用。

常见坑: S3 没有原生服务端重命名。mv 总是先 copy 再 delete,如果 copy 中途失败,原始对象不会被删。大对象可能超时,建议用 copy-object 精细控制。

例子
aws s3 mv s3://my-bucket/old-name.txt s3://my-bucket/new-name.txt
aws s3 mv s3://src-bucket/archive/ s3://dst-bucket/archive/ --recursive
aws s3 rm

删除 S3 中的一个对象。加 --recursive 删除前缀下所有对象。不开版本控制就是永久删除,无法恢复。加 --dryrun 预览会删哪些文件。

常见坑: `aws s3 rm s3://bucket/ --recursive` 会删掉整个桶里所有对象。对不熟悉的路径先跑 --dryrun 确认再执行。

例子
aws s3 rm s3://my-bucket/logs/2024-01-01.log
aws s3 rm s3://my-bucket/tmp/ --recursive --dryrun
aws s3 rm s3://my-bucket/tmp/ --recursive
aws s3 mb

创建新 S3 桶。在 us-east-1 以外必须指定 --region,否则无论你的默认 region 是什么,桶都会建到 us-east-1。

常见坑: 桶名在整个 AWS 所有账号中全局唯一。必须小写,3-63 字符,不含下划线。任何账号占用了这个名字就报 BucketAlreadyExists。

例子
aws s3 mb s3://my-unique-bucket-2024
aws s3 mb s3://my-bucket --region ap-east-1
aws s3 rb

删除空桶。加 --force 先删所有当前版本对象再删桶。如果有历史版本或删除标记,--force 不够用。

常见坑: 开了版本控制的桶,--force 只删当前版本对象和删除标记。历史版本不动,桶删不掉。要先用 list-object-versions + delete-object --version-id 批量清历史版本。

例子
aws s3 rb s3://empty-bucket
aws s3 rb s3://my-bucket --force
同步 (5)
aws s3 sync

Rsync 风格增量同步:只传体积或修改时间变了的文件。支持本地→S3、S3→本地、S3→S3,大目录比 cp --recursive 快得多。

常见坑: sync 对比的是体积和修改时间,不是内容哈希。改了内容但体积没变的文件不会重新传,除非时间戳也变了。要精确同步用 --exact-timestamps 或 --checksum-mode on。

例子
aws s3 sync ./dist s3://my-website-bucket/
aws s3 sync s3://my-bucket/data/ ./local-copy/
aws s3 sync s3://source-bucket/ s3://dest-bucket/ --source-region us-east-1 --region ap-east-1
aws s3 sync --delete

同步并删除目标中源端已不存在的文件,等价于 rsync --delete。部署静态站时必须加,否则旧文件留在桶里继续被访问。

常见坑: 在错误目录执行 `aws s3 sync . s3://bucket/ --delete` 会把整个桶清空。来源永远写到具体子目录如 ./dist,首次推新桶时加 --dryrun 确认再执行。

例子
aws s3 sync ./dist s3://my-website/ --delete --dryrun
aws s3 sync ./dist s3://my-website/ --delete
aws s3 sync ./dist s3://my-website/ --delete --cache-control "max-age=31536000" --exclude "*.html"
aws s3 sync --dryrun

预览同步变更,不实际传输任何数据。列出所有会发生的上传/更新/删除操作。在任何带 --delete 的 sync 前都应先跑一遍确认。

例子
aws s3 sync ./dist s3://my-bucket/ --delete --dryrun
aws s3 sync s3://prod-bucket/ s3://backup-bucket/ --dryrun
aws s3 sync --include / --exclude

用 glob 模式过滤同步哪些文件。过滤规则按顺序应用,后面的覆盖前面的。`--exclude "*" --include "*.js"` 只同步 .js 文件。

常见坑: 默认包含所有文件。`--include "*.css"` 不等于只同步 css,你必须先 --exclude "*"。顺序有影响:--exclude "*.log" --include "error.log" 会包含 error.log。

例子
aws s3 sync ./dist s3://bucket/ --exclude "*.map" --exclude "*.ts"
aws s3 sync ./dist s3://bucket/ --exclude "*" --include "*.html" --include "*.css" --include "*.js"
aws s3 sync --storage-class

指定同步时上传对象的存储类型。可选:STANDARD / INTELLIGENT_TIERING / STANDARD_IA / ONEZONE_IA / GLACIER_INSTANT_RETRIEVAL / GLACIER_FLEXIBLE_RETRIEVAL / DEEP_ARCHIVE。

常见坑: STANDARD_IA / ONEZONE_IA 按 128KB 最小对象大小和 30 天最小存储周期计费。小对象或短寿命对象在 IA 上反而更贵。访问模式不清楚时用 INTELLIGENT_TIERING。

例子
aws s3 sync ./backups/ s3://my-bucket/backups/ --storage-class GLACIER_INSTANT_RETRIEVAL
aws s3 sync ./logs/ s3://my-bucket/logs/ --storage-class INTELLIGENT_TIERING
预签名链接 (2)
aws s3 presign

为私有 S3 对象生成带签名的临时 GET URL。任何人拿到这个 URL 都能不需要凭证下载该对象。默认有效期 3600 秒(1 小时)。

常见坑: URL 继承了签名身份的权限:如果签名用的 IAM role 在有效期内被撤销,这个 URL 立刻失效。签名在每次请求时都对照当前 IAM 状态重新验证。

例子
aws s3 presign s3://my-bucket/invoice.pdf
aws s3 presign s3://my-bucket/invoice.pdf --expires-in 86400
aws s3 presign s3://my-bucket/report.csv --profile prod --expires-in 3600
aws s3api create-presigned-post

生成可以让浏览器直接上传到 S3 的 presigned POST 表单(URL + fields)。支持内容类型策略和文件大小限制,比 presigned PUT 更安全,适合前端直传 S3。

常见坑: 返回的 fields map 中所有字段必须作为表单字段放在文件字段之前。任何必须字段缺失或 Content-Type 与 policy 不匹配都会收到 403 加一段迷惑的 XML 报错。

例子
aws s3api create-presigned-post --bucket my-bucket --key uploads/avatar.jpg --conditions '[{"Content-Type": "image/jpeg"}]' --expires-in 300
静态网站 (3)
aws s3 website

为桶开启静态网站托管,设置索引文件和错误文件。开启后桶会有 HTTP 端点(不是 HTTPS,要 HTTPS 需要在前面加 CloudFront)。

常见坑: 静态网站托管需要对象公开可读。必须关掉 Block Public Access,再配 s3:GetObject 的桶策略给 Principal "*"。忘了这步每次访问都 403。

例子
aws s3 website s3://my-bucket --index-document index.html --error-document error.html
aws s3api put-bucket-website

精细控制静态网站托管配置,包括前缀重定向、条件重定向(按 HTTP 错误码)、自定义协议等复杂路由规则。

例子
aws s3api put-bucket-website --bucket my-bucket --website-configuration file://website.json
aws s3api get-bucket-website

获取桶当前的静态网站配置,包括索引/错误文档和所有路由规则。

例子
aws s3api get-bucket-website --bucket my-bucket
策略 & ACL (6)
aws s3api get-bucket-policy

获取桶的 JSON 策略。用于审计哪些账号、VPC 端点或 IP 段有权访问这个桶。

常见坑: 没有策略的桶只靠 IAM 身份策略控制。带显式 `Deny *` 的桶策略会把所有人包括 root 锁在外面。应用之前用 IAM Policy Simulator 验证。

例子
aws s3api get-bucket-policy --bucket my-bucket
aws s3api get-bucket-policy --bucket my-bucket --output text | python3 -m json.tool
aws s3api put-bucket-policy

应用新的 JSON 桶策略,覆盖现有策略。常用于跨账号访问授权、强制 TLS(拒绝 HTTP),或限制只能从特定 VPC 端点访问。

常见坑: 不小心设了 `Deny *` 策略会把你自己锁在外面,因为 S3 显式拒绝覆盖身份策略。应用之前务必验证,加 --expected-bucket-owner 限制调用范围。

例子
aws s3api put-bucket-policy --bucket my-bucket --policy file://bucket-policy.json
aws s3api delete-bucket-policy

删除整个桶策略。之后访问控制只靠 IAM 身份策略。

例子
aws s3api delete-bucket-policy --bucket my-bucket
aws s3api put-public-access-block

在桶级别开启四个公开访问封锁设置。全部设为 true 确保桶完全私有:BlockPublicAcls / IgnorePublicAcls / BlockPublicPolicy / RestrictPublicBuckets。

常见坑: 这些设置在账号层也存在。账号层 Block Public Access 优先级高于桶层。排查公开访问问题时两层都要检查:桶级别设置 AND 账号层 aws s3control get-public-access-block。

例子
aws s3api put-public-access-block --bucket my-bucket --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true
aws s3api get-public-access-block --bucket my-bucket
aws s3api get-public-access-block

查看桶当前的公开访问封锁配置。

例子
aws s3api get-public-access-block --bucket my-bucket
aws s3api get-bucket-acl

读取桶的遗留 ACL。现代 S3 推荐完全禁用 ACL(Object Ownership = Bucket owner enforced),改用桶策略。

常见坑: 2023 年 4 月起,新建桶默认禁用 ACL。传 --acl public-read 会报 AccessControlListNotSupported 错误。公开访问改用桶策略。

例子
aws s3api get-bucket-acl --bucket my-bucket
aws s3api put-bucket-ownership-controls --bucket my-bucket --ownership-controls Rules=[{ObjectOwnership=BucketOwnerEnforced}]
版本控制 (5)
aws s3api put-bucket-versioning

为桶开启对象版本控制。每次上传都会创建新版本;删除操作只添加删除标记(对象可以恢复)。版本控制只能暂停,不能关闭。

常见坑: 版本控制会增加存储费用:每个对象的每个历史版本都单独计费。加一条生命周期规则让非当前版本在 N 天后自动过期,避免频繁覆写的文件累积大量历史版本。

例子
aws s3api put-bucket-versioning --bucket my-bucket --versioning-configuration Status=Enabled
aws s3api put-bucket-versioning --bucket my-bucket --versioning-configuration Status=Suspended
aws s3api get-bucket-versioning

检查桶的版本控制状态:已开启/已暂停/从未开启(返回空)。

例子
aws s3api get-bucket-versioning --bucket my-bucket
aws s3api list-object-versions

列出桶里所有对象的历史版本和删除标记。版本多的桶输出会非常大,务必用 --prefix 缩小范围。

例子
aws s3api list-object-versions --bucket my-bucket --prefix logs/
aws s3api list-object-versions --bucket my-bucket --query "Versions[?Key=='config.json']"
aws s3api delete-object --version-id

永久删除对象的特定版本。不带 --version-id 在有版本控制的桶上只会加删除标记(软删除)。版本 ID 从 list-object-versions 获取。

常见坑: 删除"删除标记"会把上一个版本恢复成当前对象。删之前在 list-object-versions 输出中确认你删的是普通版本还是删除标记。

例子
aws s3api delete-object --bucket my-bucket --key config.json --version-id "3HL4kqtJvjVBH40Nrjfkd"
aws s3api get-object --version-id

通过版本 ID 下载对象的特定历史版本。用于恢复意外覆盖或对比版本间的变化。

例子
aws s3api get-object --bucket my-bucket --key config.json --version-id "3HL4kqtJvjVBH40Nrjfkd" ./recovered-config.json
生命周期 (3)
aws s3api put-bucket-lifecycle-configuration

定义生命周期规则:在 N 天后将对象转移到更便宜的存储类型、让当前版本过期(删除)、清理历史版本和删除标记、或自动终止未完成的分段上传。

常见坑: 生命周期规则基于对象创建日期,不是最后访问时间。一个传上去从没被读过的文件仍然会按计划转移/过期。生命周期转换操作本身有数据操作费用。

例子
aws s3api put-bucket-lifecycle-configuration --bucket my-bucket --lifecycle-configuration file://lifecycle.json
aws s3api get-bucket-lifecycle-configuration

获取桶当前配置的所有生命周期规则。

例子
aws s3api get-bucket-lifecycle-configuration --bucket my-bucket
aws s3api delete-bucket-lifecycle

删除桶的所有生命周期规则。已经在处理中的转移或过期操作会继续直到完成。

例子
aws s3api delete-bucket-lifecycle --bucket my-bucket
加密 (5)
aws s3api put-bucket-encryption

为桶开启默认服务端加密,对所有新上传对象生效。SSE-S3(AES-256)免费;SSE-KMS 用客户管理的密钥,每次 API 调用有费用。

常见坑: 默认加密不会追溯加密已有对象。如果要加密存量对象,需要跑 S3 Batch Operations 或者重新上传。

例子
aws s3api put-bucket-encryption --bucket my-bucket --server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}}]}'
aws s3api put-bucket-encryption --bucket my-bucket --server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "aws:kms", "KMSMasterKeyID": "arn:aws:kms:us-east-1:123456789012:key/abc-123"}, "BucketKeyEnabled": true}]}'
aws s3api get-bucket-encryption

查看桶当前的默认加密配置——使用哪种算法和 KMS 密钥。

例子
aws s3api get-bucket-encryption --bucket my-bucket
aws s3 cp --sse aws:kms

用 SSE-KMS 加密上传,使用账号默认 KMS 密钥。用 --sse-kms-key-id 指定客户管理的密钥 ARN 获得更多控制权。

常见坑: 跨账号下载 KMS 加密对象需要:下载方有该 KMS 密钥的 kms:Decrypt 权限 AND KMS 密钥策略允许对方账号。缺一不可,否则会收到看起来像 S3 策略问题的 Access Denied。

例子
aws s3 cp ./secrets.json s3://my-bucket/secrets.json --sse aws:kms
aws s3 cp ./secrets.json s3://my-bucket/secrets.json --sse aws:kms --sse-kms-key-id arn:aws:kms:us-east-1:123456789012:key/abc-123
aws s3 cp --sse AES256

用 SSE-S3(AES-256)加密上传,最简单的加密方式。AWS 管理密钥且无额外费用。有 s3:GetObject 权限的人无需额外 KMS 权限即可读取。

例子
aws s3 cp ./data.csv s3://my-bucket/data.csv --sse AES256
aws s3api delete-bucket-encryption

删除桶的默认加密策略。之后上传的新对象不会默认加密;已有对象的加密状态不变。

例子
aws s3api delete-bucket-encryption --bucket my-bucket
CORS (3)
aws s3api get-bucket-cors

获取桶的 CORS 配置,返回允许的来源、方法和请求头列表,用于控制浏览器跨域请求。

常见坑: CORS 只是浏览器安全机制。SDK 调用和服务端请求永远不受 CORS 配置影响。如果你的 web 应用报 CORS 错误但服务端可以访问,就是 CORS 配置缺失或有误。

例子
aws s3api get-bucket-cors --bucket my-bucket
aws s3api put-bucket-cors

从 JSON 文件设置 CORS 规则。通常对静态网站来源允许 GET/HEAD,对预签名上传来源允许 PUT/POST。

例子
aws s3api put-bucket-cors --bucket my-bucket --cors-configuration file://cors.json
aws s3api delete-bucket-cors

删除桶的所有 CORS 规则。删除后来自浏览器的所有跨域请求都会报 CORS 错误。

例子
aws s3api delete-bucket-cors --bucket my-bucket
底层 API (10)
aws s3api head-object

获取对象元数据(Content-Type/Length/ETag/Last-Modified/自定义 metadata),不下载内容。检查对象是否存在及其大小的最便宜方式。

常见坑: 403 意味着对象存在但没读权限;404 意味着对象不存在。CLI 的错误消息对两者都是 "Not Found",不检查 HTTP 状态码无法区分。

例子
aws s3api head-object --bucket my-bucket --key reports/annual.pdf
aws s3api head-object --bucket my-bucket --key image.png --expected-bucket-owner 123456789012
aws s3api head-bucket

检查桶是否存在及是否有权访问。返回 200(存在且有权)/403(存在但无权)/404(不存在)。适合健康检查和预飞行验证。

例子
aws s3api head-bucket --bucket my-bucket
aws s3api head-bucket --bucket my-bucket --expected-bucket-owner 123456789012
aws s3api get-object

带精细控制地下载对象:字节范围请求、条件 GET(If-Match/If-Modified-Since)、服务端校验和验证、响应头覆盖。

例子
aws s3api get-object --bucket my-bucket --key large.bin --range "bytes=0-99" /tmp/chunk.bin
aws s3api get-object --bucket my-bucket --key config.json --if-modified-since "2024-01-01" ./config.json
aws s3api put-object

在一次原子调用中上传带自定义 metadata/Content-Type/标签/存储类型/服务端加密的对象。需要比 aws s3 cp 更精细控制时使用。

常见坑: 单次 PUT 上限 5GB。更大的对象必须用分段上传。高层 aws s3 cp 和 aws s3 sync 默认超过 8MB 自动切换分段上传;s3api put-object 不会自动切换。

例子
aws s3api put-object --bucket my-bucket --key data.csv --body ./data.csv --content-type "text/csv" --metadata Author=alice,Project=analytics
aws s3api put-object --bucket my-bucket --key archive.tar.gz --body ./archive.tar.gz --storage-class GLACIER_INSTANT_RETRIEVAL
aws s3api copy-object

服务端复制对象,最多 5GB,同 region 内无数据传输费用。用于重命名、更换存储类型、换新 KMS 密钥重新加密、或更新 metadata 而不重新上传内容。

常见坑: 超过 5GB 的对象 copy-object 会报错。用 aws s3 cp s3:// s3:// 它会自动做分段复制。大批量大对象重加密考虑用 S3 Batch Operations。

例子
aws s3api copy-object --copy-source my-bucket/old-name.txt --bucket my-bucket --key new-name.txt
aws s3api copy-object --copy-source src-bucket/data.json --bucket dst-bucket --key data.json --storage-class STANDARD_IA
aws s3api copy-object --copy-source my-bucket/file.txt --bucket my-bucket --key file.txt --server-side-encryption aws:kms --ssekms-key-id new-key-arn --metadata-directive COPY
aws s3api list-objects-v2

分页列出带完整元数据的对象,支持前缀和分隔符过滤。推荐用 v2 而不是 v1:v2 用 continuation token 翻页,效率更高。

常见坑: 默认 max-keys 1000。如果响应有 NextContinuationToken,说明还有更多。用 --starting-token 加该值循环翻页,直到响应里没有 continuation token。

例子
aws s3api list-objects-v2 --bucket my-bucket --prefix logs/ --max-keys 100
aws s3api list-objects-v2 --bucket my-bucket --delimiter "/" --query "CommonPrefixes[].Prefix"
aws s3api list-objects-v2 --bucket my-bucket --prefix reports/ --query "Contents[].{Key: Key, Size: Size}"
aws s3api get-bucket-location

获取桶所在的 AWS region。遇到 "301 redirect" 或 "PermanentRedirect" 报错时很有用——桶存在但你打的是错误的 region 端点。

常见坑: us-east-1 的桶返回的 LocationConstraint 是空(null),不是字符串 "us-east-1"。自动化脚本里把空结果当 us-east-1 处理。

例子
aws s3api get-bucket-location --bucket my-bucket
REGION=$(aws s3api get-bucket-location --bucket my-bucket --query "LocationConstraint" --output text); REGION=${REGION:-us-east-1}
aws s3api put-bucket-tagging

为桶添加成本分配标签。这是桶级别的标签,不同于对象标签。用于在 Cost Explorer 中按项目/团队/环境追踪 S3 费用。

常见坑: 桶标签和对象标签完全独立。给桶打标签不会给桶内对象打标签。要标记对象需要上传时逐个设置,或用 S3 Batch Operations 给存量对象打标签。

例子
aws s3api put-bucket-tagging --bucket my-bucket --tagging '{"TagSet": [{"Key": "env", "Value": "prod"}, {"Key": "team", "Value": "backend"}]}'
aws s3api get-bucket-tagging --bucket my-bucket
aws s3api create-multipart-upload

发起分段上传,返回 UploadId。然后上传各分段(除最后一段外每段 ≥ 5MB),最后调 complete-multipart-upload 组装。超过 5GB 的对象必须用分段上传。

常见坑: 未完成的分段上传(已发起但从未完成或终止)会堆积在桶里并产生费用。务必设置一条生命周期规则在 N 天后自动终止未完成的分段上传。

例子
aws s3api create-multipart-upload --bucket my-bucket --key large-file.tar.gz
aws s3api list-multipart-uploads --bucket my-bucket
aws s3api abort-multipart-upload --bucket my-bucket --key large-file.tar.gz --upload-id <UploadId>
aws s3api restore-object

发起对 GLACIER_FLEXIBLE_RETRIEVAL 或 DEEP_ARCHIVE 归档对象的临时恢复。恢复完成后(根据恢复速度档位需要数小时到数天)对象可读取指定天数。

常见坑: 恢复不改变存储类型——在恢复窗口期你同时支付 Glacier 存储费用和标准层的临时副本费用。EXPEDITED 档位比 STANDARD 贵约 10 倍,但只需 1-5 分钟而不是 3-5 小时。

例子
aws s3api restore-object --bucket my-bucket --key archive/2023.tar.gz --restore-request Days=7,GlacierJobParameters={Tier=Standard}
aws s3api restore-object --bucket my-bucket --key archive/urgent.tar.gz --restore-request Days=1,GlacierJobParameters={Tier=Expedited}
常见坑 (10)
sync . --delete from the wrong directory

`aws s3 sync . s3://bucket/ --delete` 是最危险的 S3 错误:在错误目录里跑,就会把那里的文件同步过去,同时把桶里其他所有文件删光。

常见坑: 防范:来源永远写到有名字的构建目录(./dist ./build ./out),每次首次部署前跑 --dryrun,用桶策略限制只有 CI IAM 主体才能写入。

例子
aws s3 sync ./dist s3://my-site/ --delete --dryrun
aws s3 sync ./dist s3://my-site/ --delete
single PUT is limited to 5 GB

单次 put-object 超过 5GB 的文件会报 EntityTooLarge。高层 aws s3 cp 默认超过 8MB 自动切换分段上传;s3api put-object 不会自动切换。

常见坑: 单分段上限 5GB。对象总大小上限 5TB(需要分段上传)。每个分段 ≥ 5MB(最后一段除外)。未完成的分段上传持续计费,务必设置生命周期规则自动终止。

例子
aws s3 cp ./huge-backup.tar.gz s3://my-bucket/ --multipart-chunksize 100MB
list paginates silently at 1000 keys

`aws s3 ls` 最多返回 1000 条,没有翻页提示。list-objects-v2 同样默认 1000 条。如果响应有 NextContinuationToken,说明还有更多对象。

例子
aws s3 ls s3://my-bucket/ --recursive | wc -l
aws s3api list-objects-v2 --bucket my-bucket --query "length(Contents)"
--acl is ignored when Object Ownership is enforced

2023 年 4 月起新建桶默认 "Bucket owner enforced" Object Ownership,ACL 被禁用。上传时传 --acl public-read 会报 AccessControlListNotSupported。公开访问改用桶策略。

例子
aws s3api get-bucket-ownership-controls --bucket my-bucket
aws s3api put-bucket-ownership-controls --bucket my-bucket --ownership-controls Rules=[{ObjectOwnership=BucketOwnerPreferred}]
cross-account access requires two grants

跨账号读取需要两个授权同时满足:(1) 源桶策略给目标账号/角色授予 s3:GetObject;(2) 目标账号 IAM 策略给该账号/角色授予访问该桶 ARN 的 s3:GetObject。缺一不可,否则 AccessDenied。

常见坑: KMS 加密对象还需要第三层:KMS 密钥策略也必须允许目标账号使用密钥解密。三层都要检查:桶策略、身份策略、KMS 密钥策略。

例子
aws s3api get-bucket-policy --bucket src-bucket
aws s3api get-bucket-encryption --bucket src-bucket
cross-region data transfer is billed

跨 region 复制 S3 对象有数据传输费用(约 $0.02/GB)。同 region 内 S3-S3 传输免费。同 region 的 EC2→S3 免费;跨 region 有费用。

例子
aws s3 cp s3://us-bucket/data s3://eu-bucket/data --recursive --source-region us-east-1 --region eu-west-1
get-bucket-location returns null for us-east-1

get-bucket-location 对 us-east-1 的桶返回空 LocationConstraint,不是字符串 "us-east-1"。自动化脚本里务必把 null 标准化为 "us-east-1"。

例子
aws s3api get-bucket-location --bucket my-bucket
REGION=$(aws s3api get-bucket-location --bucket my-bucket --query "LocationConstraint" --output text); REGION=${REGION:-us-east-1}
bucket names are globally unique and lowercase

S3 桶名在整个 AWS 所有账号中全局唯一,不仅仅是你的账号。必须小写,3-63 字符,不含下划线和大写字母。任何账号占用了这个名字就报 BucketAlreadyExists。

例子
aws s3 mb s3://mycompany-prod-data-2024
versioning cannot be fully disabled once enabled

桶一旦开启版本控制,只能暂停(suspend),无法彻底关闭。暂停状态下已有历史版本仍然保留;新上传的对象使用 null 版本 ID。所有历史版本继续计费直到被显式删除。

例子
aws s3api put-bucket-versioning --bucket my-bucket --versioning-configuration Status=Suspended
aws s3api list-object-versions --bucket my-bucket --query "Versions[].{Key:Key,VersionId:VersionId}"
incomplete multipart uploads accumulate charges

每个发起了但从未 complete 或 abort 的分段上传,都会在桶里留下游离的分段,以标准存储类型计费。这些分段不出现在 aws s3 ls 的结果里。用 list-multipart-uploads 查找。

常见坑: 最佳实践:给任何使用分段上传 API 的桶都加一条 7 天后 AbortIncompleteMultipartUpload 的生命周期规则。这是防止无声存储成本积累的零成本保障。

例子
aws s3api list-multipart-uploads --bucket my-bucket
aws s3api abort-multipart-upload --bucket my-bucket --key file.gz --upload-id <UploadId>

这个工具能做什么

可搜索的 AWS S3 命令速查,58+ 条真实使用的命令,覆盖十一个主题,全是 云工程师、SRE 和后端开发者真正每天在跑的那些,不是 AWS API 大全。 十一个分区涵盖你需要的所有场景:基本操作(aws s3 ls/cp/mv/rm/mb/rb)、 同步(sync/--delete/--dryrun/--include/--exclude/--storage-class)、 预签名链接(自定义有效期的 aws s3 presign、浏览器直传用的 s3api create-presigned-post)、静态网站托管(aws s3 website、路由规则)、 策略 & ACL(桶策略、公开访问封锁、ACL 迁移到 Bucket owner enforced)、 版本控制(开启/暂停、list-object-versions、恢复特定版本、删除删除标记)、 生命周期规则(转移到便宜存储类型、非当前版本过期、终止未完成的分段上传)、 加密(SSE-S3/SSE-KMS/S3 Bucket Key、单次上传标志)、CORS(读/写/删规则 配浏览器与 SDK 区别说明)、底层 S3 API(head-object、字节范围 get-object、带元数据 put-object、服务端 copy-object、list-objects-v2 翻页、从 Glacier restore-object、分段上传生命周期)、以及专门讲坑的 部分,覆盖 10 个真正浪费下午的错误:致命的 sync 没写子目录、5GB 单次 PUT 上限、list 静默截断 1000 条、Object Ownership 让 --acl 失效、跨账号需要两个授权、跨 region 产生传输费用、us-east-1 返回 null LocationConstraint、桶名全局唯一规则、版本控制只能暂停不能关闭、 游离的分段上传持续产生费用。每条带完整语法、中英双语说明、真实坑提示、 1-3 条带真实桶名/版本 ID/ARN 的可直接复制例子。搜索跨命令/说明/坑/ 例子实时过滤。一键按分区缩范围。100% 客户端运行,不连 AWS 账号, 不接受任何凭证。

工具细节

输入
文件 + 文本
页面会根据工具类型展示文本框、数值控件、文件选择或结构化输入。
输出
即时结果 + 复制 + 预览
结果区优先给出可操作结果,支持项会显示复制、下载或可视化预览。
隐私
浏览器本地处理
主工具逻辑未发现外部 API 调用,输入通常留在当前标签页内处理。
保存 / 分享
可分享链接状态
关键设置会进入 URL,复制链接后别人能复现同一组参数。
性能预算
首屏 JS ≤ 28 KB
没有声明 WASM 依赖,适合快速打开和移动端使用。
适用场景
开发运维 · 程序员
分类和职业标签用于推荐相关工具、组织内链,并帮助用户快速判断是否适合当前任务。

怎么用

  1. 1. 输入

    把内容粘贴或拖入工具面板。

  2. 2. 处理

    点击按钮,在浏览器内本地处理,文件不上传。

  3. 3. 复制 / 下载

    一键复制结果或下载到本地。

AWS S3 命令速查 适合怎么用

适合穿插在写代码、查问题、做 Review、上线前的小任务里。

适合开发场景

  • 格式化、校验、压缩或检查和代码相关的文本。
  • 把片段整理好再放进文档、工单、提交或交接材料。
  • 不切换工具,快速检查一个小 payload。

开发检查项

  • 压缩、混淆这类不可逆处理,先对副本操作。
  • 除非确认工具本地处理,不要粘贴密钥和敏感片段。
  • 转换后的代码上线前,仍要跑自己的测试或 lint。

下一步可以接着做

这些入口会把当前任务接到更完整的工具链里。

  1. 1 AWS CLI 命令速查 AWS CLI 命令速查,80+ 条覆盖 EC2/S3/IAM/Lambda/RDS/EKS/CloudFormation,带真实例子。 打开
  2. 2 AWS IAM 速查表 搜索 IAM 策略字段、ARN、条件、托管策略、信任策略,并在浏览器本地检查 policy JSON。 打开
  3. 3 kubectl 命令速查 kubectl 命令速查,100+ 条 K8s 命令,真实例子和常见坑,含 YAML 片段。 打开

真实使用场景

  • 每次 CI 推送 Next.js 静态站到 S3 而不误清整个桶

    你把 Next.js 导出到 ./out,每次 main 分支推送就同步到 S3。速查直接 给你 `aws s3 sync ./out s3://acme-www/ --delete --cache-control "max-age=31536000" --exclude "*.html"`,加上 --dryrun 提示,第一次 跑时确认来源是 ./out 而不是仓库根目录。sync --delete 的坑提示帮你 躲开"忘写子目录结果清光整个桶"的事故。

  • 恢复一个被 CI 误推覆盖的 config.json

    一个配置错误的 CI 任务把 config.json 重新上传了错误的环境变量。 因为桶开了版本控制,你跑 aws s3api list-object-versions --bucket acme-prod --key config.json 找到最后一个正确版本的 VersionId,然后 aws s3api copy-object 把那个版本复制成当前版本。不需要外部备份, 版本控制本身就是按时间点的完整记录。

  • 给客户分享一份私有 S3 报告 24 小时

    一个私有桶里的 PDF 发票需要让客户访问,但不能创建 IAM 用户。你复制 `aws s3 presign s3://acme-invoices/2024-Q4.pdf --expires-in 86400 --profile prod` 把 URL 发邮件给客户。86400 秒后链接自动失效,没有 分享任何 AWS 凭证。速查的 presign 坑提示提醒你签名 IAM role 被撤 销的话链接会立刻失效。

  • 审计并修复一个遗留部署留下的公开可读 S3 桶

    安全扫描发现一个用 ACL 设了公开读的 S3 桶。你查 aws s3api get-bucket-acl 确认 ACL 授予了 public-read,再查 aws s3api get-bucket-ownership-controls 看 Object Ownership。然后把桶更新为 BucketOwnerEnforced(禁用 ACL),用带 aws:SecureTransport 条件的 桶策略强制 HTTPS,并限制只能从你的 VPC 端点访问。

常见踩坑

  • 跑 `aws s3 sync . s3://bucket/ --delete` 时没指定子目录如 ./dist。会把当前目录的文件同步过去,同时清空桶里其他所有内容。来源永远要固定到具体子目录。

  • 对 2023 年 4 月后创建的桶用 --acl public-read。新桶默认禁用 ACL(BucketOwnerEnforced),会报 AccessControlListNotSupported。改用桶策略给 Principal "*" 授予 s3:GetObject。

  • 存生产数据之前没开版本控制。S3 没有回收站,覆盖就是永久覆盖,除非你有版本控制或跨 region 复制作为保障。

隐私说明

这份速查就是一个静态页。搜索完全在浏览器里对内存里的 S3 命令数组过滤,不加载 AWS SDK、不弹凭证框、不发任何 API 请求。打开 DevTools → Network 一边输入一边看,零请求。你输入的内容不会离开浏览器。

常见问题

类似工具组合

做你这行的人, 还会一起用这些。

Made by Toolora · 100% client-side · Updated 2026-06-13