ファニーボーン

プログラムなどについて書いていこうと思います。

Vaultの本番導入を見据えて(2)

概要

前回の記事では、ローカル環境でvaultのbackgroundをZookeeperに設定し、基本的な操作を行いました。 なんだか、便利そうだけどよく分からないVault。 今回は、実運用を想定して、Auth Backendを App ID にして、tokenの動的な発行を試しました。

Auth Backendって何?

Auth Backendとは、ユーザーの認証やアクセス制限をを行うVaultのコンポーネントです。 (https://www.vaultproject.io/docs/auth/index.html) 現状は以下のAuth Backendを使用して認証を行うことができます。 GitHub・AppID・LDAP・MFA・TLS Certificates・Tokens・Username&Password

この中でも、今回、App ID 注目しました。 その理由としては、App ID のbackendは 、個々のサーバー/コンテナに動的に Vaultとの認証を行うことを想定した機構であり、クラウド環境と相性が良さそうだからです。

準備

前回同様、ZookeeperをBackendにして、Vaultを起動し、unsealの状態にしておきます。

* 完全に余談ですが、前回に馬鹿なことをやってしまっていたことに気付きました。 前回、発行したrootのtokenを書き止めておくのを忘れいました。 そのため、seal状態のVaultさんはうんともすんとも言ってくれず、 結果、前回作成したZookeeperのvaultデータを全て消さなければならなくなりました。。 皆さんも、まあないでしょうけど、気をつけて下さいね。

auth のAPIからapp_iduser_id を登録します。

app_id の登録 app_id: hogehoge

$ curl \
    -X POST \
    -H "X-Vault-Token:$VAULT_TOKEN" \
    -d '{"value":"root", "display_name":"demo"}' \
    http://localhost:8200/v1/auth/app-id/map/app-id/hogehoge

user_id の登録 user_id: fugafuga

$ curl \
    -X POST \
    -H "X-Vault-Token:$VAULT_TOKEN" \
    -d '{"value":"hogehoge"}' \
    http://localhost:8200/v1/auth/app-id/map/user-id/fugafuga

app_iduser_id から token を発行

$ curl \
    -X POST \
    -d '{"app_id":"hogehoge", "user_id": "fugafuga"}' \
    "http://127.0.0.1:8200/v1/auth/app-id/login"

レスポンス

{
  "lease_id": "",
  "renewable": false,
  "lease_duration": 0,
  "data": null,
  "warnings": null,
  "auth": {
    "client_token": "10921cd8-001c-25cd-2e5c-2a9c2fa43e16",
    "policies": [
      "root"
    ],
    "metadata": {
      "app-id": "sha1:3b2c6c10d0e78072d14e02cc4c587814d0f10f3a",
      "user-id": "sha1:39975bb0ba31825c4fdd3de775dd468081b3522b"
    },
    "lease_duration": 0,
    "renewable": true
  }
}

client-token としてtokenが発行されました。 簡単ですね。

いつtokenを発行するか

VaultのサイトAuth Backend: App ID - Vault by HashiCorp に想定される使い方があったので、手順まとめてみます。

  1. appIDを登録し、権限を与える。(上記①。例ではroot権限)
  2. configuration management service にappIDを保存する。
  3. cloud-init system がマシン毎の user_idを登録する。 (上記②)
  4. マシンを起動。マシンはconfiguration management serviceから appID を取得。 割り振られたuser_id でvaultと認証を行う。(上記③)

ん。。。なんか分かりそうでわからない。 クラウド環境でいろいろ試してみます。

今回のまとめ

前回、今回とローカルで試しましたが、Vault自体がクラウド環境を想定して設計されているぽいので、 クラウド環境で実環境に即した使い方を模索します。