【发布时间】:2020-05-16 07:11:32
【问题描述】:
我的公司有一个 Amplify 项目,该项目具有 2 个不同的环境(产品、开发),其中包含 Cognito 以及一些 lambda 和 api。一切正常,直到我尝试执行amplify pushcommand 来更新一个 lambda 函数。
这是 AWS 仪表板上 CloudFormation 的错误:
策略中的主体无效:“SERVICE”:“cognito-.amazonaws.com” (服务:AmazonIdentityManagement;状态代码:400;错误代码: 格式错误的政策文件;请求编号: 169462d5-58fb-40af-9c2d-69178442ecd6)
这是来自amplify push 输出的错误:
UPDATE_FAILED SNSRole
AWS::IAM::Role 2020 年 1 月 30 日星期四 13:46:08 GMT-0200(巴西利亚 夏令时)保单中的本金无效: “SERVICE”:“cognito-.amazonaws.com”(服务:AmazonIdentityManagement; 状态码:400;错误代码:MalformedPolicyDocument;请求编号: 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: "*"
【问题讨论】:
-
您是否运行了“放大身份验证更新”或手动编辑 IAM 角色?您可以使用命令 'amplify env pull --restore' 来恢复标志以用云中的内容覆盖您的本地后端配置。否则,如果您仍然遇到此问题,请随时联系 Amplify 团队:github.com/aws-amplify/amplify-cli/issues
-
我觉得这个错误有些问题。上面写着
Invalid principal in policy: "SERVICE":"cognito-.amazonaws.com",但应该是cognito-idp.amazonaws.com。我对 Amplify 不是很熟悉,所以我不知道它是从哪里来的。 -
你说的都是对的。在全新的 amplify-cli 安装上执行“pull --restore”是可行的,但如果它不是全新的安装,我认为不知何故,“amplify-cli”正在使用“cognito-.amazonaws.com”缓存错误的文件而不是新的,正确的,“cognito-idp.amazonaws.com”
标签: amazon-web-services aws-lambda amazon-cloudformation aws-amplify