はじめに
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が自動で削除を行ってくれます。
参考
公式サイト
ドキュメント
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を操作するアカウントが作成されそうです。
{
"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