如何通过CloudFormation规则将S3指定文件夹内容复制到另一S3文件夹
实现S3指定文件夹内容跨桶复制(CloudFormation方案)
你的问题出在未配置目标前缀转换——默认情况下,S3复制会保留源对象的完整路径(包括前缀from_A/),所以才会把整个文件夹结构复制到目标桶。通过CloudFormation完全可以实现你的需求,核心是在复制规则中指定目标前缀,并确保IAM权限匹配。
CloudFormation模板示例
AWSTemplateFormatVersion: '2010-09-09' Resources: SourceBucket: Type: AWS::S3::Bucket Properties: BucketName: ABC-Inbound ReplicationConfiguration: Role: !GetAtt ReplicationRole.Arn Rules: - Status: Enabled Priority: 1 DeleteMarkerReplication: Status: Disabled Filter: Prefix: "from_A/" Destination: Bucket: !GetAtt TargetBucket.Arn Prefix: "A_data/" # 将源前缀替换为目标文件夹路径 TargetBucket: Type: AWS::S3::Bucket Properties: BucketName: workloads ReplicationRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: s3.amazonaws.com Action: sts:AssumeRole Policies: - PolicyName: S3ReplicationPermissions PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - s3:GetReplicationConfiguration - s3:ListBucket Resource: !GetAtt SourceBucket.Arn - Effect: Allow Action: - s3:GetObjectVersionForReplication - s3:GetObjectVersionAcl - s3:GetObjectVersionTagging Resource: !Sub "${SourceBucket.Arn}/from_A/*" - Effect: Allow Action: - s3:ReplicateObject - s3:ReplicateDelete - s3:ReplicateTags Resource: !Sub "${TargetBucket.Arn}/A_data/*"
关键配置说明
- 源前缀过滤:
Filter.Prefix: "from_A/"确保只处理源桶中该文件夹下的对象,不会扫描其他路径。 - 目标前缀转换:
Destination.Prefix: "A_data/"告诉S3将源对象路径中from_A/之后的部分,直接追加到目标桶的A_data/路径下。例如源对象from_A/report.pdf会被复制为A_data/report.pdf,而非保留原前缀结构。 - 最小权限原则:IAM角色的权限严格限定在源前缀和目标前缀范围内,避免不必要的权限授予。
额外注意事项
- 该配置仅对新创建或修改的对象生效,历史存量对象需要手动同步,可使用AWS CLI命令:
aws s3 sync s3://ABC-Inbound/from_A/ s3://workloads/A_data/ - 此方案仅适用于同一区域、同一账户的S3存储桶,完全匹配你的需求场景。
内容的提问来源于stack exchange,提问作者bluelabel
相关产品推荐
相关产品推荐

