AWS Lambda — это сервис, который позволяет запускать код без выделения серверов или управления ими. AWS Secrets Manager — это сервис управления секретами, который помогает защитить доступ к вашим приложениям, сервисам и ИТ-ресурсам. Чтобы использовать Secrets Manager вместе с Lambda, вам необходимо предоставить Lambda доступ к секретам, хранящимся в Secrets Manager. В этом руководстве описаны шаги, необходимые для предоставления AWS Lambda доступа к Secrets Manager.
Шаг 1. Создайте IAM-политику
Первым шагом является создание политики IAM, которая предоставляет Lambda доступ к Secrets Manager. Вы можете создать новую политику или изменить существующую. Вот пример политики, которая предоставляет доступ только для чтения ко всем секретам в Secrets Manager:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SecretsManagerRead",
"Effect": "Allow",
"Action": [
"secretsmanager:GetResourcePolicy",
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret",
"secretsmanager:ListSecrets",
"secretsmanager:ListSecretVersionIds"
],
"Resource": "*"
}
]
}
Шаг 2. Присоедините IAM-политику к роли выполнения Lambda
После того, как вы создали политику IAM, вам необходимо привязать ее к роли, которую Lambda использует для выполнения вашей функции. Если вы еще не создали роль для Lambda, вы можете создать ее сейчас. Вот шаги, чтобы привязать политику к роли:
- Откройте IAM-консоль.
- В панели навигации выберите «Роли».
- Выберите роль, которую вы хотите изменить.
- Выберите вкладку «Разрешения».
- Выберите «Прикрепить политики».
- В поле поиска введите имя политики, созданной на шаге 1.
- Выберите политику из списка, а затем выберите «Прикрепить политику».
Шаг 3: Измените свою лямбда-функцию
Последний шаг — изменить вашу функцию Lambda, чтобы использовать секреты, хранящиеся в Secrets Manager. Вы можете сделать это, вызвав Secrets Manager API из вашей функции. Вот пример фрагмента кода Python, который извлекает секретное значение из Secrets Manager:
import boto3
import json
def lambda_handler(event, context):
secret_name = "my_secret_name"
region_name = "us-west-2"
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)
get_secret_value_response = client.get_secret_value(
SecretId=secret_name
)
if 'SecretString' in get_secret_value_response:
secret = get_secret_value_response['SecretString']
else:
secret = json.loads(get_secret_value_response['SecretBinary'])
# Your code here
Заключение
Предоставление AWS Lambda доступа к Secrets Manager — это простой процесс, который включает в себя создание политики IAM, ее присоединение к роли выполнения Lambda и изменение вашей функции Lambda для использования секретов, хранящихся в Secrets Manager. Следуя этим шагам, вы можете гарантировать, что ваша функция Lambda имеет безопасный доступ к секретам, которые ей необходимы для работы.