跨账号S3批量复制遇SrcGetObjectNotPermitted错误求解决方案
针对你遇到的S3批量复制作业出现SrcGetObjectNotPermitted错误的问题,可按以下步骤排查解决:
检查源存储桶的存储桶策略
即使IAM角色已配置s3:GetObjectVersionForReplication权限,源存储桶的桶策略可能存在显式拒绝规则,或未包含允许该角色访问对象的语句。需确保桶策略中没有限制该角色访问出错对象的条件(如IP限制),并添加允许角色执行s3:GetObjectVersionForReplication的授权语句。验证出错对象的ACL设置
部分对象可能带有独立的访问控制列表(ACL),导致IAM角色无法读取。检查这些对象的ACL配置,确认源账号的IAM角色拥有读取该对象版本的权限。确认KMS密钥配置的完整性
检查KMS密钥的ARN是否完整(你提供的策略中eu-后缺少具体区域,如eu-west-1,实际配置需填写完整区域)。同时确保KMS密钥的密钥策略中,明确允许该IAM角色执行kms:Decrypt、kms:Encrypt和kms:GenerateDataKey操作,且无额外条件限制(如加密上下文匹配要求)。检查S3批量作业的版本范围
若出错对象为旧版本,需确认批量作业是否包含了所有对象版本。如果作业仅指定复制最新版本,旧版本对象可能因权限继承问题无法被访问。验证IAM角色的信任关系
确保IAM角色的信任策略允许S3批量操作服务(batchoperations.s3.amazonaws.com)扮演该角色,否则即使权限策略正确,服务也无法获取权限执行操作。手动测试单个对象的访问权限
使用AWS CLI模拟批量作业的权限,执行以下命令测试读取出错对象版本:aws s3api get-object-version --bucket source-bucket --key 出错对象的键 --version-id 对象版本ID /tmp/test-file若命令执行失败,可根据返回的错误信息进一步定位权限问题。
内容的提问来源于stack exchange,提问作者M B

