Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
Amazon web services 在AWS Lambda函数中解密和设置环境变量是否为漏洞?_Amazon Web Services_Security_Encryption_Environment Variables_Aws Lambda - Fatal编程技术网

Amazon web services 在AWS 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

在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"] = 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基础设施将它们存储在静止状态,但它们是加密的。一旦它们在容器的内存空间中,它们就没有被破坏的机会,因为(如上所述)这些容器是您的功能所独有的