AWS KMS を awscli から利用してみる
http://qiita.com/kanagi/items/2008aa9f43be26bd2746
classmethod AWS Key Management Serviceでキーの”管理”と”利用”を分離する
http://dev.classmethod.jp/cloud/aws/kms-admin-user/
###AWS Key Management Service(KMS)の利用方法
2016/12/13 mackerelの監視のON/OFFに使用した
KMSのざっくりとした理解としては 「 暗号化、復号化の悩みとして『鍵を使って暗号化するのは技術的に可能』だが『鍵の保管場所』に困る」という点を解決するサービス、 という理解。
AWS KMSでの暗号化/復号化の手順はclassmethodのココが分かりやすい。
一度、aws-cliで復号化まで行う(15分程度)とよく分かる。 また暗号化されたciphertextはコードに埋め込んで使用する
下記にmackarelでの暗号化、復号化の方法ですが
[ IAM ]->[ 暗号化キー(Encryption Keys) ]->[ フィルター: ]で[ アジアパシフィック(東京) ]をクリック [ MackarelAPI ]をクリックし、[ ARN ]の値をメモする。 ( 2016/12/13時点の mackarelのマスターキーは[ arn:aws:kms:ap-northeast-1:139332511982:key/3121367a-6009-493d-b3f1-05aa01a9c3f7 ]だった )
ココの方法に従い、 aws-cliで上記のarnを指定して環境変数KEYIDにarnを指定する
$ export KEYID=arn:aws:kms:ap-northeast-1:1111111111111111111:key/3121367a-6009-493d-b3f1-05aa01a9c3f7
暗号化
$ aws kms encrypt --key-id $KEYID --plaintext 'mackarelのAPIキー'
下記の内容が出力される
{
"KeyId": "arn:aws:kms:ap-northeast-1:111111:key/3121367a-6009-493d-b3f1-05aa01a9c3f7",
"CiphertextBlob": "himitu"
}
CiphertextBlobをコード側で利用する。 node.jsでのコードは下記が参考になる。
AWS KMSで暗号化した認証情報をAWS Lambda実行時に復号化する(Node.jsでのkms.decrypt使用例)
var AWS = require('aws-sdk');
exports.handler = function(event, context){
var token;
var kmsEncyptedToken = "CiC**********************************************************************************************I=";
var encryptedBuf = new Buffer(kmsEncyptedToken, 'base64');
var cipherText = {CiphertextBlob: encryptedBuf};
var kms = new AWS.KMS({ region: 'ap-northeast-1' });
kms.decrypt(cipherText, function (err, data) {
if (err) {
console.log("token string decrypt error: " + err);
context.fail(err);
} else {
token = data.Plaintext.toString('ascii');
console.log('token string = ' + token);
}
});
};