Разрешить 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/