credstash/gcredstash - KMS/DynamoDBを使った秘密パラメータの保管


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)