尝试进行放大推送时出现 AWS Amplify SNSRole 错误

AWS Amplify SNSRole error when trying to do an amplify push

我的公司有一个 Amplify 项目,该项目具有 2 个不同的环境(生产环境、开发环境)以及 Cognito 和一些 lambda 和 api。一切正常,直到我尝试执行 amplify push 命令来更新一个 lambda 函数。 这是 AWS 仪表板上 CloudFormation 的错误:

Invalid principal in policy: "SERVICE":"cognito-.amazonaws.com" (Service: AmazonIdentityManagement; Status Code: 400; Error Code: MalformedPolicyDocument; Request ID: 169462d5-58fb-40af-9c2d-69178442ecd6)

这是 amplify push 输出的错误:

UPDATE_FAILED SNSRole
AWS::IAM::Role Thu Jan 30 2020 13:46:08 GMT-0200 (Brasilia Summer Time) Invalid principal in policy: "SERVICE":"cognito-.amazonaws.com" (Service: AmazonIdentityManagement; Status Code: 400; Error Code: MalformedPolicyDocument; Request ID: 56f492a2-c40e-4827-8c53-07cdf44bc780)

如您所见,Cognito 的云形成文件有错误,但当前的 SNSRole 配置是:

  # BEGIN SNS ROLE RESOURCE
  SNSRole: 
  # Created to allow the UserPool SMS Config to publish via the Simple Notification Service during MFA Process
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Ref roleName
      AssumeRolePolicyDocument: 
        Version: "2012-10-17"
        Statement: 
          - Sid: ""
            Effect: "Allow"
            Principal: 
              Service: "cognito-idp.amazonaws.com"
            Action: 
              - "sts:AssumeRole"
            Condition: 
              StringEquals:
                sts:ExternalId: !Ref roleExternalId
      Policies: 
        - 
          PolicyName: !Ref policyName
          PolicyDocument: 
            Version: "2012-10-17"
            Statement: 
              - 
                Effect: "Allow"
                Action: 
                  - "sns:Publish"
                Resource: "*"

您是否检查过管理您的环境的 S3 存储桶的内容?我们遇到了类似的问题,发现虽然我们本地的 SNSRole Configuration 是对的,但是 S3 bucket 的 CloudFormation 模板文件是旧的,仍然有 'cognito-.amazon...' 的问题。

尝试在本地更正这个,然后推送到云端,它会用正确的文件覆盖远程 CloudFormation 模板文件。

希望一切顺利!