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, вы можете создать ее сейчас. Вот шаги, чтобы привязать политику к роли:

  1. Откройте IAM-консоль.
  2. В панели навигации выберите «Роли».
  3. Выберите роль, которую вы хотите изменить.
  4. Выберите вкладку «Разрешения».
  5. Выберите «Прикрепить политики».
  6. В поле поиска введите имя политики, созданной на шаге 1.
  7. Выберите политику из списка, а затем выберите «Прикрепить политику».

Шаг 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 имеет безопасный доступ к секретам, которые ей необходимы для работы.