Использование учетной информации о данных в лямбдах окружающей среде такой ключ доступа и пароль, домен почтового сервера, например. следует зашифровать.
Решение здесь — использовать 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»