Amazon web services 在AWS Lambda函数中解密和设置环境变量是否为漏洞?
在AWS Lambda函数中,我有一些lib,它们在操作系统环境中查找敏感信息。我可以使用KMS加密环境变量,但我发现自己必须覆盖lambda处理程序模块中加密的环境变量——这是一个漏洞吗?例如Amazon web services 在AWS Lambda函数中解密和设置环境变量是否为漏洞?,amazon-web-services,security,encryption,environment-variables,aws-lambda,Amazon Web Services,Security,Encryption,Environment Variables,Aws Lambda,在AWS Lambda函数中,我有一些lib,它们在操作系统环境中查找敏感信息。我可以使用KMS加密环境变量,但我发现自己必须覆盖lambda处理程序模块中加密的环境变量——这是一个漏洞吗?例如 # lambda_handler.py encrypted_env_var = os.environ["SECRET_KEY"] decrypted_env_var = decrypt(encrypted_env_var) os.environ["SECRET_KEY&q
# lambda_handler.py
encrypted_env_var = os.environ["SECRET_KEY"]
decrypted_env_var = decrypt(encrypted_env_var)
os.environ["SECRET_KEY"] = decrypted_env_var
def lambda_function(event, context):
... libs get and use SECRET_KEY ...
我知道加密它们会覆盖您,例如在使用awscli时,但在容器中设置这一点可能是一个漏洞吗?据我所知,集装箱可能不会立即销毁
此外,在AWS提供给您的建议解密代码片段(在lambda仪表板中)中,注释引起了我的注意:
# lambda_handler.py
ENCRYPTED = os.environ['SECRET_KEY']
# 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))['Plaintext']
def lambda_handler(event, context):
# handle the event here
仅仅在函数末尾取消设置相关变量就足够了(尽管有些混乱)
谢谢
容器不得立即销毁
几乎可以肯定的是,容器不会立即被销毁。。。但这并不坏
容器可以持续数分钟到数小时,并且可以重用——这就是为什么Lambda函数通常能够如此快速地执行,因为在理想条件下,大多数函数调用都会找到一个空闲的容器,可以重用
然而。。。容器只能由您的单个函数的单个版本重用。没有其他人,也没有其他函数或同一函数的不同版本(即使来自同一帐户)重用您的容器。仅导致创建容器的函数版本
基础设施会销毁不再需要的容器,它会根据您的功能看到(或没有看到)的流量进行销毁。轶事般的观察表明,如果完全停止调用函数,所有空闲容器将在10-15分钟后完全消失,但这并没有文档记录,可能会有所不同
这些评论引起了我的注意
注释是说,您应该将解密的变量存储在处理程序函数之外,以便它们位于全局范围内——在每次调用函数时调用KMS API对变量进行解密是非常低效的。您可以这样做,但是您应该以不同的名称存储加密的环境变量,然后将解密后的值设置为代码期望的名称
仅仅在函数末尾取消设置相关变量就足够了(尽管有些混乱)
除非您将原始加密值存储在其他位置(例如使用不同的初始环境变量名),否则这将不起作用,因为示例代码将覆盖加密值,并且下次在该容器中运行函数时,它将无法解密这些未设置的值
加密环境变量的意义在于,尽管Lambda基础设施将它们存储在静止状态,但它们是加密的。一旦它们在容器的内存空间中,它们就没有被破坏的机会,因为(如上所述)这些容器是您的功能所独有的