【问题标题】:Unable to validate the following destination configurations (S3 to SQS)无法验证以下目标配置(S3 到 SQS)
【发布时间】:2020-06-06 05:39:20
【问题描述】:

我正在尝试使用无服务器设置一个工作流,该工作流创建一个新的 S3 存储桶、一个新的 SQS 队列,当在 S3 存储桶中创建一个对象时,将一条消息放入队列并在足够多的情况下启动一个 lambda队列中的消息。我的资源块中有以下内容:

resources:
  Resources:
    AnalyticsQueue:
      Type: "AWS::SQS::Queue"
      Properties:
        QueueName: "my-queue"
    S3EventQueuePolicy:
      Type: AWS::SQS::QueuePolicy
      DependsOn: AnalyticsQueue
      Properties:
        PolicyDocument:
          Id: SQSPolicy
          Statement:
            - Effect: Allow
              Action: sqs:SendMessage:*
              Resource: !Ref AnalyticsQueue
        Queues:
          - !GetAtt AnalyticsQueue.Arn
    AnalyticsBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: "my-bucket"
        NotificationConfiguration:
          QueueConfigurations:
            - Event: s3:ObjectCreated:*
              Queue: !GetAtt AnalyticsQueue.Arn

当我尝试部署它时,我收到以下错误:

发生错误:AnalyticsBucket - 无法验证以下目标配置(服务:Amazon S3;状态代码:400;错误代码:InvalidArgument;请求 ID:E2A1F8BD6BEE6EF4;)。

通过谷歌搜索,我发现问题出在 AnalyticsBucketNotificationConfiguration 块中。如果我删除了整个子块,它会部署得很好,但显然不会在创建对象时在队列上生成消息。

正在寻找解决此问题的方法。

【问题讨论】:

    标签: amazon-s3 amazon-cloudformation amazon-sqs serverless-framework


    【解决方案1】:

    许多 AWS 配置允许您连接服务,如果它们没有权限,它们会在运行时失败,但是 S3 通知配置确实会检查一些目标以进行访问。

    在这种情况下,您还没有允许 S3 向 SQS 发送消息。

    应该是这样的:

      PolicyDocument:
        Id: SQSPolicy
        Statement:
        - Sid: SQSEventPolicy
          Effect: Allow
          Principal: "*"
          Action: SQS:*
          Resource: "*"
          Condition:
            ArnLike:
              aws:SourceArn: arn:aws:s3:::*
    

    【讨论】:

      【解决方案2】:

      添加此访问策略对我有用:

      {
        "Version": "2012-10-17",
        "Id": "example-ID",
        "Statement": [
          {
            "Sid": "example-statement-ID",
            "Effect": "Allow",
            "Principal": {
              "Service": "s3.amazonaws.com"
            },
            "Action": [
              "SQS:SendMessage"
            ],
            "Resource": "arn:aws:sqs:Region:account-id:queue-name",
            "Condition": {
              "ArnLike": {
                "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1"
              },
              "StringEquals": {
                "aws:SourceAccount": "bucket-owner-account-id"
              }
            }
          }
        ]
      }
      

      来源:https://docs.aws.amazon.com/AmazonS3/latest/userguide/grant-destinations-permissions-to-s3.html

      【讨论】:

        【解决方案3】:

        我在授予跨账户访问权限以将 S3 更新消息发布到我的 SQS 时遇到了同样的问题。 可以参考https://docs.aws.amazon.com/AmazonS3/latest/userguide/grant-destinations-permissions-to-s3.html

        我有一个 CDK 包,以下对我有用 我们可以设置策略。

            this.<QueueName>.addToResourcePolicy(
                new iam.PolicyStatement({
                    effect: Effect.ALLOW,
                    principals: [new SecureServicePrincipal('s3.amazonaws.com')],
                    actions: ['SQS:SendMessage'],
                    resources: [this.<QueneName>.queueArn],
                    conditions: {
                        ArnLike: {
                            'aws:SourceArn': <S3ARN>,
                        },
                        StringEquals: {
                            'aws:SourceAccount': <S3AccountId>,
                        }
                    }
                })
            );
        

        【讨论】:

          【解决方案4】:

          AWS:SourceAccount 应该是您的帐户 ID(页面右上角,点击您的用户名)

          "StringEquals": {
            "AWS:SourceAccount": "XXXXXXXXXXX"
          }   
          

          AWS Documentation

          【讨论】:

            【解决方案5】:

            我尝试在 AWS 控制台中手动创建事件,但遇到了同样的问题。 如果我们将事件注册到加密 SQS,似乎会出现此问题。我试图禁用 SQS 加密来解决这个问题。也许对于加密的 SQS,需要进一步配置。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-05-16
              • 2021-03-16
              • 2021-11-26
              • 2018-04-23
              • 2021-07-04
              • 2020-04-02
              • 2017-12-17
              • 2019-06-20
              相关资源
              最近更新 更多