sts: предполагаемая роль не может получить доступ к лямбде, работающему внутри vpc
У меня есть проблема с моей лямбда-функцией, которая работает внутри общего vpc. Лямбда-функция в основном запрашивает таблицу динамодаба и выдает запросы на получение объектов s3 из ледника. Он работает нормально, когда я не указываю VPC в лямбде, но когда я это делаю, это выдает мне ошибку:
"errorMessage": "User: arn:aws:sts::123456789012:assumed-role/NLM-INT-draps-lambda-role/retrieval-1 is not authorized to perform: dynamodb:Query on resource: arn:aws:dynamodb:us-east-1:123456789012:table/S3_log/index/ContentType-LastChecked-index"
разрешение роли выглядит следующим образом:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:RestoreObject",
"s3:ListObjects",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::nlm-qa-int-draps-bucket",
"arn:aws:s3:::nlm-qa-int-draps-bucket/*"
],
"Effect": "Allow"
},
{
"Action": [
"dynamodb:PutItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:UpdateItem",
"dynamodb:UpdateTable"
],
"Resource": [
"arn:aws:dynamodb:us-east-1:123456789012:table/S3_log",
"arn:aws:dynamodb:us-east-1:123456789012:table/S3_log/index/item_status-index",
"arn:aws:dynamodb:us-east-1:123456789012:table/S3_log/index/ContentType-LastChecked-index"
],
"Effect": "Allow"
},
{
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"arn:aws:lambda:us-east-1:123456789012:function:nlm-int-draps-us-east-1-upload",
"arn:aws:lambda:us-east-1::function:retrieval-1",
"arn:aws:lambda:us-east-1:123456789012:function:final_lambda"
],
"Effect": "Allow"
}
]
}
и роль также имеет политику доверительных отношений, которая позволяет лямбде автоматически запускаться через cloudevent от имени вышеупомянутой роли:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Я также должен отметить, что даже когда я даю разрешение на роль лямбды AdministratorAccess, она все равно не срабатывает, если я запускаю лямбду внутри VPC, так что я могу поверить, что проблема не связана с разрешениями.
В другой лямбда-функции, которая также запускалась внутри того же VPC, запускаемого S3 PUTS для записи в DynamodB, мне пришлось создать конечные точки DynamoDB для доступа vpc к DynamodB, поэтому я думаю, что эта проблема может быть связана. любая помощь приветствуется, спасибо!
1 ответ
Учитывая описание вашей ситуации, кажется, что конфигурация конечной точки VPC вызывает некоторые проблемы с этой функцией Lambda. Вам нужно будет либо диагностировать причину, либо просто удалить конечную точку VPC.
Чтобы предоставить Интернет-доступ к лямбда-функции AWS, связанной с VPC (например, для доступа к конечным точкам DynamoDB), вам потребуется одно из следующих:
- Лямбда-функция AWS, настроенная на использование частной подсети, в которой есть запись таблицы маршрутов, указывающая на шлюз NAT в общедоступной подсети, ИЛИ
- Эластичный IP-адрес, назначенный Эластичному сетевому интерфейсу (ENI) функции Lambda, который появляется в VPC
Это позволит избежать необходимости настройки конечной точки VPC для DynamoDB.