【问题标题】:Access to the resource https://queue.amazonaws.com/ is denied error in AWS Lambda functionAWS Lambda 函数中拒绝访问资源 https://queue.amazonaws.com/ 错误
【发布时间】:2021-08-27 10:31:49
【问题描述】:

我正在尝试使用 boto3 设置从 AWS 账户 A 中的 AWS Lambda 到 AWS 账户 B 中的 SQS 的跨账户数据传输。以下是我遵循的步骤。

  1. 在账户 A 中创建了一个 IAM 角色,该角色对账户 B 中的 SQS 队列具有“SendMessage”访问权限。(给定账户 B 的 SQS 队列的 ARN)
  2. 在账户 A 的 IAM 角色的信任关系中添加了 AWS 账户 B 的账户 ID。
  3. 将此 IAM 角色附加到 Lambda 函数并编写代码以使用 SQS 队列 URL 将消息发送到 SQS 队列。
  4. 在账户 B 中创建了一个 SQS 队列。
  5. 在 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.

================================================ ========================================

任何人都可以帮助了解这里出了什么问题吗?

【问题讨论】:

  • 您需要分享您的整个设置。您的 IAM 角色策略是什么样的(向我们展示原始 json)?
  • 感谢您的回复,但问题已解决。
  • 您愿意为可能遇到此问题的其他人详细说明吗?你是怎么解决的?
  • 该死,我刚拿到 denvercoder3。

标签: amazon-web-services aws-lambda boto3 amazon-iam amazon-sqs


【解决方案1】:

如果您尝试从启用了私有 DNS 的 VPC 内部通过 boto3 Python 库(例如 OP 的 lambda)访问 SQS,则可能会发生此错误。

AWS documentation:

私有 DNS 不支持旧端点,例如 queue.amazonaws.com 或 us-east-2.queue.amazonaws.com。

(强调我的)

解决这个错误:

  1. 在您的 VPC 中为 com.amazonaws.<region>.sqs 创建一个 VPC 终端节点
  2. 将适当的服务端点 URL 传递给 boto3.client() 构造函数:
    import boto3
    
    client = boto3.client('sqs', endpoint_url='https://sqs.%s.amazonaws.com' % region)
    

IAM 权限留给读者作为练习。

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 1970-01-01
    • 2020-10-04
    • 2019-04-06
    • 2019-12-20
    • 2017-10-07
    • 2021-05-19
    • 2020-09-30
    • 2016-09-29
    相关资源
    最近更新 更多