HashiCorp Vaultを理解する(6):Secret Engines
イオンスマートテクノロジーのCTO室SREチームの@hikkie13です。
過去の記事に記載がある通り、弊社ではHCP Vaultの導入を進めています。
導入には教育・学習が欠かせません。
その過程で得た知識を何回かに分けてまとめていこうと思います。(心が折れない限り)
今回は、VaultのSecret Enginesについてです。
Secret Enginesについて
- 組織の機密情報を管理するコンポーネントである。
- Secrets Enginesはデータを保存、生成、暗号化する。
- 多くのSecrets Enginesは他のサービスと接続し、動的にクレデンシャルを生成する。
- kv(key/value)のように静的なクレデンシャルも管理可能。
- 例として、以下のようなSecret Engineが存在する。
- AWS
- Active Directory
- Databases
- Key/Value
- SSH
- Azure
シークレットとは何か?
HashiCorp Vaultで扱うシークレットは以下のような機密情報である。いわゆる個人情報そのものを指すわけではない。
- APIキー
- Databaseの認証情報
- 平文で保存したくない諸々
- プライベート証明書
シークレットを管理する際には以下の観点が重要となり、これを実現する一つの手段が Secrets Engineである。
- 認証情報の共有を避ける
- 定期的なローテーション
- 監査記録
- Policyを用いて最小権限管理
動的シークレットと静的シークレット
シークレットには大きく分けて、動的と静的がある。
静的シークレットには以下の課題がある。
- 期限切れがない
- 期限切れにならないため、セキュリティリスクが高まる。
- チーム間で共有される。
- シークレットがチームメンバー間で共有され、誰がどのシークレットを使用しているかの追跡が困難。
- ローテーションが少ない
- シークレットが滅多に更新されず、攻撃者に狙われやすい。
- 常に有効
- シークレットが常に有効であるため、常に攻撃のリスクが存在する。
動的シークレットは上記の課題を解決する。
- オンデマンドでシークレットを生成
- 必要に応じてシークレットを生成し、使用後は自動的に無効化する。
- 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のチュートリアル
kv(key/value)
- key/value secret engineは静的シークレットを保存するために使用する。
- 2つのバージョン(v1とv2)がある。
- v1はバージョン管理できないが、v2はバージョン管理が可能。
- key/value secret engineで保存されるシークレットは256bit AESで暗号化される。
- シークレットは定義されたPATHに保存される。
v1とv2の違い
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)のチュートリアル
参考
HashiCorp Certified: Vault Associate 2024 (w/ Hands-On Labs)
HashiCorp Certified: Vault Operations Professional
最後に(採用のお知らせ)
イオンスマートテクノロジーではエンジニアをはじめとした様々な職種を積極的に採用中です!
これからとてもおもしろいフェーズへ突入していくと思いますので興味のある方は是非カジュアル面談などで話を聞いてください!
Discussion