首页 > 解决方案 > 仅通过使用 SQS::QueuePolicy 'principal' 属性的 Lambda 函数来限制对 SQS 的访问

问题描述

我有一个使用此队列策略的 SQS 队列

SQSPolicy:
    Type: AWS::SQS::QueuePolicy
    Properties:
      Queues:
        - !Ref myQueue
      PolicyDocument:
        Statement:
          - Effect: 'Allow'
            Principal: '*'
            Action:
              - 'SQS:SendMessage'
              - 'SQS:ReceiveMessage'
              - 'SQS:DeleteMessage'
              - 'SQS:GetQueueAttributes'
            Resource: !GetAtt myQueue.Arn

有了这个策略Principal: '*',我使用 aws-sdk 从一个 lambda 函数(我提供了 sendMessage 权限)发送消息到队列,我成功地将消息发送到队列中。

但我试图通过我的项目中的 lambda 函数来限制对队列的访问。因此,当我添加条件和策略时,如下所示:

SQSPolicy:
    Type: AWS::SQS::QueuePolicy
    Properties:
      Queues:
        - !Ref myQueue
      PolicyDocument:
        Statement:
          - Effect: 'Allow'
            Principal: '*'
            Action:
              - 'SQS:SendMessage'
              - 'SQS:ReceiveMessage'
              - 'SQS:DeleteMessage'
              - 'SQS:GetQueueAttributes'
            Resource: !GetAtt myQueue.Arn
            Condition:
              ArnLike:
                aws:SourceArn: arn:aws:*

有了这个,我在 sendMessage 调用期间在我的 lambda 函数中出现错误。

Access to the resource https://sqs.us-east-1.amazonaws.com/ is denied.

有谁知道解决方案?

标签: amazon-web-servicesqueuemessage-queueamazon-sqsaws-sqs-fifo

解决方案


推荐阅读