我正在尝试使用boto3设置从AWS帐户A中的AWS Lambda到AWS帐户B中的SQS的跨帐户数据传输。以下是我所遵循的步骤。
- 在账户A中创建IAM角色;发送消息";访问帐户B中的SQS队列。(给定帐户B的SQS排队的ARN(
- 在账户A中IAM角色的信任关系中添加了AWS账户B的账户ID
- 将此IAM角色附加到Lambda函数,并编写了一个代码,使用SQS队列URL将消息发送到SQS队列
- 在帐户B中创建了一个SQS队列
- 在SQS队列访问策略中,我编写了一个策略,允许帐户a的lambda角色向其SQS队列发送消息
====================================================
After that when I am trying to test my lambda function, it is giving me below error.
[ERROR] ClientError: An error occurred (AccessDenied) when calling the SendMessage operation: Access to the resource https://queue.amazonaws.com/ is denied.
================================================
有人能帮忙了解一下这里出了什么问题吗?。
如果您试图在启用了专用DNS的VPC内通过boto3 Python库(例如OP的lambda(访问SQS,则可能会发生此错误。
根据AWS文件:
专用DNS不支持传统端点,如queue.amazonaws.com或us-east-2.queue.amasonaws.com.
(强调矿(
要解决此错误:
- 在您的专有网络中为
com.amazonaws.<region>.sqs
创建一个专有网络端点 - 将适当的服务端点URL传递给
boto3.client()
构造函数:import boto3 client = boto3.client('sqs', endpoint_url=f'https://sqs.{region}.amazonaws.com')
IAM权限留给读者练习。