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