当前位置: 首页 > 知识库问答 >
问题:

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

顾池暝
2023-03-14

在创建Lambda函数时,通过GUI控制台加密环境变量并不难。我只是输入密钥值对,然后打开加密帮助程序,输入我的KMS密钥的ARN。这允许我加密值,所以它在被发送到存储之前被加密,如上图所示。

我要完成的是同样的事情,但假设您不是在GUI控制台中部署Lamba函数,而是通过CloudFormation模板,该模板将部署在CLI中。

下面是我在CloudFormation模板中指定相关参数的方法:

"EnvironmentVariable" : {
      "Type" : "String",
      "Default" : "test",
      "Description" : "Environment Variable"
    },
    "KmsKeyArn" : {
      "Type" : "String",
      "Description" : "KMS Key ARN if environment variables are encrypted"
    },
"Environment" : {
   "Variables" : {
     "SomeVariable": {
       "Ref" : "EnvironmentVariable"
     }  
   }
 },
 "KmsKeyArn" : { "Ref" : "KmsKeyArn" },

在CLI中运行该函数后,我没有得到任何错误,但当我在控制台中打开Lambda函数检查结果时,我看到如下所示:

我哪里错了?谢谢你的真知灼见。

共有1个答案

魏风华
2023-03-14
  1. 如果您还没有KMS密钥,请创建一个KMS密钥(AWS>IAM>加密密钥>创建新密钥>提供别名)。获取密钥ID。
  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=="
       }

3.在Lambda函数内部解密

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

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

 类似资料:
  • 我在本地有AWS Lambda环境变量,它们希望用特定的KMS密钥加密并分配给Lambda函数。 我以为

  • 有没有人可以为至少有一个使用KMS密钥加密的环境变量的Lambda发布一个基本的CloudFormation JSON对象,以及创建该密钥的JSON?

  • 我试图在Node.js4.3中运行的AWS Lambda函数中使用加密的环境变量,但是在尝试解密变量时代码挂起。我没有收到任何错误信息,它只是超时。以下是我尝试过的: 我在与Lambda相同的区域中创建了加密密钥,并确保Lambda运行的角色能够访问该密钥。(我甚至尝试过让角色完全控制按键。) 创建Lambda时,我启用加密帮助程序,选择加密密钥,并加密环境变量: 当我从未告诉应用程序使用什么解密

  • 问题内容: 我正在尝试设置脚本以增加Xcode项目的内部版本号。我进行了一次API调用以获取当前的内部版本号,然后我希望对其进行递增,然后将该新的版本号用作环境变量,以便Xcode插件可以使用它。 我安装了EnvInject插件,但是我不知道如何将var从我的shell脚本中获取到环境变量中。 这设置为我需要的值,但是如何将其分配给环境变量,以便以后在工作中访问它? 问题答案: 添加一个构建步骤以

  • 我绝对可以使用一个解决方案来处理它,其中我可以获取当前配置,然后在本地更新env变量,然后推送整个更新的配置,所有这些都通过python代码等,但是,这是唯一的方法吗?或者有没有更简单的方法呢?

  • AWS CloudFormation模板,包括一个带有敏感环境变量的Lambda函数。我想设置一个KMS密钥并用它加密它们 添加基本的cloudformation来加密密钥,即使使用AWS/Lambda默认加密也可以