如何克隆S3存储桶并完整复制其所有权限、配置属性及相关参数
S3存储桶完整克隆操作方案
aws s3 sync确实仅支持同步桶内的对象数据,不会同步桶级别的配置、权限、KMS加密设置等属性,你可以按以下流程实现存储桶的完整克隆:
前置条件
- 本地已安装配置AWS CLI,操作账号拥有源桶、目标桶的S3管理权限、KMS密钥读取权限、相关IAM配置权限
- 目标桶名称符合S3全局唯一命名规则,你在目标区域拥有S3桶创建权限
步骤1:导出源桶全量配置
执行以下aws s3api命令导出源桶的所有配置项:
- 桶区域配置:
aws s3api get-bucket-location --bucket 源桶名称 - 桶权限策略:
aws s3api get-bucket-policy --bucket 源桶名称 - 桶ACL配置:
aws s3api get-bucket-acl --bucket 源桶名称 - 桶加密配置(含KMS密钥设置):
aws s3api get-bucket-encryption --bucket 源桶名称 - 其他配置:版本控制规则、生命周期规则、跨域CORS配置、桶标签、事件通知配置分别对应
get-bucket-versioning、get-bucket-lifecycle-configuration、get-bucket-cors、get-bucket-tagging、get-bucket-notification-configuration命令
步骤2:创建目标桶并同步所有配置
- 按照源桶的区域配置创建目标桶,同区域创建可省略
--create-bucket-configuration参数:aws s3api create-bucket --bucket 目标桶名称 --region 目标区域 --create-bucket-configuration LocationConstraint=目标区域 - 将步骤1导出的所有配置逐一应用到目标桶,所有配置写入对应
put-bucket-*系列命令即可,比如写入KMS加密配置的命令为:aws s3api put-bucket-encryption --bucket 目标桶名称 --server-side-encryption-configuration 导出的加密配置JSON内容
步骤3:同步桶内对象及对象级属性
执行带参数的s3 sync命令同步对象+元数据+ACL:aws s3 sync s3://源桶名称 s3://目标桶名称 --acl bucket-owner-full-control --metadata-directive COPY --source-region 源桶区域 --region 目标区域
补充说明:如果需要同步后的对象仍使用源KMS密钥加密,可在上述命令末尾追加
--sse aws:kms --sse-kms-key-id 源KMS密钥ARN;如果源桶开启了版本控制,需要额外遍历所有版本ID同步,或使用s3cmd sync --recursive --preserve s3://源桶名称 s3://目标桶名称实现全版本同步。
可选自动化方案
如果需要频繁执行克隆操作,可自行编写Shell/Python脚本批量调用S3 API,自动完成配置导出、目标桶配置写入、数据同步的全流程,无需手动逐行执行命令。
内容的提问来源于stack exchange,提问作者Gonzalo
相关产品推荐
相关产品推荐

