Python 3.x 如何使用python 3解密aws lambda中的环境变量
我正在尝试加密我的postgres连接字符串变量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') 正如您所看到的,我使用了环境变量,但我想对它进行加密 我已经找到了一种加密它的方法,也就是检查
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
问题:
{'LambdaFunctionName':os.environ['AWS\u LAMBDA\u FUNCTION\u NAME']}
.py
文件中进行解密,然后将其导入lambda函数
decrypt
调用对多个密码进行解密。您可能需要多次调用decrypt
来完成此操作。否则,您可以将整个内容打包为逗号分隔的列表或JSON编码的数组,并将加密值存储在环境变量中。这不是一个推荐的方法。强烈推荐的替代解决方案是使用SSM参数存储来加密和存储敏感字符串。SSMget_parameters
允许在一个API调用中获取多个参数。这些链接可能会有帮助--
EncryptionContext
是支持附加身份验证的非机密数据,仅适用于对称加密。如果使用EncryptionContext
的键值对加密某些数据,则必须提供准确的EncryptionContext
来解密这些数据。在您的示例中,这仅仅意味着您已将EncryptionContext
指定为{'LambdaFunctionName':''}
,因此为了解密,您必须在调用decrypt
时提供准确的EcryptionContext
.py
文件中进行解密,然后将其导入lambda函数
decrypt
调用对多个密码进行解密。您可能需要多次调用decrypt
来完成此操作。否则,您可以将整个内容打包为逗号分隔的列表或JSON编码的数组,并将加密值存储在环境变量中。这不是一个推荐的方法。强烈推荐的替代解决方案是使用SSM参数存储来加密和存储敏感字符串。SSMget_parameters
允许在一个API调用中获取多个参数。这些链接可能会有帮助--
EncryptionContext
是支持附加身份验证的非机密数据,仅适用于对称加密。如果使用EncryptionContext
的键值对加密某些数据,则必须提供准确的EncryptionContext
来解密这些数据。在您的示例中,这仅仅意味着您已将EncryptionContext
指定为{'LambdaFunctionName':''}
,因此为了解密,您必须在调用decrypt
时提供准确的EcryptionContext
aws kms encrypt --key-id alias/SlackKey --plaintext "hooks.slack.com/services/xxxxxxxxx" --region ap-northeast-2 --encryption-context "LambdaFunctionName=[you function name]"
如上所述,您可以在加密时附加选项
关键是
--加密上下文“lambdfunctionname=[您的函数名]”
aws kms encrypt --key-id alias/SlackKey --plaintext "hooks.slack.com/services/xxxxxxxxx" --region ap-northeast-2 --encryption-context "LambdaFunctionName=[you function name]"
如上所述,您可以在加密时附加选项
关键是
--加密上下文“lambdfunctionname=[您的函数名]”