Amazon DynamoDBをHashiCorp Vault Serverのストレージにする
これまでの記事はこちらです。
- HashiCorp Vaultの基礎知識と導入
- HashiCorp Vault ServerをAmazon EC2に構築する
- HashiCorp VaultのConfigurationについて
- HashiCorp Vault Serverをオレオレ証明書を使ってTLS対応にする
- Amazon S3を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システムが作れるでしょう。