【发布时间】: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