如何使用AWS CLI设置加密的Lambda环境变量?

时间:2017-02-25 14:34:47

标签: amazon-web-services encryption aws-lambda aws-cli

我在本地拥有AWS Lambda环境变量,希望使用特定的KMS密钥加密并分配给Lambda函数。

我想过像

这样的东西
aws lambda update-function-configuration --function-name functionName --cli-input-json file://config.json

config.json

{
  "Environment": {
    "Variables": {
      "var01": "Variable one",
      "var02": "Variable two"
    }
  },
  "KMSKeyArn": "arn:aws:kms:us-west-1:09238573743:key/...."
}

会做到这一点。但变量最终没有加密。 “KMSKeyArn”似乎只用于解密(例如在函数的处理程序中使用boto3.client('kms').decrypt)。

如何使用AWS CLI获取理想情况下在JSON上指定的本地(未加密)值,并使用特定的KMS密钥将它们指定为Lambda函数环境变量的加密值(并确保为该函数分配相同的密钥)供boto3.client('kms').decrypt使用?

我还想确保我的变量永远不会以纯文本形式传输(即加密发生在本地),如果可能的话。

1 个答案:

答案 0 :(得分:5)

与为多个可以跨越各种服务的调用而构建的AWS控制台不同,AWS CLI会进行一次调用。 这就是为什么$ aws lambda update-function-configuration不会加密变量的原因。

因此,为了实现这一点,我们只需要两个命令:

  

$ aws kms encrypt --key-id **** --plaintext "Variable one"

然后从结果中获取密文,并将其用作变量:

  

$ aws lambda update-function-configuration --function-name functionName --kms-key-arn **** --environment Variables={var01=XXXXXXXXX}

- 编辑:

我们可以在aws lambda update-function-configuration命令的参数中设置的密钥用于静态加密。 (如在控制台中)

对于环境变量解密,无需告诉lambda它必须使用哪个密钥,因为此信息位于密文上。但是我们必须确保le lambda可以访问密钥,方法是在AWS IAM中设置lambda作为密钥用户的角色。