シングルクラウドでHashiCorp Vaultを使うメリット
イオンスマートテクノロジー株式会社(通称:AST)CTO室SREチーム所属、あおしょんです。
下記のアドベントカレンダー14日目の記事となります。
terraformのアドベントカレンダーなのにVaultの記事でごめんなさい。
ただ説明に下記の記載があったので思い切って参加しちゃいました。
ネタに困ったら HashiCorp Product 全般でも別に構わないと思うよ。
HCP Vaultライセンス購入に至るまで
以前、下記の記事に記載した通り弊社ではシークレット管理の切り札としてHCP (HashiCorp Cloud Platform) Vaultの導入を推進しています。
記事をお読みいただいた方で下記の記載が気になった方がいらっしゃるかもしれません。弊社のプラットフォームはほぼ全てAzureなのでHCP VaultのクライアントとなるKubernetesはAKS (Azure Kubernetes Service) を利用しています。
ぶっちゃけ私が弊社の人間ではなかったらこう思います。
Azure Key Vaultで良くね?
ですがあれよあれよと大人の事情でHCP Vaultのライセンス購入が決まり弊社環境での実現性検証(購入してから始めたんや…)と導入を現在進行形でやることになりました。
本記事ではVault(HashiCorp Vault)を導入する過程で確かな確信となったAzure、というかシングルクラウドでVaultを使うメリットをザックリ紹介します。
Dynamic Secretsで認証情報の流出リスクを低減できる
やはり一番のメリット、というか弊社のVault導入理由にもなるのですがDynamic Secrets(動的シークレット)があることです。
動的シークレットが何かをザックリ説明すると「Vaultさんが定期的にDBなどの一時的な認証情報を作ったり消したりしてくれる」です。VaultのクライアントとなるアプリケーションはVaultの認証方式のAuthMethodで許可(Token)を得ることでDBなどの認証情報を取得します。これで認証情報が外部流出しても一時的なものなのでリスクが減りますね。もちろん認証情報の再作成のインターバル、すなわちTTLは利用者自身が設定することができます。 vault write demo-db/roles/dev-postgres \
db_name=demo-db \
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; \
GRANT ALL PRIVILEGES ON DATABASE postgres TO \"{{name}}\";" \
backend=demo-db \
name=dev-postgres \
default_ttl="1m" \
max_ttl="1m"
Dynamic secretsから抜粋
詳しくはエーピーコミュニケーションズさんの技術ブログを読むことをお勧めします。
私も大変勉強になりました!また、Tokenについては私が拙い記事を書いているので参考にして頂けるとありがたいです。
但し、このメリットが享受出来るのはアプリケーションのデプロイ先がVM(Virtual Machine)やAKS(Azure Kubernetes Service)、所謂クラウド利用者の運用範囲が広い場合であり、App ServiceなどのマネージドサービスかつDBもマネージドサービスであればDB関連のロールを割り当てたManaged IDで認証すれば良いので不要かなとは思います。
Vault Secrets Operatorで開発者がシークレット管理を意識することがなくなる
ではAKSでDynamic Secrets使っていこう!となると次に取得した認証情報をどうやってKubernetesのSecretに突っ込むかを考えないといけないのですが、これを上手いことやってくれるのがVault Secrets Operator、略してVSOです。
VSOについてもっと詳しく知りたい場合はこれまたエーピーコミュニケーションズさんの技術ブログを読むことをお勧めします。
CLIが使いやすい
これは完全に個人的なメリットでしかないのですが…vault
コマンド使いやすいです!分かりやすいです!
$ vault --help
Usage: vault <command> [args]
Common commands:
read Read data and retrieves secrets
write Write data, configuration, and secrets
delete Delete secrets and configuration
list List data or secrets
login Authenticate locally
agent Start a Vault agent
server Start a Vault server
status Print seal and HA status
unwrap Unwrap a wrapped secret
Other commands:
audit Interact with audit devices
auth Interact with auth methods
debug Runs the debug command
events
kv Interact with Vault's Key-Value storage
lease Interact with leases
monitor Stream log messages from a Vault server
namespace Interact with namespaces
operator Perform operator-specific tasks
patch Patch data, configuration, and secrets
path-help Retrieve API help for paths
pki Interact with Vault's PKI Secrets Engine
plugin Interact with Vault plugins and catalog
policy Interact with policies
print Prints runtime configurations
proxy Start a Vault Proxy
secrets Interact with secrets engines
ssh Initiate an SSH session
token Interact with tokens
transform Interact with Vault's Transform Secrets Engine
transit Interact with Vault's Transit Secrets Engine
version-history Prints the version history of the target Vault server
サブコマンドも分かりやすいです!
$ vault auth --help
Usage: vault auth <subcommand> [options] [args]
This command groups subcommands for interacting with Vault's auth methods.
Users can list, enable, disable, and get help for different auth methods.
To authenticate to Vault as a user or machine, use the "vault login" command
instead. This command is for interacting with the auth methods themselves, not
authenticating to Vault.
List all enabled auth methods:
$ vault auth list
Enable a new auth method "userpass";
$ vault auth enable userpass
Get detailed help information about how to authenticate to a particular auth
method:
$ vault auth help github
Please see the individual subcommand help for detailed usage information.
Subcommands:
disable Disables an auth method
enable Enables a new auth method
help Prints usage for an auth method
list Lists enabled auth methods
move Move an auth method to a new path
tune Tunes an auth method configuration
あとVaultはNamespaceという機能でVault上で仮想的にVaultを分割して作成することができるのですがexport VAULT_NAMESPACE="admin/path"
で環境変数の値を変えるだけでNamespaceを切り替えることができるので楽です。
おわりに
以上、Azure、というかシングルクラウドでVaultを使うメリットでした。
最後のメリットが完全に個人的な志向によることでしかないので、やはり会社として導入するメリットは
- Dynamic Secretsで認証情報の流出リスクを低減できる
- Vault Secrets Operatorで開発者がシークレット管理を意識することがなくなる
ことだと思います。
弊社としてはVaultを導入したばかりなので他にもこんなメリットがあるぜ!という情報をお持ちの方がいらっしゃればコメントで教えて頂けると大変ありがたいです。
また、いずれは弊社もマルチクラウドへの道を進むことになる…かも…?しれないのでその時はマルチクラウドでVaultを使うメリットを記事にしたいと思います。(そもそもクラウドの違いを意識せずにシークレット管理が出来ることを目指して作られたプロダクトの筈なので記事にするまでもないかもしれませんが…)
最期にイオンスマートテクノロジーではエンジニアを絶賛採⽤中です。
Discussion