Amazon DynamoDBをHashiCorp Vault Serverのストレージにする

これまでの記事はこちらです。

はじめに

今回はVault ServerのストレージとしてAmazon DynamoDBを使ってみます。

やってみた

サーバ側の作業

Vault Server起動時に指定するConfigファイルを作成します。storage項目でDynamoDBを指定します。また前回同様にオレオレ証明書でTLSを有効にしています。

storage "dynamodb" {
 region = "ap-northeast-1"
 table  = "vault-data"
}

listener "tcp" {
 address     = "EC2のプライベートIPアドレス:8200"
 tls_cert_file = "/home/ec2-user/vault-server.crt"
 tls_key_file  = "/home/ec2-user/vault-server.key"
}

DynamoDBを使う場合のパラメータは以下の通りです。

  • endpoint ... DynamoDBでは無くDynamoDB互換のエンドポイントを使うときに指定。デフォルト値は値無し。
  • ha_enabled ... High Availability Modeの有効化を行う。デフォルト値はfalse。
  • max_parallel ... 最大同時要求数。デフォルト値は128。
  • region ... DynamoDBのリージョンを指定。デフォルトはus-east-1。今回のように東京リージョンを使う場合は指定が必要。
  • read_capacity ... DynamoDBのリードキャパシティを設定。デフォルト値は5。
  • write_capacity ... DynamoDBのライトキャパシティを設定。デフォルト値は5。
  • table ... DynamoDBテーブルのテーブル名を指定。デフォルト値は"vault-dynamodb-backend"。
  • access_key、secret_key ... DynamoDBに接続するために必要なアクセスキーとシークレットキーを指定。環境変数AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYでも指定可能。今回はEC2にIAMロールを指定するので設定していません。
  • session_token ... 一時キーでアクセスするときに設定する。環境変数AWS_SESSION_TOKENでも指定可能。

Vault ServerとなっているEC2にIAMロールを割り当てます。今回はAmazonDynamoDBFullAccessポリシーを適用しています。

Vault Serverを起動します。Storageがdynamodbになっています。

$ sudo ./bin/vault server -config=config.hcl
==> Vault server configuration:

                     Cgo: disabled
              Listener 1: tcp (addr: "EC2のプライベートIPアドレス:8200", cluster address: "EC2のプライベートIPアドレス:8201", tls: "enabled")
               Log Level: info
                   Mlock: supported: true, enabled: true
                 Storage: dynamodb (HA disabled)
                 Version: Vault v0.9.3
             Version Sha: 7d73ac4c967b3b8726c71e00c017129e1d36ad3c

==> Vault server started! Log data will stream in below:

すると、Configファイルのtableで指定した名前で、DynamoDBテーブルが作成されます。

クライアント側の作業

Vault Serverのアドレスを環境変数に設定します。

$ export VAULT_ADDR='https://EC2のパブリックIPアドレス:8200'

initializeします。

$ vault operator init -tls-skip-verify

するとcoreとsysから始まる項目がDynamoDBテーブルに作成されます。これはVault Serverの設定などが格納されています。

Unsealして使えるようにします。

$ vault operator unseal -tls-skip-verify
$ vault operator unseal -tls-skip-verify
$ vault operator unseal -tls-skip-verify

loginします。

$ vault login -tls-skip-verify 6bcc76e3-98d8-3d5d-a8e1-a15ad3cc9ac8

さて、それでは実際に値を格納してみます。

$ vault write -tls-skip-verify secret/sasakidaisuke value=smokeymonkey
Success! Data written to: secret/sasakidaisuke

するとlogicalから始まるPathに値が入ります。Valueは暗号化されています。

さいごに

DynamoDBをストレージとして使う場合にはHigh Availability Modeがサポートされます。DynamoDB自体が可用性の高いサービスですので、更にフロントとなるVault ServerをHA構成で構築することで、信頼性の高いVaultシステムが作れるでしょう。