AWS Lambda - 为函数定义的角色不能由 Lambda 代入



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

  1. 角色名称: ALLOW_LAMBDA_EXECUTE
    • 通过对 AWS Lambda 完全访问权限的策略访问权限,AWS Lambda 执行、AmazonCognitoDeveloperAuthenticatedIdentity(AmazonCognitoDeveloperAuthenticatedIdentity(
    • 信任关系:允许服务:lambda.amazonaws.com 和条件具有"未经身份验证"的 Cognito 标识
  2. Cognito 身份池:在未经身份验证的角色下ALLOW_LAMBDA_EXECUTE角色
  3. 未经身份验证的身份
  4. :已选中启用对未经身份验证的身份的访问
  5. 在 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."}**

我在这里错过了什么吗?

似乎您已将 Cognito 角色配置为由 Lambda 代入。

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

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

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

是的,信任关系应该有lambda执行和操作: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...

确实花了一段时间才破解。

相关内容

  • 没有找到相关文章

最新更新