HashiCorp Vault の Dynamic Secrets (Secret Backend) を試す


はじめに

HashiCorpのVaultが提供しているDynamic Secrets (Secret Backend) 機能について公式ドキュメントを参考に動作を確認しましたので備忘録として残しておきます。

やったこと

Vaultの Dynamic Secrets (Secret Backend) 機能を利用してAWSユーザの作成・削除を行う。

HashiCorp Vaultとは?

HashiCorpが提供している機密情報の管理ツールです。

Dynamic Secrets (Secret Backend) とは

VaultにAWSやDatabaseなどのユーザを管理させる機能です。

この機能を利用することでVaultを通じてAWSなどのユーザ作成、削除を実施できるようになります。
有効期間が経過したユーザについてはVaultが自動で削除を行ってくれます。

参考

公式サイト

Vault by HashiCorp

ドキュメント

Dynamic Secrets - Getting Started - Vault by HashiCorp
AWS Secret Backend - Vault by HashiCorp


事前準備

VaultをDevモードで起動

DevモードではVaultを停止させるとデータが消えてしまいますが、今回は動作確認のためDevモードで起動します。

$ vault server -dev

...
    export VAULT_ADDR='http://127.0.0.1:8200'

環境変数の設定

$ export VAULT_ADDR='http://127.0.0.1:8200'

AWS Backendをマウント

$ vault mount aws
Successfully mounted 'aws' at 'aws'!

AWSユーザの作成

vaultがAWSを操作するためのユーザ(vault)を作成します。

本来であれば目的に応じたポリシーを付与するべきですが、今回は動作確認のため「AdministratorAccess」ポリシーを適用しました。

作成したユーザの「アクセスキー ID」と「シークレットアクセスキー」はvaultで利用するためメモしておきます。


AWS Backendの設定

Vault用に準備したAWSユーザの「アクセスキー ID」と「シークレットアクセスキー」をaws/config/rootに登録します。

$ vault write aws/config/root \
    access_key=AKIAJDCIHPTOLCKLM6WA \
    secret_key=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

Success! Data written to: aws/config/root

aws/config/rootに書き込んだ情報は読み取れなくなります。

$ vault read aws/config/root

Error reading aws/config/root: Error making API request.

URL: GET http://127.0.0.1:8200/v1/aws/config/root
Code: 405. Errors:

* 1 error occurred:

* unsupported operation

ロールの作成

Getting Started を参考にjsonファイルを作成します。
Actionにec2:*という記載があるので、EC2を操作するアカウントが作成されそうです。

policy.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1426528957000",
      "Effect": "Allow",
      "Action": [
        "ec2:*"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

作成したjsonファイルを指定してロールを作成します。

$ vault write aws/roles/deploy policy=@policy.json

Success! Data written to: aws/roles/deploy

AWSユーザの作成

ロールを指定してAWSユーザを作成させます。
レスポンスとして作成したユーザの「アクセスキー ID」と「シークレットアクセスキー」が返却されます。

$ vault read aws/creds/deploy

Key             Value
---             -----
lease_id        aws/creds/deploy/2cfb960b-7f2e-74c4-d351-917401d27f3b
lease_duration  768h0m0s
lease_renewable true
access_key      AKIAIYMLSSQ434JIRMUQ
secret_key      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
security_token  <nil>

AWSの管理画面を確認すると新しいユーザ(vault-root-deploy-1507372260-9128)が作成されて、EC2を操作するアクセス権限をもってることがわかります。


AWSユーザの削除

lease_idを指定してユーザを削除します。

$ vault revoke aws/creds/deploy/2cfb960b-7f2e-74c4-d351-917401d27f3b

Success! Revoked the secret with ID 'aws/creds/deploy/2cfb960b-7f2e-74c4-d351-917401d27f3b', if it existed.

AWSの管理画面でもVaultが作成したユーザ(vault-root-deploy-1507372260-9128)が削除されたことがわかります。

補足

【HashiCorp Vault】Dynamic Secrets (Secret Backend) の Lease 機能を試す - Qiita