如何通过CLI加密Lambda的环境变量?

Dav*_*vid 2 encryption amazon-web-services aws-cloudformation aws-cli aws-lambda

在此处输入图片说明

创建Lambda函数时,通过GUI控制台加密环境变量并不难。我只需输入密钥值对,然后打开加密助手并输入我的KMS密钥的ARN。这使我可以加密该值,因此,在将其发送存储之前已对其进行了加密,如上图所示。

我要完成的工作是完全一样的,但是假设您不是在GUI控制台中而是通过CloudFormation模板(正在CLI中进行部署)部署Lamba函数。

这是我在CloudFormation模板中指定相关参数的方式:

"EnvironmentVariable" : {
      "Type" : "String",
      "Default" : "test",
      "Description" : "Environment Variable"
    },
    "KmsKeyArn" : {
      "Type" : "String",
      "Description" : "KMS Key ARN if environment variables are encrypted"
    },
Run Code Online (Sandbox Code Playgroud)

这是我在Lambda资源(模板的“资源”部分)中引用这些参数的方式:

"Environment" : {
   "Variables" : {
     "SomeVariable": {
       "Ref" : "EnvironmentVariable"
     }  
   }
 },
 "KmsKeyArn" : { "Ref" : "KmsKeyArn" },
Run Code Online (Sandbox Code Playgroud)

这是我在CLI中部署此模板的方式(更改了所有ARN和其他值以保护隐私,但保持其结构):

AWS cloudformation部署--template-file lambda-template.json --stack-name“ CLI-lambda-stack” --parameter-overrides S3BucketName =“ theBucket” S3FileLocation =“ lambda_function.zip” S3ObjectVersion =“ ZuB0eueEgh2yh5q00.DiykLNudujdsc5” DeadLetter =“ arn:aws:sns:us-west-2:526598937246:CloudFormationTests” EnvironmentVariable =“ testing” KmsKeyArn =“ arn:aws:kms:us-west-2:227866537246:key / b24e7c79-a14d-4a3e-b848- 165115c86210“ HandlerFunctionName =” lambda_function.lambda_handler“ MemorySize =” 128“ Role =” arn:aws:iam :: 507845137246:role / serverless-test-default-us-east-1-lambdaRole“ FuncName =” myCLILambda“

在CLI中运行此命令后,没有任何错误,但是当我在控制台中打开Lambda函数以检查结果时,会看到类似以下内容:

在此处输入图片说明

我要去哪里错了?感谢您的任何见解。

Pau*_*aul 7

  1. 如果您还没有KMS密钥,则创建它(AWS> IAM>加密密钥>创建新密钥>输入别名)。获取KeyId。
  2. 通过KMS加密变量。例:

$ aws kms encrypt --key-id $KEY_ID --plaintext secretpassword --output text --query CiphertextBlob

AQICAHjZ + JlI8KKmiVc ++ NhnBcO0xX3LFAaCfsjH8Yjig3Yr2AFPIyKCp3XVOEDlbiTMWiejAAAAbDBqBgkqhkiG9w0BBwagXTBbAgEAMFYGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMhai9vkA2KdU5gd + qAgEQgCnWW4F3fb7pTwmA2ppskJhUl0dJGEXIE5oDCr3ZsH7TlN5X381juPg0LA ==

像这样将其保存在CF模板中

"environment_variables": {
        "SECRET_DATA": "AQICAHjZ+JlI8KKmiVc++NhnBcO0xX3LFAaCfsjH8Yjig3Yr2AFPIyKCp3XVOEDlbiTMWiejAAAAbDBqBgkqhkiG9w0BBwagXTBbAgEAMFYGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMhai9vkA2KdU5gd+qAgEQgCnWW4F3fb7pTwmA2ppskJhUl0dJGEXIE5oDCr3ZsH7TlN5X381juPg0LA=="
       }
Run Code Online (Sandbox Code Playgroud)

3,解密你的Lambda函数

kms = boto3.client('kms')
response = kms.decrypt(CiphertextBlob=os.environ['SECRET_DATA'].decode('base64'))
secret_data = response['Plaintext']
secret_data
Run Code Online (Sandbox Code Playgroud)

或尝试以下选项:https : //docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-about.html#sysman-paramstore-securestring