как расшифровать переменные среды в aws лямбда, используя python 3 - PullRequest
1 голос
/ 13 июля 2020

Я пытаюсь зашифровать свою postgres строковую переменную подключения.

db_host = os.environ.get('db_host')
db_port = os.environ.get('db_port')
db_name =os.environ.get('db_name')
db_user =os.environ.get('db_user')
db_pass =os.environ.get('db_pass')

как видите, я использовал переменную среды, но хочу ее зашифровать.

У меня есть выяснил способ шифрования, он также проверял способ его расшифровки.

Лямбда-функция предложила приведенный ниже код.

import boto3
import os

from base64 import b64decode

ENCRYPTED = os.environ['db_host']
# Decrypt code should run once and variables stored outside of the function
# handler so that these are decrypted once per container
DECRYPTED = boto3.client('kms').decrypt(
    CiphertextBlob=b64decode(ENCRYPTED),
    EncryptionContext={'LambdaFunctionName': os.environ['AWS_LAMBDA_FUNCTION_NAME']}
)['Plaintext'].decode('utf-8')

def lambda_handler(event, context):
    # TODO handle the event here
    pass

Вопросы:

  1. Могу ли я включить это в тот же файл .py, который содержит мою лямбда-функцию?

  2. Это показывает расшифровку одной переменной. У меня есть несколько переменных, как мне реализовать это, чтобы все расшифровывались в одном go?

EncryptionContext = {'LambdaFunctionName': os.environ [ 'AWS_LAMBDA_FUNCTION_NAME']}) ['Открытый текст']. Decode ('utf-8')

Что такое {'LambdaFunctionName': os.environ['AWS_LAMBDA_FUNCTION_NAME']}

Ответы [ 2 ]

0 голосов
/ 29 июля 2020
EncryptionContext = {'LambdaFunctionName': os.environ ['AWS_LAMBDA_FUNCTION_NAME']}) ['Plaintext']. Decode ('utf-8')

Это вариант дешифрования на скорости 3 км / с. . https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/kms.html#KMS .Client.decrypt

итак. Если вы хотите использовать эту опцию, сначала добавьте опцию «Контекст шифрования» при шифровании.

Например, для AWS CLI

aws kms encrypt --key-id alias/SlackKey --plaintext "hooks.slack.com/services/xxxxxxxxx" --region ap-northeast-2 --encryption-context "LambdaFunctionName=[you function name]"

Как указано выше, вы можете прикрепить опции при шифровании.

Ключ:

- encryption-context «LambdaFunctionName = [имя вашей функции]»

0 голосов
/ 13 июля 2020
  1. Это действительно зависит от размера вашего лямбда-скрипта. Если это действительно небольшой скрипт с очень небольшим количеством вызовов дешифрования, вы можете разместить их внутри своей лямбда-функции. Или, если вы хотите разделить вызовы дешифрования для лучшей читаемости и управляемости, вы можете либо создать функцию, либо иметь дешифрование в другом .py файле и импортировать его в лямбда-функцию.

  2. Вы не можете расшифровать несколько шифров с помощью вызова decrypt. Возможно, вам придется звонить decrypt несколько раз, чтобы выполнить sh это. В противном случае вы можете упаковать все содержимое в виде списка с разделителями-запятыми или массива в кодировке JSON и сохранить зашифрованное значение в переменной среды. Это не рекомендуемый способ набрать go. Настоятельно рекомендуемым альтернативным решением будет использование хранилища параметров SSM для шифрования и хранения конфиденциальных строк. SSM get_parameters позволяет получить несколько параметров за один вызов API. Эти ссылки могут помочь Хранилище параметров - Параметры SecureString - boto3 ssm get_parameters

  3. EncryptionContext не -секретные данные для поддержки дополнительной аутентификации, применимы только для шифрования symri c. Если вы шифруете некоторые данные с помощью пары ключ-значение EncryptionContext, вы должны указать точное EncryptionContext, чтобы расшифровать их. В вашем примере это просто означает, что вы указали EncryptionContext как {'LambdaFunctionName': '<your-function-name>'}, поэтому для расшифровки вы должны указать точное EcryptionContext при вызове decrypt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...