credstashはAWS Key Management Service (KMS)とDynamoDBを使った秘密パラメータの保管ツールです。KMSで暗号化キーの生成を行い、暗号化した値をDynamoDBに保持します。
gcredstashはcredstashをgoに移植したものです。
credstash/gcredstashには以下のようなメリットがあります。
- シンプル: gcredstash put/getで値をセット/取得するだけなので簡単
- 安全: 値はAESで暗号化され、復号した値はHMACでチェックされる
- IAMとの連携: バックエンドはDynamoDBなので、IAMと連携できる
- サーバレス: Vaultのように専用のサーバを立てる必要がない
この記事では主にgcredstashについて説明します。
インストール
OS X
brew install https://raw.githubusercontent.com/winebarrel/gcredstash/master/homebrew/gcredstash.rb
Ubuntu
wget -q -O- https://github.com/winebarrel/gcredstash/releases/download/v0.1.1/gcredstash_0.1.1_amd64.deb | dpkg -i -
使い方
まずIAMのコンソールから「credstash」というAliasのEncryption Keyを作成します。
※作成するリージョンはCLIのAWS_REGIONと同じにする
次にセットアップを実行。
$ gcredstash setup
Creating table...
Waiting for table to be created...
Table has been created. Go read the README about how to create your KMS key
putで値のセット、getで値の取得ができます。
$ gcredstash put myapp.db.pass "secret1234567890 秘密です!"
myapp.db.pass has been stored
$ gcredstash get myapp.db.pass
secret1234567890 秘密です!
値にはバージョンがあります。上書きしても古いバージョンは残ります。
$ gcredstash list
myapp.db.pass -- version: 1
実態はDynamoDBのテーブルで値は暗号化されます。
$ ddbcli
ap-northeast-1> select all * from credential-store \G
[
{
"contents": "b1+JhrhyDwO9v1MemvkRJwtWUKoSrlRR6eRIsa2DIOM=",
"hmac": "b8cd59e4a450663ed79d96b9b7c330cc616741abb54c1ce2a981ca5a466ea54d",
"key": "CiA93iUFTdmOB+Sg6Dxn4g9e8rZni2QUKk+Yah/N05um1BLLAQEBAQB4Pd4lBU3ZjgfkoOg8Z+IPXvK2Z4tkFCpPmGofzdObptQAAACiMIGfBgkqhkiG9w0BBwaggZEwgY4CAQAwgYgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMeVbEFcnsqMszzvewAgEQgFveVAdQYaH95WSScjDdKLWXOStmGn6DW5Lg9I4+2MeLVt9/04CZm1m67kKalBfzBM/NECCx370WDKqr0hGrFHHPsZxpZvoFvGA+QxDhRcMsMkQOd34ppWbaZjz9",
"name": "myapp.db.pass",
"version": "0000000000000000001"
}
]
// 1 row in set (0.08 sec)