【问题标题】:How to decrypt AWS Lambda Environment Variables如何解密 AWS Lambda 环境变量
【发布时间】:2017-02-24 19:34:57
【问题描述】:

当我“加密”环境变量时,我正在使用 Lambda 控制台上提供的示例代码。

我创建了一个密钥,并授予角色“kms:Decrypt”权限。

我的函数在尝试“解密”变量时超时,但在未加密时运行良好。日志没有提供任何错误。

这是用于解密的代码:

private String decryptKey(String keyName) {
    byte[] encryptedKey = Base64.decode(keyName);
    AWSKMS client = AWSKMSClientBuilder.defaultClient();
    DecryptRequest request = new DecryptRequest()
     .withCiphertextBlob(ByteBuffer.wrap(encryptedKey));
    ByteBuffer plainTextKey = client.decrypt(request).getPlaintext();
    return new String(plainTextKey.array(), Charset.forName("UTF-8"));
}

而且是这样称呼的……

return decryptKey(System.getenv(variableName));

我按原样采用此代码,假设在 Lambda 中运行时,“defaultClient”知道区域、帐户等。

编辑:

这些是日志行:

START RequestId:92419f62-fa84-11e6-876d-99aa85e9b481 版本:$LATEST 结束请求 ID:92419f62-fa84-11e6-876d-99aa85e9b481 报告请求 ID:92419f62-fa84-11e6-876d-99aa85e9b481 持续时间:15001.41 毫秒 > 计费持续时间:15000 毫秒内存大小:512 MB 使用的最大内存:64 MB
2017-02-24T11:30:13.908Z 92419f62-fa84-11e6-876d-99aa85e9b481 任务超时 15.00 秒后

如果我在没有 EncryptionHelpers 的情况下运行,但仍然尝试对变量进行解密,我得到了这个,这是预期的:

{ "errorMessage": "输入应以 4 字节的倍数编码,但发现:13", "errorType": "java.lang.IllegalArgumentException", “堆栈跟踪”: [ “com.amazonaws.util.Base64Codec.decode(Base64Codec.java:198)”, “com.amazonaws.util.Base64.decode(Base64.java:89)”, "scripts.Environment.decryptKey(Environment.java:56)", "scripts.Environment.getEnvVariable(Environment.java:38)", "scripts.Environment.(Environment.java:30)", "scripts.CreateNewDatabase.createNewConfigDatabase(CreateNewDatabase.java:33)", "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", “sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)”, “sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)”, “java.lang.reflect.Method.invoke(Method.java:498)” ] }

【问题讨论】:

    标签: java amazon-web-services aws-lambda


    【解决方案1】:

    kms.decrypt() 是需要互联网的 api 调用,您的问题似乎是您的 lambda 连接到互联网的问题。

    可以肯定的是,您应该查看日志。在这种情况下,您会发现类似

    开始新的 HTTPS 连接 (1):kms.eu-west-1.amazonaws.com

    要解决此问题,您应该将 lambda 关联到可以访问互联网的子网 -
    带有 NAT 网关的私有子网。

    您可以在document 的“Lambda 函数的 Internet 访问”部分找到更多信息

    【讨论】:

    • 谢谢。日志(见编辑)没有提到任何关于这个问题的内容。如果有办法记录这些东西会很有帮助。最后,我创建了一个私有子网,将 Lambda 放在那里,并将 0.0.0.0/0 流量路由到另一个“公共”子网中的 NAT。 (+ 适当的安全组)
    猜你喜欢
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2016-07-13
    相关资源
    最近更新 更多