Azure Key Vault 概要とマネージドIDの解説
この記事の内容
- Azure Key Vaultはキー・シークレット・証明書を一元管理するためのサービスです
- 複数のアプリケーションやサービスが増えたとき、個別管理の課題(更新漏れ・トラブル)を解消できます
- Logic Appsを使ったKey Vaultへのアクセスデモを通じて、基本操作を確認します
- Key Vaultへのアクセス方法として、ユーザーID・サービスプリンシパル・マネージドIDの3パターンがあります
- マネージドIDを使うことで、アプリケーション内に認証情報を埋め込まずにKey Vaultへアクセスできます
Azure Key Vaultとは
Azure Key Vaultは、キー・シークレット・証明書を集中管理するためのサービスです。
皆さんもパスワードや証明書、接続文字列などを個別に利用されていることと思います。個別に使うだけであれば問題ないのですが、複数のアプリケーションやサービスにまたがって管理しようとすると、Key Vaultが非常に役立ちます。
なぜ一元管理が必要なのか
個別管理の問題点
たとえば、SQLデータベースの接続文字列やパスワードをアプリケーションのコード内に直接埋め込むことは技術的には可能です。アプリケーションが1つのうちはシンプルで動作します。
しかし、アプリケーションやサービスが増えていくと、認証情報の管理ポイントが各所に分散してしまいます。
特に問題になるのが更新・ローテーションのタイミングです。鍵が漏洩した場合や証明書の有効期限が近づいた場合には、使用しているすべての箇所で更新が必要になります。更新し忘れた箇所が1つでもあると、そこでエラーが発生してしまいます。証明書の更新ミスによってパブリッククラウドのサービスが停止するという事例も実際に起きています。
一元管理のメリット
Key Vaultを間に挟むことで、この問題を解決できます。
- Key Vault内で一箇所更新すれば、それを参照しているすべてのアプリケーションに自動的に反映されます
- 複雑な構成になってもシンプルさを保てます
「間に1クッション挟む」というのはKey Vaultに限った話ではありません。一見すると無駄に見えますが、規模が大きくなったときにシンプルさを維持するための仕組みとして、さまざまな場面で使われているパターンです。
Key Vaultの利用パターン
アプリケーションからのシークレット取得
最も典型的な利用例は、アプリケーションがパスワードや接続情報をKey Vaultから取得するパターンです。アプリケーションのコードに直接認証情報を書くのではなく、Key Vaultから取得するように実装します。
ディスク暗号化への応用
仮想マシンのディスクを独自のキーで暗号化したい場合にも、Key Vaultが使われます。ディスク暗号化セットを作成してKey Vaultと組み合わせることで、仮想マシンのディスク暗号化を一括管理できます。
Key Vaultの作成手順
Azureポータルからキー コンテナーを作成します。
基本設定
| 項目 | 内容 |
|---|---|
| リソースグループ | 任意のグループを指定 |
| 地域 | 例:東日本 |
| 価格レベル | 標準 または Premium |
価格レベルについて:Premiumを選択するとHSM(ハードウェア セキュリティ モジュール)を使ったキー管理が利用できます。通常は標準で問題ありません。
アクセス制御の設定
Key Vaultのアクセス制御には2つの方式があります。
- アクセスポリシー:Key Vault独自のアクセス制御。取得・一覧・更新・作成などの操作を個別に細かく設定できます
- Azureロールベースのアクセス制御(RBAC):通常のAzure RBACと同じ仕組みで管理します
これから新しく構成するのであれば、Azure RBACを選択することをおすすめします。
Key Vaultの主要オブジェクト
Key Vaultには以下の3種類のオブジェクトを格納できます。
キー
公開鍵・秘密鍵のペアです。RSAやECなど、キーの種類やサイズを選択して生成できます。アクティブ化する日付や有効期限の設定も可能です。秘密鍵はKey Vault内で安全に保管され、直接取り出すことはできません。
シークレット
パスワードなど任意の文字列を格納します。名前と値を指定して保存し、有効期限の設定も可能です。
取得時には最新バージョンの値が返されます。値を更新した場合は新しいバージョンとして保存され、取得すると更新後の値が得られます。
証明書
自己署名証明書のほか、DigiCertやGlobalSignなど統合されたCAから発行された証明書も管理できます。有効期間や自動更新のタイミング(例:有効期間の80%経過時)なども設定できます。
Logic AppsからKey Vaultへアクセスする
ユーザーIDでアクセスする場合
Logic Appsのデザイナーで「シークレットの取得」アクションを追加し、Key Vaultの名前を指定します。接続時に自分のアカウントでサインインすることで、そのアカウントに付与されたRBACの権限でアクセスできます。
この方法でシークレットを取得し、Key Vault側でシークレットの値を更新すると、次の実行時には自動的に新しい値が取得できるようになります。
マネージドIDを使ったアクセス
なぜマネージドIDが必要なのか
ユーザーIDによる接続はできましたが、アプリケーションにKey Vaultへアクセスするための認証情報を埋め込むと、「認証情報を安全に管理するためにKey Vaultを使う」という目的と矛盾してしまいます。この最初の一発目のアクセスを安全に行う仕組みが必要です。
アクセス方法の3パターン
| パターン | 概要 |
|---|---|
| ユーザーID | Azure ADのユーザーオブジェクトにRBACで権限を付与 |
| サービスプリンシパル | Azure ADにアプリケーションを登録してRBACで権限を付与 |
| マネージドID | AzureサービスにAzure AD上のIDを付与してRBACで権限を付与 |
ユーザーやアプリケーションへの権限付与が「Azure ADにオブジェクトがあるから権限を付与できる」という仕組みである以上、Azureサービス(Logic Appsなど)にも同様にAzure AD上のIDが必要です。これを実現するのがマネージドIDです。
システム割り当てマネージドIDの有効化
Logic Appsのリソース画面から「ID」を開き、「システム割り当て済み」をオンにして保存します。
これによってAzure ADにLogic Apps自身を表すオブジェクトIDが登録されます。
Key VaultへのRBABロールの割り当て
マネージドIDを有効化したら、Key VaultのアクセスコントロールでRBACのロールを割り当てます。
- Key Vaultの「アクセス制御(IAM)」を開く
- 「ロールの割り当ての追加」を選択
- ロール:キー コンテナー閲覧者(読み取りのみの場合)
- アクセスの割り当て先:マネージドID
- メンバーの選択:対象のLogic Appsを選択
マネージドIDでの接続確認
Logic Appsのデザイナーで接続を「マネージドID」に変更し、対象のKey Vaultを指定して保存・実行します。権限が正しく付与されていれば、シークレットの値が取得できます。
ポイント:アプリケーションコード内に認証情報を一切埋め込まずに、Key Vaultからシークレットを取得できています。
まとめ
Azure Key Vaultは、キー・シークレット・証明書を一元管理するためのサービスです。アプリケーションやサービスが増えてきたとき、あるいは証明書の更新・ローテーションが発生したときに、一箇所更新するだけで全体に反映される仕組みを作れます。
Key Vault自体へのアクセスには、マネージドIDを活用することで、アプリケーション内に認証情報を埋め込まずに安全にアクセスできます。システム割り当てマネージドIDをオンにして、Key Vault側でRBACのロールを付与するだけで設定が完了します。
パスワードや証明書を扱う開発者の方は、ぜひKey Vaultの導入を検討してみてください。