Разрешить AWS Lambda доступ к базе данных RDS

Я пытаюсь подключиться к базе данных RDS с помощью AWS Lambda (Java).

Какой IP-адрес следует включить в правилах группы безопасности RDS?

6 ответов

Решение

Вы не можете включить это через IP. Сначала вам нужно включить доступ к VPC для лямбда-функции, во время которой вы назначите ей группу безопасности. Затем в группе безопасности, назначенной экземпляру RDS, вы включите доступ для группы безопасности, назначенной функции Lambda.

Вы можете настроить Lambda для доступа к вашему экземпляру RDS.

Вы можете включить это, используя консоль управления Lambda. Выберите лямбда-функцию, которой требуется доступ к экземпляру RDS, затем перейдите в "Конфигурация" -> "Дополнительные настройки" и выберите VPC (в котором находится ваш экземпляр RDS), к которому вам нужен доступ.

узнайте больше здесь http://docs.aws.amazon.com/lambda/latest/dg/vpc.html

Для всех, кто ищет краткое решение или лямбда-конфигурацию, предоставленную через SAM / Cloudformation, у меня сработало следующее:

я. создайте SG, разрешающий исходящий доступ к желаемому порту, через который вы хотите подключиться (например: 5432 или 3306. Обратите внимание, что правила для входящего трафика не влияют на лямбда, я полагаю, в настоящее время). Примените этот SG к вашей лямбде.

II. создать SG, разрешающий входящий трафик на желаемый порт (скажем, 5432 или 3306), который ссылается на первый SG, чтобы трафик был заблокирован только для этого SG. Примените этот SG к своему экземпляру RDS.

Дальнейшие детали:

Лямбда SG:

      Direction    Protocol    Port     Source
Outbound     TCP         5432     ALL

RDS SG:

      Direction    Protocol    Port     Source
Inbound      TCP         5432     Lambda SG
Outbound     TCP         5432     ALL

SAM template.yaml для предоставления вашей лямбды:

        someLambda:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub ${AWS::StackName}-someLambda
      Runtime: nodejs12.x
      Handler: index.handler
      CodeUri: ./dist/someLambda
      MemorySize: 128
      Timeout: 5 # ensure matches you PG/ mySQL connection pool timeout
      ReservedConcurrentExecutions: 5
      Role: !GetAtt yourLambdaExecutionRole.Arn
      VpcConfig:
        SubnetIds: [subnet-1234, subnet-5678, subnet-9101112]
        SecurityGroupIds: [sg-your-lambda-sg]

Вот что я сделал

Я назначил те же подсети и VPC для служб Lambda и RDS. Теперь я создал шлюз NAT, выбрав одну из подсетей, чтобы Lambda могла использовать этот шлюз NAT для взаимодействия с внешним миром.

И последнее - добавить входящую запись в группу безопасности, которая прикреплена к RDS, а также к функциям Lambda. Добавьте в белый список порт БД 5432 в моем случае для postgresql и добавьте имя группы безопасности в источник.

Группа безопасности каким-то образом заносит себя в белый список, добавляя запись во входящие правила.

Это сработало для меня очень хорошо.

Рекомендуемый способ по-прежнему (1) VPC и data-api, однако вы также можете использовать (2), который является прокси-сервером RDS (https://aws.amazon.com/blogs/compute/using-amazon-rds-proxy-with-aws-lambda/), который поддерживает как MySQL, так и PostgreSQL с 30 июня 2020 года.

Вам не нужно использовать IP.

Я предполагаю, что ваш RDS находится в частной подсети VPC. Это означает, что ваша лямбда также должна быть в VPC для связи с базой данных.

Предположим, что учетные данные для вашего RDS находятся в секретном менеджере. Вы можете дать необходимое разрешение секрету, чтобы ваша лямбда могла получить доступ к секрету расшифровки в лямбда-функции.

Добавьте правильное правило входа в базу данных. Убедитесь, что ваши группы безопасности настроены правильно. Вы также можете использовать прокси-сервер RDS для повторного использования подключений к базе данных для повышения производительности.

В этом посте рассказывается о том, как общаться с RDS из лямбда https://www.freecodecamp.org/news/aws-lambda-rds/

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