AWS Lambda - Лямбда не может выполнять роль, определенную для функции

Я пытаюсь получить доступ к лямбда-функции с помощью iOS Swift, и вот моя настройка AWS Role

  1. RoleName: ALLOW_LAMBDA_EXECUTE
    • Благодаря полному доступу к полному доступу AWS Lambda, выполнению AWS Lambda, AmazonCognitoDeveloperAuthenticatedIdentities
    • Доверительные отношения: Разрешить услуги: lambda.amazonaws.com и условия имеют идентичность Cognito с "неаутентифицированными"
  2. Cognito Identity Pool: имеет роль ALLOW_LAMBDA_EXECUTE в роли не прошедшей проверку подлинности
  3. Неаутентифицированные идентификационные данные: имеет флажок Включить доступ к неаутентифицированным идентификационным данным
  4. В лямбда-функции для функции 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."}**

Я что-то здесь упускаю?

2 ответа

Похоже, вы сконфигурировали свою роль Cognito для принятия на себя Lambda.

Вы должны установить следующее Trust Relationship для роли ALLOW_LAMBDA_EXECUTION не ALLOW_LAMBDA_EXECUTE:

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

После долгих размышлений, прохождения нескольких документов и проработки RnD все стало работать.

Да, доверительные отношения должны иметь выполнение лямбда-выражения и действие: 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, потому что она не может взять на себя роль, которая, я думаю, имеет смысл, поскольку у нее мало сил для этого.

Поэтому я создал две роли различий: Роль 1- с указанными выше доверительными отношениями, назначенными для роли доступа к идентификатору с федерированным Cognito, - без изменений в доверительных отношениях, назначенных роли Лямбда.

Теперь и мой доступ к iOS работает с идентификатором Cognito, а также с AWS APIMicroServices...

Действительно понадобилось время, чтобы взломать это.

Другие вопросы по тегам