首页 > 解决方案 > “AWS::SQS::QueuePolicy”中的“Principal”属性未纳入 AWS ARN

问题描述

我在不同的帐户中使用 CloudFormation 创建了 SNS 和 SQS,并且能够订阅 SNS,能够接收消息,按预期工作。使用的代码:

Account-02 中的 CF:

AWSTemplateFormatVersion: 2010-09-09
    Resources:
        Queue:
        Type: AWS::SQS::Queue
        Properties:
            QueueName: "SampleQueue"
        SqsQueuePolicy:
        Type: AWS::SQS::QueuePolicy
        Properties:
            PolicyDocument:
            Version: '2012-10-17'
            Id: MyQueuePolicy
            Statement:
                - Sid: Allow-SNS-SendMessage
                Effect: Allow
                Principal: "*"
                Action:
                    - sqs:SendMessage
                Resource: !GetAtt Queue.Arn
                Condition:
                    ArnEquals:
                    aws:SourceArn: "arn:aws:sns:eu-west-1:<account-01>:SampleTopic"
            Queues:
            - !Ref Queue
    
        SnsSubscription:
        Type: AWS::SNS::Subscription
        Properties:
            Protocol: sqs
            Endpoint: !GetAtt Queue.Arn
            Region: "eu-west-1"

            TopicArn: "arn:aws:sns:eu-west-1:<account-01>:SampleTopic"

当 Principal 设置如下时,它不起作用(没有收到 SQS 的消息)。有什么不对吗?

Principal:
    AWS:
      - arn:aws:iam::<account-02>:user/user01

它也适用于“SQS::QueuePolicy”主体,如下所示:

Principal:
    Service:
      - sns.amazonaws.com

想要查看 Principal 为何没有采用有效的 AWS ARN?

(是的,Policy 中的 Condition 元素足够严格,其他主题无法发布到队列中,但我们的安全团队对此并不满意……想了解为什么 Principal 不接受有效的吗?)

标签: amazon-web-servicesamazon-cloudformation

解决方案


推荐阅读