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

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

はじめに

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

やってみた

サーバ側の作業

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

storage "s3" {
 region = "ap-northeast-1"
 bucket = "smokeymonkey"
}

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

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

  • bucket ... 必須項目。Amazon S3のバケット名を指定。
  • endpoint ... S3では無くS3互換のエンドポイントを使うときに指定。デフォルト値は値無し。環境変数AWS_S3_ENDPOINTでも指定可能。
  • region ... S3バケットのリージョンを指定。デフォルトはus-east-1。今回のように東京リージョンを使う場合は指定が必要。
  • access_key、secret_key ... S3バケットに接続するために必要なアクセスキーとシークレットキーを指定。環境変数AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYでも指定可能。今回はEC2にIAMロールを指定するので設定していません。
  • session_token ... 一時キーでアクセスするときに設定する。環境変数AWS_SESSION_TOKENでも指定可能。
  • max_parallel ... S3への最大同時要求数。デフォルト値は128。
  • s3_force_path_style ... 仮想ホスティング形式のエンドポイント名(s3.amazonaws.com/BUCKETではなくBUCKDET.s3.amazonaws.com)を強制するための設定。デフォルトでfalse。
  • disable_ssl ... エンドポイントへの接続にSSLを使用しない設定。デフォルトでfalse。

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

Vault Serverを起動します。

$ sudo ./bin/vault server -config=config.hcl

起動しただけではS3には特にファイルは作成されません。

クライアント側の作業

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

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

initializeします。

$ vault operator init -tls-skip-verify

するとcoreとsysという2つのフォルダが作成されます。これは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

するとS3上にKey値をファイル名としたファイルが作成されます。

もちろん暗号化されていますので、ダウンロードしても単純にファイルの中身を参照することは出来ません。

$ cat Downloads/sasakidaisuke
8c�9ޏ�_��D�����h��F�
                    ;5���w�_��ru�ɷ�l�H<�2

さいごに

これでS3をStorageとしたVault Serverを起動することが出来ました。可用性の高いS3を使うことでストレージが堅牢になります。ただし注意点として、S3を使った場合High Availability Modeが使えませんので、フロントとなるVault Serverを冗長化することは出来ません。