我想知道 Amazon Simple Storage Service(Amazon S3)批量复制作业失败的原因。
简短描述
批量复制可能会因权限、策略或作业配置问题而失败。
为防止大量操作失败,Amazon S3 为每个批量操作作业设置了一个任务失败阈值。Amazon S3 会在作业运行至少 1,000 个任务后监控任务失败率。如果作业的失败率超过 50%,则该作业将失败。使用以下故障排除方法来确定并解决问题。然后,重新提交作业。
解决方法
批处理角色权限
向批处理角色授予以下权限:
- 提供对清单或配置的 PUT 权限。
- 提供对存储清单的存储桶中清单的 GET 权限。
- 如果您使用自己的清单,请向批处理角色授予访问该清单的权限。
- 授予 s3:CreateJob 权限以创建批处理作业。
- 如果您应用作业标签选项,则还需授予 s3:PutJobTagging 权限。
**注意:**要保存批量操作,批处理角色必须具有对清单文件的 GET 和 PUT 权限。有关详细信息,请参阅为 S3 批量复制配置 AWS Identity and Access Management (IAM) 角色。
复制角色权限
当批处理作业的失败率超过 50% 时,可能是复制角色配置存在问题。
配置复制角色时,请使用以下设置:
- 如果您对批处理作业和复制作业使用相同的角色,请同时授予 Amazon S3 和 Amazon S3 批量操作代入该角色的权限。
- 包含复制所需的最低权限。有关详细信息,请参阅在存储桶之间设置复制时,为什么我的 Amazon S3 对象不复制?
- 授予针对 AWS Key Management Service (AWS KMS)、存储桶密钥、对象所有权更改和删除标记复制的附加权限。
- 屏蔽公共访问权限设置。
- 查看可能附加到 IAM 角色的权限边界,因为这些边界可能会导致复制失败。
源存储桶和目标存储桶策略
使用以下存储桶策略设置:
- 如果目标存储桶位于另一个 AWS 账户中,请在该存储桶的源复制规则中为复制角色授予复制对象的权限。这些权限是对 IAM 角色策略的补充。此外,不要将目标存储桶配置为申请方付款。
- 默认情况下,源存储桶所有者无权访问其他账户创建的对象。复制配置仅会复制源存储桶所有者有权访问的对象。要解决此问题,请在对象所有权控制中停用访问控制列表 (ACL),或将对象的所有权更改为源账户。
- 如果您将批处理作业的清单存储在跨账户存储桶中,请允许该存储桶账户访问该清单。为批处理角色添加存储桶策略权限。
加密对象的 AWS KMS 权限
对加密对象使用以下 AWS KMS 设置:
- 如果您对清单和报告所在存储桶使用 AWS KMS 加密或对象级加密,请将批处理角色包含在密钥中。AWS KMS 密钥必须允许批处理角色从存储桶下载和上传数据。
- 如果复制涉及加密的源存储桶或目标存储桶,请使用 AWS KMS 密钥为复制角色和批处理角色授予访问权限。授予批处理角色下载清单的权限。
- 如果您根据加密上下文授予权限,请包含基于存储桶密钥配置的 ARN。请参阅在存储桶之间设置复制时,为什么我的 Amazon S3 对象不复制?
- 使用 AWS KMS 加密的 Amazon S3 清单报告。Amazon S3 不支持手动生成的 AWS KMS 加密清单文件用于批量操作。
显式拒绝语句
如果存储桶策略的 Deny(拒绝)语句基于网络限制操作,则 Amazon S3 将无法执行复制。您的 Amazon S3 复制无法使用您为私有访问配置的虚拟私有云 (VPC) 端点或 Amazon S3 接入点。
要移除限制,请执行以下操作:
- 配置清单所在存储桶的策略,使其不拒绝批处理角色所需的任何操作。
- 如果您在创建 S3 批处理作业时使用私有访问权限,请授予 VPC 端点创建批处理作业的权限。
- 确认您未在 IAM 策略、AWS Organizations 服务控制策略 (SCP)、存储桶策略或 AWS KMS 策略中拒绝所需的复制权限。
批量复制作业配置错误
配置问题可能会导致以下错误响应。
Manifest generation found no keys matching the filter criteria
不要在清单中包含 Amazon S3 Glacier 或 Amazon S3 Glacier Deep Archive 中的对象,因为复制操作找不到这些对象。
如果复制规则的前缀筛选条件或批量复制作业中的筛选条件与存储桶中的前缀不匹配,请恢复这些对象。恢复对象后,请重新执行复制操作。
SrcGetObjectNotPermitted 或 SrcHeadObjectNotPermitted
当您在复制规则中配置的 IAM 角色没有访问对象的权限时,您将会收到 SrcGetObjectNotPermitted 或 SrcHeadObjectNotPermitted 错误。当 IAM 角色无法从源存储桶检索对象元数据时,您也可能会收到这些错误之一。要解决这些问题,请在 IAM 角色策略中添加 s3:GetObjectVersionForReplication 权限。
有关详细信息,请参阅设置创建复制规则的权限。
DstPutObjectNotPermitted
当您收到 DstObjectNotPermitted 错误时,意味着 Amazon S3 无法将对象复制到目标存储桶。要解决此问题,请同时在 IAM 角色策略和目标 S3 存储桶策略中授予 s3:ReplicateObject 或 s3:ObjectOwnerOverrideToBucketOwner 权限。
Batch job ran successfully but the number of objects expected in destination bucket is not the same
当清单中所列对象与筛选条件不匹配时,将会出现此错误。要解决此问题,请修复您在创建作业时选择的筛选条件或复制规则配置中的拼写错误。
400 InvalidRequest: Task failed due to missing VersionId
当作业在清单中遇到版本 ID 字段为空的对象时,将会出现此错误。要解决此问题,请将空版本 ID 转换为 null 字符串。
Reasons for failure.The job report could not be written to your report bucket.Please check your permissions.
Amazon S3 不支持在您指定用于存储批量操作完成报告的存储桶上启用对象锁定。相反,请将报告存储在未启用对象锁定的 S3 存储桶中。
Objects skipped without an error message
Amazon S3 不会复制源存储桶中来自其他复制配置的副本对象。
此外,Amazon S3 不会将对象复制到已成功完成复制的同一目标存储桶。相反,Amazon S3 会跳过该对象,且不返回错误消息。
监控
批量复制作业完成后,Amazon S3 会在您指定的目标存储桶或前缀中生成批量操作完成报告。此报告会提供详细信息,其中包括失败及相关的错误消息。查看批量操作完成报告,以确定在复制过程中失败的对象或操作,以及其相关的错误或失败原因。
使用 Amazon S3 事件通知,在对象未复制到其目标 AWS 区域时向您发送通知。
**注意:**为 Amazon S3 准备清单需要时间。但是,如果您的批处理作业在几个小时内一直处于 Preparing(正在准备)阶段,或完成百分比一直不变,请联系 AWS Support。
相关信息
如何解决 Amazon S3 批量操作问题?