0
0

Vault CLIとVault UIの対応

Last updated at Posted at 2024-05-12

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)を使用したため、環境がない場合は下記を参考に構築しておく。

https://qiita.com/n4k4y05h1/items/abff8c110e500ae47437

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の操作を行ったため、以下の手順を実施した。

  1. Windows PCのTerminalでSSH portforwardingを実施(橙)
  2. Ubuntu Serverでkubectl port-forwardの実施(緑)
  3. ブラウザからlocalhostにアクセスする(青)

vault.gui.portfoward3.png

4. Vault UI操作

4.1. init

Vault UIで初期化を実施する。対応するVault CLIコマンドは下記。

コマンド
$ kubectl exec -it vault-0 -n vault -- vault operator init
  1. Windows PC上でブラウザを開き、http://localhost:8200にアクセスする

  2. 初期化画面が表示されるため、Keyの作成数と閾値(Unsealの回数)を入力し、「Initialize」をクリックする

    image.png

  3. initial root tokenとunseal keyが生成されるので、「Continue to Unseal」をクリックする

    020240512_145950.png

「Download keys」をクリックすると、下記のようなファイルがDLできる。

vault-cluster-vault-2024-05-12T06_08_23.011Z.json
{
  "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
  1. キー生成画面で「Continue to Unseal」をクリックすると、Unseal画面が表示される

  2. 生成したkeyを入力し、「Unseal」をクリックする
    キー生成時に閾値で指定した回数、実行する

    image.png

3.4. Login

Vault UIでLoginを実施する。対応するVault CLIコマンドは下記。

コマンド
$ kubectl exec -it vault-0 -n vault -- /bin/sh
(vault)$ vault login
  1. Unsealが完了すると、ログイン画面が表示される

  2. キー生成時に作成したInitial Root Tokenを入力し、「Sign in」をクリックする

    image.png

  3. ログインに成功すると、Vault UIの管理画面が表示される

    020240512_034944.png

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
  1. 左カラムの「Secrets Engine」をクリックすると、Secrets Engine画面が表示されるので、「Enable new engine」をクリックする。
    020240512_035007.png

  2. 「KV」をクリックする。
    020240512_035027.png

  3. 「Path」を入力し、「Enable engine」をクリックする。
    020240512_035056.png

  4. 「Create secret」をクリックする。
    020240512_035112.png

  5. 「Path for this secret」と「Secret data」を入力し、「Save」をクリックする。
    020240512_035226.png

  6. Secretが登録されていることを確認する。
    020240512_035243.png

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
  1. 左カラムの「Policies」をクリックする

    020240512_035350.png

  2. 「Create ACL policy」をクリックする

    020240512_035406.png

  3. 「Name」と「Policy」を入力し、「Generate policy」をクリックする

    020240512_035438.png

  4. Policyが登録されていることを確認する

    020240512_035456.png

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"
  1. 左カラムの「Access」をクリックする

    020240512_035530.png

  2. Authentication Mehtods画面が表示されるので、「Enable new method」をクリックする

    020240512_035549.png

  3. 「Kubernetest」をクリックする

    020240512_035603.png

  4. 「Path」を入力し、「Enable method」をクリックする

    020240512_035700.png

  5. 「Kubernetes host」を入力し、「Save」をクリックする

    020240512_212616.png

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
  1. Authentication Methods画面から、作成したAuth methodをクリックする

    020240512_035800.png

  2. 「Create role」をクリックする

    020240512_035830.png

  3. 必要事項を入力し「Save」をクリックする

    • Name
    • service account
    • sarvice accountのnamespace
    • Policy
    • TTL
      020240512_040007.png

    PolicyとTTL設定

    Tokensをクリックすると入力フォームがでてくるため、入力する。

    020240512_203824.png

  4. roleが作成されたことを確認する

    020240512_040039.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0