1. はじめに
Agent Injectorの動作確認やVSOの動作確認時に、Vault CLIを使用してSecret情報の登録を実施したが、同様の設定をVault UIで実施するとどのようになるか確認したのでその手順を記載する。
2. Vault UI
3. 事前準備
3.1. k8s clusterの構築
$ minikube start
$ alias kubectl="minikube kubectl --"
動作確認にk8s(minikube)を使用したため、環境がない場合は下記を参考に構築しておく。
3.2. Vaultの構築
$ helm repo add hashicorp https://helm.releases.hashicorp.com
$ helm repo update
$ helm search repo hashicorp/vault
$ helm install vault hashicorp/vault -n vault --create-namespace
3.3. Portforward設定
Vault UIにアクセスできるようにport forwardする。
(ubuntu)$ kubectl port-forward service/vault -n vault 8200:8200
Vaultのドキュメントに、Vault UIのアクセスに関して記載があり、デフォルトではアクセスできないとのこと。port-forwardを使うか、uiパラメーター(ui.enabled, ui.serviceTypeなど)を設定する必要があり、今回はPortforwardを使用した。
View the Vault UI
The Vault UI is enabled but NOT exposed as service for security reasons. The Vault UI can also be exposed via port-forwarding or through a ui configuration value.
Expose the Vault UI with port-forwarding:
$ kubectl port-forward vault-0 8200:8200 Forwarding from 127.0.0.1:8200 -> 8200 Forwarding from [::1]:8200 -> 8200 #...
Windows PCのブラウザからVault UIの操作を行ったため、以下の手順を実施した。
- Windows PCのTerminalでSSH portforwardingを実施(橙)
- Ubuntu Serverでkubectl port-forwardの実施(緑)
- ブラウザからlocalhostにアクセスする(青)
4. Vault UI操作
4.1. init
Vault UIで初期化を実施する。対応するVault CLIコマンドは下記。
$ kubectl exec -it vault-0 -n vault -- vault operator init
-
Windows PC上でブラウザを開き、
http://localhost:8200
にアクセスする -
初期化画面が表示されるため、Keyの作成数と閾値(Unsealの回数)を入力し、「Initialize」をクリックする
-
initial root tokenとunseal keyが生成されるので、「Continue to Unseal」をクリックする
「Download keys」をクリックすると、下記のようなファイルがDLできる。
{
"keys": [
"5da9bc7edb87090d2bdab3bbd27c828d15a52ba2145f9b998e18185ac7415c7c7a",
"adf557602e675e0b922407fc6664cb54b23b1af333deb3a74a29eb3ebda79a111d",
"9fb931f43dfb9cb67d2ea0a5f6b8ea3834666ca9d3b76f8e8ec14a710e9d9a9ff9",
"1db0d530935693d01f64985a32d1d11bd53cf31cc7b775aa3dacf7d8e5666052e6",
"b0ef7d310a0e2badd2eba7ee22c0c2f80154aacadbd92548481a6ce9ea619fd7b1"
],
"keys_base64": [
"Xam8ftuHCQ0r2rO70nyCjRWlK6IUX5uZjhgYWsdBXHx6",
"rfVXYC5nXguSJAf8ZmTLVLI7GvMz3rOnSinrPr2nmhEd",
"n7kx9D37nLZ9LqCl9rjqODRmbKnTt2+OjsFKcQ6dmp/5",
"HbDVMJNWk9AfZJhaMtHRG9U88xzHt3WqPaz32OVmYFLm",
"sO99MQoOK63S66fuIsDC+AFUqsrb2SVISBps6ephn9ex"
],
"root_token": "hvs.zPrYGLanjg5bh81svCNDskMh"
}
4.2. Unseal
Vault UIでUnsealを実施する。対応するVault CLIコマンドは下記。
$ kubectl exec -it vault-0 -n vault -- vault operator unseal
3.4. Login
Vault UIでLoginを実施する。対応するVault CLIコマンドは下記。
$ kubectl exec -it vault-0 -n vault -- /bin/sh
(vault)$ vault login
-
Unsealが完了すると、ログイン画面が表示される
-
キー生成時に作成したInitial Root Tokenを入力し、「Sign in」をクリックする
-
ログインに成功すると、Vault UIの管理画面が表示される
4.3. Secret登録
Vault UIでSecretを登録する。対応するVault CLIコマンドは下記。
(vault)$ vault secrets enable -path=app-secret kv-v2
(vault)$ vault kv put app-secret/kv-secret SECRET_KEY1="aaaa" SECRET_KEY2="bbbb"
(vault)$ vault kv list app-secret/
(vault)$ vault kv get app-secret/kv-secret
4.3. Policy設定
Vault UIでPolicyを設定する。対応するVault CLIコマンドは下記。
(vault)$ vault policy write app-secret-all-read-policy - <<EOF
path "app-secret/data/kv-secret" {
capabilities = ["read"]
}
EOF
-
左カラムの「Policies」をクリックする
-
「Create ACL policy」をクリックする
-
「Name」と「Policy」を入力し、「Generate policy」をクリックする
-
Policyが登録されていることを確認する
4.5. Auth Method設定
Vault UIでAuth methodとPolicyを設定する。対応するVault CLIコマンドは下記。
4.5.1. kubernetes auth method作成
(vault)$ vault auth enable --path=kubernetes kubernetes
(vault)$ vault write auth/kubernetes/config kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443"
-
左カラムの「Access」をクリックする
-
Authentication Mehtods画面が表示されるので、「Enable new method」をクリックする
-
「Kubernetest」をクリックする
-
「Path」を入力し、「Enable method」をクリックする
-
「Kubernetes host」を入力し、「Save」をクリックする
Vault CLIで指定している環境変数をVault UIから設定してもうまく動かなかったため、echoでIPを確認する
ubuntu@ubuntu:~$ kubectl exec -it vault-0 -n vault -- /bin/sh
/ $ echo $KUBERNETES_PORT_443_TCP_ADDR
10.96.0.1
/ $
4.5.2. role作成
(vault)$ vault write auth/kubernetes/role/app-role \
bound_service_account_names=app-sa \
bound_service_account_namespaces=app-ns \
policies=app-secret-all-read-policy \
ttl=24h