放大,用户未被授权在资源上执行iam:passRole。

4

我正在尝试初始化一个已有的"react-ts" Amplify项目,该项目中配置了约8个服务。当我运行amplify push时,除了以下错误外,一切似乎都很顺利和成功:

我收到了这个错误:

Resource Name: 2021/10/08/[$LATEST]c1c602b361e347ad83d49f77293e6aae (Custom::LambdaCallout)
Event Type: create
Reason: Received response status [FAILED] from custom resource. Message returned: See the details in CloudWatch Log Stream: 2021/10/08/[$LATEST]c1c602b361e347ad83d49f77293e6aae (RequestId: 90c39ffc-b3ee-4830-ae87-7df3cd3a0770)

以下是给定地址在CloudWatch上的日志记录:

2021-10-08T06:28:37.448Z    d30823f5-a9f8-4d7e-a823-dd53b298a2fb    INFO    Response body:
 
{
    "Status": "FAILED",
    "Reason": "See the details in CloudWatch Log Stream: 2021/10/08/[$LATEST]3b533dd8fb9a43bc921cfe635d2bc945",
    "PhysicalResourceId": "2021/10/08/[$LATEST]3b533dd8fb9a43bc921cfe635d2bc945",
    "StackId": "arn:aws:cloudformation:us-east-1:474847889857:stack/amplify-storyliner-staging-44500-authstorylinerb9277983-1V5J90W5KFK1A/cef02b40-2800-11ec-bcb5-0adb3c7f2f15",
    "RequestId": "f7b5fc9e-0a46-43ae-bf7e-eb19fb81285e",
    "LogicalResourceId": "MFALambdaInputs",
    "NoEcho": false,
    "Data": {
        "err": {
            "message": "User: arn:aws:sts::474847889857:assumed-role/storylb9277983_totp_lambda_role-staging/amplify-storyliner-staging-44500-authsto-MFALambda-tA8KTT12iWvY is not authorized to perform: iam:PassRole on resource: arn:aws:iam::474847889857:role/snsb927798344500-staging because no identity-based policy allows the iam:PassRole action",
            "code": "AccessDeniedException",
            "time": "2021-10-08T06:28:37.445Z",
            "requestId": "3978bf89-5872-460d-b991-c3cd4e5280e1",
            "statusCode": 400,
            "retryable": false,
            "retryDelay": 38.192028876441576
        }
    }
}

我尝试创建名为"snsb927798344500-staging"的角色,并添加所需的策略,但每次尝试重新运行amplify push命令时,都会出现错误提示说该snsb927798344500-staging已经存在。 因此我认为是Amplify在每次推送后创建了该角色,并在流程失败后将其删除。这就是为什么我无法在推送过程后再次看到"snsb927798344500-staging"角色的原因。

1个回答

5

这条具体的信息似乎与CLI上的此GitHub问题有关:https://github.com/aws-amplify/amplify-cli/issues/8363

今天我们遇到了同样的问题,以下解决方法对我们有效。

以下是复制的解决方案:

此问题是由于MFALambda角色中缺少策略导致的,该问题已在#7729中得到修复。您可以尝试在您的auth CloudFormation中添加以下策略并查看是否解决了该问题。您需要添加的部分是名称为corecocf3573d0_sns_pass_role_policy的策略。

# Snippet
MFALambdaRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName:
        Fn::If:
          - ShouldNotCreateEnvResources
          - corecocf3573d0_totp_lambda_role
          - Fn::Join:
              - ''
              - - corecocf3573d0_totp_lambda_role
                - '-'
                - Ref: env
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - lambda.amazonaws.com
            Action:
              - sts:AssumeRole
      Policies:
        - PolicyName: corecocf3573d0_totp_pass_role_policy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - iam:PassRole
                Resource:
                  Fn::If:
                    - ShouldNotCreateEnvResources
                    - arn:aws:iam:::role/corecocf3573d0_totp_lambda_role
                    - Fn::Join:
                        - ''
                        - - arn:aws:iam:::role/corecocf3573d0_totp_lambda_role
                          - '-'
                          - Ref: env
          # New policy
        - PolicyName: corecocf3573d0_sns_pass_role_policy
          PolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Action:
                  - 'iam:PassRole'
                Resource: !GetAtt SNSRole.Arn

非常感谢,我在这里卡了几天。但幸运的是,解决方案非常好用,现在项目已经启动了。我只需要在/amplify/auth/<user>/<user>-cloudinformation-template.yml中添加新策略即可。 - khalid obaidi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接