Terraform配置S3跨账户复制:能否用正则表达式排除指定文件夹?
解决方案:S3跨账户复制排除指定文件夹
首先明确:S3跨账户复制(CRR)规则不支持正则表达式,所有前缀匹配均为精确前缀或前缀范围匹配,无法通过正则筛选UUID格式的文件夹。但你可以通过「包含所有对象 + 排除指定前缀」的方式实现需求。
可行配置方案
利用CRR的exclude过滤器,复制桶内所有内容的同时排除test/前缀的对象(S3中文件夹本质是前缀,test/才会匹配该文件夹下的所有内容)。结合你使用的Terraform AWS S3 Bucket模块,配置示例如下:
module "s3_bucket" { source = "terraform-aws-modules/s3-bucket/aws" bucket = "your-source-bucket-name" # 补充你的桶基础配置(如版本控制、加密等) replication_configuration = { role = "arn:aws:iam::[源账户ID]:role/s3-replication-role" rules = [ { id = "replicate-all-except-test-folder" status = "Enabled" destination = { bucket = "arn:aws:s3:::your-destination-bucket" account_id = "[目标账户ID]" # 跨账户场景必填 } filter = { exclude = { prefix = "test/" } } # 若源桶使用KMS加密,需启用以下配置并确保角色拥有对应KMS权限 source_selection_criteria = { sse_kms_encrypted_objects = { enabled = false # 根据实际加密情况调整 } } } ] } }
关键说明
- 前缀写法:必须使用
test/而非test,否则会误匹配所有以test开头的对象(如test-doc.txt),test/仅匹配该文件夹下的所有内容。 - 权限要求:确保复制角色拥有源桶的
s3:GetObject*、s3:ListBucket权限,以及目标桶的s3:ReplicateObject*、s3:PutObject*权限。 - 历史对象处理:CRR默认仅复制规则生效后新增的对象,若需复制历史对象,可通过S3批量操作工具触发复制任务。
内容的提问来源于stack exchange,提问作者Devops
相关产品推荐
相关产品推荐

