使用Boto3向其他AWS账户S3写入数据时遇无效ARN格式错误
解决S3 put_object的ARN格式无效问题
问题根源
普通S3存储桶的Bucket参数不能直接传入桶ARN,仅当使用S3访问点(Access Point)或S3 on Outposts时,才需要用ARN替代桶名。你传入的是普通跨账户桶的ARN,不符合参数校验规则,因此触发ParamValidationError。
解决方案
方案1:直接使用桶名称(推荐)
从ARN中提取存储桶名称foo-bar-staging,替换Bucket参数的ARN值即可:
s3.put_object( Body=open("/tmp/file.csv", "rb"), Bucket="foo-bar-staging", Key="foo_barr/to_process/1234.csv", ACL='bucket-owner-full-control' )
补充权限说明
跨账户写入需确保:
- 当前执行代码的IAM身份(如Lambda角色、ECS任务角色等)拥有目标桶的
s3:PutObject权限 - 目标桶的桶策略已授权该IAM身份的写入操作
- 指定的
ACL='bucket-owner-full-control'可保证目标账户拥有文件的完全控制权,避免后续权限纠纷
方案2:使用S3访问点(若有特殊需求)
如果必须通过ARN访问,需在目标AWS账户创建S3访问点,将访问点ARN传入Bucket参数,并配置访问点的跨账户权限。此时Bucket参数需使用访问点ARN格式(如arn:aws:s3:eu-west-1:123456789123:accesspoint/your-access-point-name)。
内容的提问来源于stack exchange,提问作者Stéphane GRILLON
相关产品推荐
相关产品推荐

