You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 # 根据实际加密情况调整
          }
        }
      }
    ]
  }
}

关键说明

  1. 前缀写法:必须使用test/而非test,否则会误匹配所有以test开头的对象(如test-doc.txt),test/仅匹配该文件夹下的所有内容。
  2. 权限要求:确保复制角色拥有源桶的s3:GetObject*、s3:ListBucket权限,以及目标桶的s3:ReplicateObject*、s3:PutObject*权限。
  3. 历史对象处理:CRR默认仅复制规则生效后新增的对象,若需复制历史对象,可通过S3批量操作工具触发复制任务。

内容的提问来源于stack exchange,提问作者Devops

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 20:20:18