🐈‍⬛

HashiCorp Vaultを理解する(6):Secret Engines

2024/06/17に公開

イオン⁠⁠⁠⁠⁠⁠⁠スマートテクノロジーのCTO室SREチームの@hikkie13です。

過去の記事に記載がある通り、弊社ではHCP Vaultの導入を進めています。
https://zenn.dev/aeonpeople/articles/6625a900552311
https://zenn.dev/aeonpeople/articles/0b4492898a0fd3

導入には教育・学習が欠かせません。
その過程で得た知識を何回かに分けてまとめていこうと思います。(心が折れない限り)

今回は、VaultのSecret Enginesについてです。

Secret Enginesについて

https://developer.hashicorp.com/vault/docs/secrets

  • 組織の機密情報を管理するコンポーネントである。
  • Secrets Enginesはデータを保存、生成、暗号化する。
  • 多くのSecrets Enginesは他のサービスと接続し、動的にクレデンシャルを生成する。
  • kv(key/value)のように静的なクレデンシャルも管理可能。
  • 例として、以下のようなSecret Engineが存在する。
    • AWS
    • Active Directory
    • Databases
    • Key/Value
    • SSH
    • Azure

シークレットとは何か?

HashiCorp Vaultで扱うシークレットは以下のような機密情報である。いわゆる個人情報そのものを指すわけではない。

  • APIキー
  • Databaseの認証情報
  • 平文で保存したくない諸々
  • プライベート証明書

シークレットを管理する際には以下の観点が重要となり、これを実現する一つの手段が Secrets Engineである。

  • 認証情報の共有を避ける
  • 定期的なローテーション
  • 監査記録
  • Policyを用いて最小権限管理

動的シークレットと静的シークレット

シークレットには大きく分けて、動的と静的がある。
https://www.hashicorp.com/blog/why-we-need-dynamic-secrets

静的シークレットには以下の課題がある。

  • 期限切れがない
    • 期限切れにならないため、セキュリティリスクが高まる。
  • チーム間で共有される。
    • シークレットがチームメンバー間で共有され、誰がどのシークレットを使用しているかの追跡が困難。
  • ローテーションが少ない
    • シークレットが滅多に更新されず、攻撃者に狙われやすい。
  • 常に有効
    • シークレットが常に有効であるため、常に攻撃のリスクが存在する。

動的シークレットは上記の課題を解決する。

  • オンデマンドでシークレットを生成
    • 必要に応じてシークレットを生成し、使用後は自動的に無効化する。
  • leaseと更新
    • 各シークレットにはleaseが関連付けられており、この期間が終了するとシークレットは失効する。
leaseについて
  • シークレットや認証トークンに付与する有効期限のこと。
  • データは指定された期間、またはTTLの間有効となる。
  • leaseが期限切れになると、Vaultはデータを取り消す。
  • 動的シークレットのユーザーはleaseを確認し、更新する必要がある。
  • すべての動的シークレットはleaseが必要。
    • leaseは取り消しが可能。
    • leaseが取り消されると、シークレットは無効になり、更新できなくなる。
    • Tokenが取り消されると、すべてのleaseが取り消される。
  • シークレットの無効化
    • 必要に応じてシークレットを手動で無効化することができる。
  • 特権アクセスの管理
    • 管理者や特定のアプリケーション用に一時的な特権アクセスを提供し、使用後はそのアクセスを無効化する。

これから、代表的なsecrets engineとして、databaseとkv(key/value)を解説する。

database

database secret engine


https://developer.hashicorp.com/vault/tutorials/db-credentials/database-secrets より

  • アプリケーションは、データベースの認証情報を環境変数として設定するのではなく、Vaultに問い合わせる。
  • 管理者は、データベース認証情報のTTLを指定し、使用されなくなったときに自動的に破棄されるように、その有効性を強制する。

rootのパスワードローテーション

Vaultの機能を利用して、rootパスワードのローテーションが可能。


https://developer.hashicorp.com/vault/tutorials/db-credentials/database-root-rotation より

アプリケーションユーザのパスワードローテーション

rootと同様に、アプリケーションが利用するDBユーザのパスワードローテーションが可能になる。パスワードはVaultに保持されており、アプリケーションは認証情報をVaultに問い合わせるため、アプリケーションの変更なくパスワードのローテションが可能になる。

https://developer.hashicorp.com/vault/tutorials/db-credentials/database-creds-rotation より

databaseのチュートリアル

https://developer.hashicorp.com/vault/tutorials/db-credentials/database-secrets

kv(key/value)

  • key/value secret engineは静的シークレットを保存するために使用する。
  • 2つのバージョン(v1とv2)がある。
    • v1はバージョン管理できないが、v2はバージョン管理が可能。
  • key/value secret engineで保存されるシークレットは256bit AESで暗号化される。
  • シークレットは定義されたPATHに保存される。

v1とv2の違い

https://developer.hashicorp.com/vault/tutorials/secrets-management/compare-kv-versions

v2はv1と以下の点が異なる。

  • バージョン管理をサポートするために、KV v2はキーバリューエントリにメタデータを追加する。
  • 作成日、シークレットのバージョンなどを決定するために使用される。
  • シークレットおよび/またはメタデータを参照する際に考慮すべき2つのプレフィックスを導入する。例えば、 azure というPATHを定義してkey value secret engineを作成した場合
    • azure/data配下 : 実際のK/Vデータが保存される場所
    • azure/metadata配下 : シークレットに関するメタデータを保存する。

イメージ例(commandと指定するPATHの違い):

command v1のPATH v2のPATH
kv get azure/<key_path> azure/data/<key_path>
kv list azure/<key_path> azure/metadata/<key_path>
  • 利用できるコマンドが異なる( vault kv command )
コマンド 意味 備考
put KVにデータを書き込む -
get KVからデータを読み取る -
delete KVからデータを削除する -
list KV内のデータを一覧表示する -
undelete secretのバージョンを復元する v2のみ
destroy データを完全に破棄する v2のみ
patch KVに特定のキーを追加する v2のみ
rollback KVの古いデータを回復する v2のみ

v1からv2へのアップグレード

  • 以下のコマンドで、v1からv2へのアップグレードが可能。
vault kv enable-versioning [PATH]
  • ただし、アップグレードを戻すことはできない。
  • v2からv1への変更もできない。

kv(key/value)のチュートリアル

https://developer.hashicorp.com/vault/tutorials/secrets-management/static-secrets

https://developer.hashicorp.com/vault/tutorials/secrets-management/versioned-kv

参考

https://developer.hashicorp.com/vault/docs/secrets
https://developer.hashicorp.com/vault/docs
https://youtube.com/playlist?list=PLFkEchqXDZx7CuMTbxnlGVflB7UKwf_N3&si=uJE2c_GhjxQ4FmMA
HashiCorp Certified: Vault Associate 2024 (w/ Hands-On Labs)
HashiCorp Certified: Vault Operations Professional

最後に(採用のお知らせ)

イオンスマートテクノロジーではエンジニアをはじめとした様々な職種を積極的に採用中です!
これからとてもおもしろいフェーズへ突入していくと思いますので興味のある方は是非カジュアル面談などで話を聞いてください!

https://engineer-recuruiting.aeon.info/

AEON TECH HUB

Discussion