1

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

  1. 角色名称:ALLOW_LAMBDA_EXECUTE
    • 通过策略访问 AWS Lambda 完全访问、AWS Lambda 执行、AmazonCognitoDeveloperAuthenticatedIdentities
    • 信任关系:允许服务:lambda.amazonaws.com 并且条件具有“未经身份验证”的 Cognito 身份
  2. Cognito 身份池:在未经身份验证的角色下具有角色 ALLOW_LAMBDA_EXECUTE
  3. 未经身份验证的身份:已选中启用对未经身份验证的身份的访问
  4. 在 Lambda 中,对于函数 GetProcess(),具有 ExecutionRole:ALLOW_LAMBDA_EXECUTION

有了所有这些,当我使用我的 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."}**

我在这里错过了什么吗?

4

2 回答 2

0

经过深思熟虑,浏览了多个文档并做了一些 RnD,事情开始奏效。

是的,信任关系应该有 lambda execute 和 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 联合身份访问角色 2- 分配给 Lambda 角色的信任关系没有变化。

现在,我的 iOS 访问都适用于 cognito 身份,也适用于 AWS APIMicroServices ...

确实花了一段时间来破解这个。

于 2018-01-31T22:21:55.090 回答
0

好像您将您的 Cognito 角色配置为由 Lambda 承担。

您必须Trust Relationship为角色ALLOW_LAMBDA_EXECUTION not ALLOW_LAMBDA_EXECUTE设置以下内容:

{
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "Service": "lambda.amazonaws.com"
    },
    "Action": "sts:AssumeRole"
  }
}
于 2018-01-30T11:31:11.793 回答