Рубрики
Uncategorized

Использование AWS KMS в AWS Lambda

Использование информации о учетной записи в среде Lambda такой ключ доступа и пароль, почтовый сервер … Помечено с AWS, DEVOPS, LAMBDA, KMS.

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

Решение здесь — использовать KMS

AWS KMS поддерживает симметричные и асимметричные CMks.

  • Симметричный CMK:

    Представляет собой один 256-битный секретный ключ шифрования, который никогда не оставляет AWS KMS незашифрованным. Чтобы использовать свой симметричный CMK, вы должны позвонить AWS KMS.

  • Асимметричный CMK:

    Представляет математически связанный открытый ключ и пару частных ключей, которую вы можете использовать для шифрования и дешифрования или подписи и проверки, но не обоих. Частный ключ никогда не оставляет AWS KMS незашифрованным. Вы можете использовать открытый ключ в AWS KMS, позвонив операции AWS KMS API или загрузите открытый ключ и используете его за пределами AWS KMS.

1. Создать симметричный CMK (пользовательский основной ключ)

2. Создать ламбда функцию с помощью чаши

Ref: Часть темы

2.1 Создать новый проект Chalice

chalice new-project encrypt-test

2.2 Создать обработчик функции в приложении .py

import boto3
import os
from chalice import Chalice
from base64 import b64decode


app = Chalice(app_name='MyDecryptFunction')
app.debug = True


@app.lambda_function(name='MyDecryptFunction')
def lambda_handler(event, context):
    encrypted = os.getenv('SES_ID')
    decrypted = boto3.client('kms', region_name='ap-southeast-1').decrypt(
        CiphertextBlob=b64decode(encrypted),
        EncryptionContext={'LambdaFunctionName': os.getenv('AWS_LAMBDA_FUNCTION_NAME')}
    )['Plaintext'].decode('utf-8')
    app.log.debug(f"{decrypted}")

2.3 Проект развертывания (используйте по умолчанию AWS регион в нынешнем env)

chalice deploy
Creating deployment package.
Creating IAM role: encrypt-test-dev
Creating lambda function: encrypt-test-dev-MyDecryptFunction
Resources deployed:
  - Lambda ARN: arn:aws:lambda:ap-southeast-1:1111111111111:function:encrypt-test-dev-MyDecryptFunction

3. Результат проверки

3.1. Роль IAM, она может обновить это, чтобы ограничить ресурс

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "*"
            ],
            "Sid": "0f1ea010d9414ac08ac9f94a4e67bfa1"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        }
    ]
}

3.2 Функция лямбда

4. Генерировать зашифрованный ключ

5. Создать тест и запустить

Оригинал: «https://dev.to/vumdao/using-aws-kms-in-aws-lambda-2jm2»