我刚刚开始使用 AWS 服务,尤其是 AWS Lambda。有没有办法在 Lambda 代码 (Java) 中使用 AWS KMS 服务。我想使用 KMS 来解密加密的外部化(从属性中读取)秘密。我的 Lambda 代码在 java 中。提前致谢。
问问题
10359 次
4 回答
5
在 Python 中:
with open('encrypted_pem.txt', 'r') as encrypted_pem:
pem_file = encrypted_pem.read()
kms = boto3.client('kms', region_name=REGION)
return kms.decrypt(CiphertextBlob=b64decode(pem_file))['Plaintext']
取自AWS Labs Chef cleanup source。
该存储库的自述文件首先解释了如何使用 AWS KMS CLI 加密 PEM 文件。
于 2016-06-24T19:36:59.913 回答
4
是的,它应该可以正常工作。
我最近将一个 Node.js RESTful API 移植到了 Lambda,并且无需更改任何 KMS 代码。
您只需要确保运行 Lambda 函数的角色对您通过 AWS 设置的密钥具有权限,以便与加密/解密调用一起使用。
于 2015-11-23T03:00:24.597 回答
1
我在 Node.js 10.x(异步/等待方式)中有一个实现,它对你很有用。首先,如前所述,您必须确保为 Lambda 函数提供具有 KMS 服务权限的角色。
在 Javascript 中:
const AWS = require('aws-sdk');
const fs = require('fs');
const kms = new AWS.KMS();
const { promisify } = require('util');
const readFileAsync = promisify(fs.readFile);
const decrypt = async (kms) => {
let secret = null;
try {
const secretPath = `./your.encrypted.file.json`;
const encryptedSecret = await readFileAsync(secretPath);
let params = {
CiphertextBlob: encryptedSecret
};
const decrypted = await kms.decrypt(params).promise();
secret = decrypted.Plaintext.toString('utf-8');
} catch (exception) {
console.error(exception);
throw new Error(exception);
}
return JSON.parse(secret);
}
于 2019-12-03T11:33:32.197 回答
0
我将使用 JavaScript adk 访问 KMS 密钥。我们需要创建一个 lambda 函数 assign policy[read, put, list, roate]。用于aws-adk
访问密钥。
第 1 阶段:使用适当的策略创建 lambda 函数。AWS 密钥管理的 Sam 策略模板列表 ( POLICY_TEMPLATE )
---
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Description: Lambda function to show demo
Parameters:
OutputPrefix:
Type: String
Description: Prefix for variables exported from templates.
Globals:
Function:
Runtime: nodejs12.x
Handler: index.handler
Environment:
Variables:
STORE_TABLE_NAME:
Fn::ImportValue: !Sub "${OutputPrefix}-StoreTable"
Resources:
StoreItemInsertHandlerFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: StoreItemInsertHandler
CodeUri: ../../../src/handlers/dist
Policies:
- AWSSecretsManagerGetSecretValuePolicy:
SecretArn: "*"
阶段 2:使用访问密钥aws-sdk
import AWS from 'aws-sdk';
const getSecretKey = async (key) => {
const client = new AWS.SecretsManager({
region: env('AWS_REGION'),
});
let result = '';
try {
result = await client.getSecretValue({ SecretId: key }).promise();
} catch (e) {
throw new Error(`Secret key [${key}] is not set.`);
}
return result;
};
于 2020-09-29T19:59:37.690 回答