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

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

  1. RoleName: ALLOW_LAMBDA_EXECUTE
    • With Policy access to AWS Lambda full access, AWS Lambda execute, 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."}**

Я что-то упустил?


person Vasu Seshadri    schedule 29.01.2018    source источник
comment
Установите доверительное отношение на Лямбда. В консоли IAM - ›Перейдите к своей роли IAM -› щелкните вкладку «Доверительные отношения» - ›и измените доверие на lambda.amazonaws.com   -  person krishna_mee2004    schedule 29.01.2018
comment
У меня есть настройка в роли - ›Вкладка« Доверительные отношения », как показано ниже. Принципал: {Service: lambda.amazonaws.com, Federated :ognito-identity.amazonaws.com}, Action: sts: AssumeRoleWithWebIdentity, Condition: {StringEquals: { ognito-identity.amazonaws.com:aud: us-east-2: e565545e-44ca-4557-baa5-56eb6e9f68ac}, ForAnyValue: StringLike: {cognito-identity.amazonaws.com:amr: не аутентифицировано   -  person Vasu Seshadri    schedule 30.01.2018


Ответы (2)


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

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

{
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "Service": "lambda.amazonaws.com"
    },
    "Action": "sts:AssumeRole"
  }
}
person Alexis N-o    schedule 30.01.2018

После долгих размышлений, просмотра нескольких документов и выполнения некоторых задач 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 работает с когнитивной идентификацией, а также с AWS APIMicroServices ...

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

person Vasu Seshadri    schedule 31.01.2018