Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何使用python 3解密aws lambda中的环境变量_Python 3.x_Amazon Web Services_Encryption_Lambda - Fatal编程技术网

Python 3.x 如何使用python 3解密aws lambda中的环境变量

Python 3.x 如何使用python 3解密aws lambda中的环境变量,python-3.x,amazon-web-services,encryption,lambda,Python 3.x,Amazon Web Services,Encryption,Lambda,我正在尝试加密我的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') 正如您所看到的,我使用了环境变量,但我想对它进行加密 我已经找到了一种加密它的方法,也就是检查

我正在尝试加密我的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')
正如您所看到的,我使用了环境变量,但我想对它进行加密

我已经找到了一种加密它的方法,也就是检查一种解密它的方法

Lambda函数建议使用以下代码

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
问题:

  • 我可以将其包含在包含lambda函数的同一个.py文件中吗

  • 这显示了单个变量的解密。我有多个变量,如何实现这些变量,以便一次解密所有变量

  • EncryptionContext={'LambdaFunctionName':os.environ['AWS_LAMBDA_FUNCTION_NAME']} )['Plaintext'].解码('utf-8')

    什么是
    {'LambdaFunctionName':os.environ['AWS\u LAMBDA\u FUNCTION\u NAME']}

  • 这取决于lambda脚本的大小,真的。如果它是一个非常小的脚本,只有很少的解密调用,那么可以在Lambda函数中使用它们。或者,如果要分离解密调用以提高可读性和可管理性,可以创建一个函数,或者在不同的
    .py
    文件中进行解密,然后将其导入lambda函数

  • 不能使用
    decrypt
    调用对多个密码进行解密。您可能需要多次调用
    decrypt
    来完成此操作。否则,您可以将整个内容打包为逗号分隔的列表或JSON编码的数组,并将加密值存储在环境变量中。这不是一个推荐的方法。强烈推荐的替代解决方案是使用SSM参数存储来加密和存储敏感字符串。SSM
    get_parameters
    允许在一个API调用中获取多个参数。这些链接可能会有帮助--

  • EncryptionContext
    是支持附加身份验证的非机密数据,仅适用于对称加密。如果使用
    EncryptionContext
    的键值对加密某些数据,则必须提供准确的
    EncryptionContext
    来解密这些数据。在您的示例中,这仅仅意味着您已将
    EncryptionContext
    指定为
    {'LambdaFunctionName':''}
    ,因此为了解密,您必须在调用
    decrypt
    时提供准确的
    EcryptionContext

  • 这取决于lambda脚本的大小,真的。如果它是一个非常小的脚本,只有很少的解密调用,那么可以在Lambda函数中使用它们。或者,如果要分离解密调用以提高可读性和可管理性,可以创建一个函数,或者在不同的
    .py
    文件中进行解密,然后将其导入lambda函数

  • 不能使用
    decrypt
    调用对多个密码进行解密。您可能需要多次调用
    decrypt
    来完成此操作。否则,您可以将整个内容打包为逗号分隔的列表或JSON编码的数组,并将加密值存储在环境变量中。这不是一个推荐的方法。强烈推荐的替代解决方案是使用SSM参数存储来加密和存储敏感字符串。SSM
    get_parameters
    允许在一个API调用中获取多个参数。这些链接可能会有帮助--

  • EncryptionContext
    是支持附加身份验证的非机密数据,仅适用于对称加密。如果使用
    EncryptionContext
    的键值对加密某些数据,则必须提供准确的
    EncryptionContext
    来解密这些数据。在您的示例中,这仅仅意味着您已将
    EncryptionContext
    指定为
    {'LambdaFunctionName':''}
    ,因此为了解密,您必须在调用
    decrypt
    时提供准确的
    EcryptionContext

  • EncryptionContext={'LambdaFunctionName':os.environ['AWS_LAMBDA_FUNCTION_NAME']}]['Plaintext'].decode('utf-8')
  • 这是一个boto3 kms解密选项。

    所以。如果要使用此选项,请在加密时首先添加“加密上下文”选项

    例如,对于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]"
    
    如上所述,您可以在加密时附加选项

    关键是

    --加密上下文“lambdfunctionname=[您的函数名]”

  • EncryptionContext={'LambdaFunctionName':os.environ['AWS_LAMBDA_FUNCTION_NAME']}]['Plaintext'].decode('utf-8')
  • 这是一个boto3 kms解密选项。

    所以。如果要使用此选项,请在加密时首先添加“加密上下文”选项

    例如,对于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]"
    
    如上所述,您可以在加密时附加选项

    关键是

    --加密上下文“lambdfunctionname=[您的函数名]”