如何触发S3复制失败以测试CloudWatch Alarm?
测试S3跨区域复制失败以触发CloudWatch告警的方法
场景说明
已配置S3跨区域复制规则,活跃区域存储桶的新对象会自动复制到被动区域存储桶;需创建并测试CloudWatch告警在复制失败时触发,但无法通过关停S3服务或区域来模拟故障。
可行的复制失败模拟方法
以下几种无需关停服务/区域的方式,可主动触发S3复制失败,对应不同的复制错误码:
1. 限制目标桶的复制权限
给被动区域的目标存储桶添加桶策略,明确拒绝复制所用IAM角色的写入权限:
- 编写桶策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:role/REPLICATION_ROLE_NAME" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::TARGET_BUCKET_NAME/*" } ] }
- 效果:当活跃桶有新对象时,复制进程因权限不足失败,对应错误码
AccessDenied(权限拒绝)。测试完成后,删除该桶策略即可恢复复制。
2. 上传不支持复制的加密对象
如果S3复制规则未配置支持SSE-KMS加密对象的复制:
- 上传一个使用自定义KMS密钥加密的对象到活跃区域存储桶;
- 效果:复制进程因加密配置不匹配或无KMS密钥访问权限失败,对应错误码
InvalidEncryptionConfiguration(加密配置无效)或AccessDenied。
3. 触发目标桶存储配额超限
- 给被动区域目标桶设置存储配额(通过S3控制台的「存储桶配额」选项);
- 批量上传文件至活跃桶,直至目标桶达到配额上限;
- 效果:后续复制请求会因存储配额不足失败,对应错误码
BucketQuotaExceeded(存储桶配额超出)。测试后调整配额即可恢复。
4. 利用对象覆盖限制触发失败
若复制规则配置为「不覆盖目标桶已存在的对象」:
- 先手动在被动区域目标桶上传一个特定名称的对象;
- 再上传同名对象至活跃区域存储桶;
- 效果:复制进程因目标对象已存在且不允许覆盖失败,对应错误码
ObjectAlreadyExists(对象已存在)。
常见S3复制错误码(中文对照)
AccessDenied:权限拒绝BucketQuotaExceeded:存储桶配额超出InvalidEncryptionConfiguration:加密配置无效ObjectAlreadyExists:对象已存在NoSuchBucket:目标存储桶不存在(不推荐此方法,需删除目标桶,不符合不关停的要求)
内容的提问来源于stack exchange,提问作者seba1685
相关产品推荐
相关产品推荐

