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.

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