【问题标题】:AWS Lambda - The role defined for the function cannot be assumed by LambdaAWS Lambda - 为函数定义的角色不能由 Lambda 承担
【发布时间】:2023-04-06 10:43:01
【问题描述】:

我正在尝试使用 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."}**

我错过了什么吗?

【问题讨论】:

  • 将您的信任关系设置为 Lambda。在 IAM 控制台中 -> 转到您的 IAM 角色 -> 单击信任关系选项卡 -> 并将信任更改为 lambda.amazonaws.com
  • 我在角色中确实有设置 --> 信任关系选项卡如下“主体”:{“服务”:“lambda.amazonaws.com”,“联合”:“认知身份。 amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-2:e565545e-44ca-4557 -baa5-56eb6e9f68ac" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated"

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


【解决方案1】:

您似乎将您的 Cognito 角色配置为由 Lambda 承担。

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

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

【讨论】:

    【解决方案2】:

    经过深思熟虑,浏览了多个文档并做了一些 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...

    确实需要一段时间才能破解它。

    【讨论】:

      猜你喜欢
      • 2017-05-12
      • 2016-07-24
      • 2016-09-26
      • 1970-01-01
      • 2019-12-17
      • 2021-08-30
      • 2021-10-24
      • 2019-12-31
      • 2021-09-17
      相关资源
      最近更新 更多