AWS Lambdaに基づいたモニタリングツールを構築しています。一連のメトリックを指定すると、LambdasはSMS using Twilio APIを送信できる必要があります。APIを使用できるように、TwilioはアカウントSIDと認証を提供しますトークン。
これらの秘密をどのように、どこに保存すればよいですか?
現在、 AWS KMS を使用することを考えていますが、他にも優れたソリューションがあるかもしれません。
これが私が思いついたものです。 AWS KMSを使用して、コードをAWS Lambdaにアップロードするファイルに秘密を暗号化します。それらを使用する必要があるときに、それを解読します。
従うべき手順は次のとおりです。
最初にKMSキーを作成します。ここでドキュメントを見つけることができます: http://docs.aws.Amazon.com/kms/latest/developerguide/create-keys.html
次に、秘密を暗号化し、結果をファイルに入れます。これは、CLIから次の方法で実現できます。
aws kms encrypt --key-id some_key_id --plaintext "This is the scret you want to encrypt" --query CiphertextBlob --output text | base64 -D > ./encrypted-secret
次に、このファイルをLambdaの一部としてアップロードする必要があります。次のように、Lambdaで秘密を解読して使用できます。
var fs = require('fs');
var AWS = require('aws-sdk');
var kms = new AWS.KMS({region:'eu-west-1'});
var secretPath = './encrypted-secret';
var encryptedSecret = fs.readFileSync(secretPath);
var params = {
CiphertextBlob: encryptedSecret
};
kms.decrypt(params, function(err, data) {
if (err) console.log(err, err.stack);
else {
var decryptedSecret = data['Plaintext'].toString();
console.log(decryptedSecret);
}
});
これがあなたのお役に立てば幸いです。
Kmsからapiキーを復号化することから始まるNodejs Lambda関数の設計図があります。 promiseインターフェイスを使用して簡単に復号化できます。また、kmsにアクセスするためにラムダ関数に付与する必要があるロール許可も提供します。青写真は、「algorithmia-blueprint」を検索して見つけることができます
まあ...それがKMSの目的です:) Lambda関数にプレーンテキストでトークンを保存したり、サードパーティのサービスに委任するよりも確かに安全です。
このルートを下る場合は、既存の使用例について this blog post をチェックして、起動と実行を高速化してください。特に、Lambda実行ロールポリシーに次を追加する必要があります。
_"kms:Decrypt",
"kms:DescribeKey",
"kms:GetKeyPolicy",
_
上記の例の残りのコードは少し複雑です。この場合、本当に必要なのはdescribeKey()
だけです。