6

我刚刚开始使用 AWS 服务,尤其是 AWS Lambda。有没有办法在 Lambda 代码 (Java) 中使用 AWS KMS 服务。我想使用 KMS 来解密加密的外部化(从属性中读取)秘密。我的 Lambda 代码在 java 中。提前致谢。

4

4 回答 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 回答