AWS Lambda - Lambda无法假定为该函数定义的角色

时间:2018-01-29 20:54:22

标签: amazon-web-services aws-lambda aws-ios aws-iam

我正在尝试使用iOS Swift访问Lambda函数,这是我设置的AWS角色

  1. RoleName:ALLOW_LAMBDA_EXECUTE
    • 使用Policy访问AWS Lambda完全访问权限,AWS Lambda执行,AmazonCognitoDeveloperAuthenticatedIdentities
    • 信任关系:允许服务:lambda.amazonaws.com并且条件具有“未经身份验证”的Cognito身份
  2. Cognito Identity Pool:在未经身份验证的角色下具有ALLOW_LAMBDA_EXECUTE角色
  3. 未经身份验证的身份:已启用对未经身份验证的身份的访问权限
  4. 在Lambda中,对于函数GetProcess(),具有ExecutionRole:ALLOW_LAMBDA_EXECUTION
  5. 所有这些,当我使用我的iPhone应用程序(使用模拟器)执行相同操作时,我收到此错误。

    "x-amzn-errortype" = **AccessDeniedException**;
    
    -[AWSJSONResponseSerializer responseObjectForResponse:originalRequest:currentRequest:data:error:] | Response body:
    **{"Message":"The role defined for the function cannot be assumed by Lambda."}**
    

    我在这里遗漏了什么吗?

2 个答案:

答案 0 :(得分:0)

好像您已将Lambito配置为Cognito角色。

您必须为角色Trust Relationship 而非 ALLOW_LAMBDA_EXECUTION设置以下ALLOW_LAMBDA_EXECUTE

{
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "Service": "lambda.amazonaws.com"
    },
    "Action": "sts:AssumeRole"
  }
}

答案 1 :(得分:0)

经过大量的商议,经历多个文档并做了一些RnD,事情开始起作用了。

是的,Trust Relationship应该有lambda执行和Action:sts:AssumeRoleWithWebIdentity它应该有条件

{
"Version": "2018-1-30",
"Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com",
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "identity-pool"
        },
        "ForAnyValue:StringLike": {
          "cognito-identity.amazonaws.com:amr": "unauthenticated"
        }
      }
    }
  ]
}

现在,这对Lambdas角色来说效果不佳'它不能承担这个角色,我觉得它很有意义,因为它没有什么能力这么做。

因此我创造了2个差异角色 角色1-具有分配给Cognito fedrated identitiy access的上述信任关系 角色2-没有更改分配给Lambda角色的信任关系。

现在,我的iOS访问都可以使用cognito身份以及AWS APIMicroServices ...

确实需要一段时间来解决这个问题。