调用AWS DataSync CreateTask接口报ARN账户与认证用户不匹配问题求助
问题根因与修复方案
这个报错的核心是接口参数校验时读取到空的AWS账号ID,触发了账号归属一致性校验失败,具体原因和修复方法如下:
- 代码中
AgentArns参数传入了空字符串:DataSync Agent仅用于对接本地存储、其他云服务商存储等非AWS公有云托管的存储资源,对接公有云S3不需要该参数,传入空ARN会直接导致接口读取到空账号ID,触发报错。 - 资源账号归属不匹配:S3桶所属账号ID、S3访问角色
BucketAccessRoleArn对应的账号ID、Lambda执行角色所属账号ID三者不一致也会触发该报错。
具体修复步骤
- 移除无效的
AgentArns参数
如果没有使用本地部署的DataSync Agent,直接删除代码中的AgentArns配置项即可。如果确实需要使用Agent,请填写你预先在AWS控制台创建的DataSync Agent完整ARN,禁止传入空字符串。 - 校验所有ARN的账号一致性
确认S3桶所属账号ID、BucketAccessRoleArn中的账号ID、Lambda执行角色所属账号ID完全一致,跨账号使用DataSync需要额外配置RAM资源共享,未配置的情况下不允许混用不同账号的资源ARN。 - 校验S3访问角色的信任关系
确认BucketAccessRoleArn对应的IAM角色的信任策略中已添加datasync.amazonaws.com作为信任主体,该角色是给DataSync服务访问S3使用的,不是给Lambda使用的。
修复后的代码示例
import json import logging import sys import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) client = boto3.client('datasync', region_name='us-east-1') create_location_s3 = client.create_location_s3( Subdirectory='/', S3BucketArn='arn:aws:s3:::data-sync-bucket', S3StorageClass='STANDARD', S3Config={ # 请替换此处的XXXX为你的实际AWS账号ID,确保和S3桶所属账号一致 'BucketAccessRoleArn': 'arn:aws:iam::XXXX:role/datasync-data-sync-bucket-ARN' }, Tags=[ { 'Key': 'name', 'Value': 'datasync-lambda' }, ] )
内容的提问来源于stack exchange,提问作者vaquar khan
相关产品推荐
相关产品推荐

