公開日:2024年6月26日最終更新日:
近年ではリモートワークなど柔軟な働き方が推進される中で、不正アクセスや情報漏洩といったセキュリティ上の問題解決の重要性が高まっています。特にサーバ環境がクラウドに移行したことで利便性が上がる反面、攻撃の対象になりやすく、アクセスに対して厳密なチェックと保護を行う態勢が必要です。しかし、連携するサービスや公開するエンドポイントが増えるほど、認証に使うパスワードやアクセスキーといった鍵の管理の手間やコストが掛かってしまいます。
Azure Key Vaultは厳重な鍵の管理を担うセキュリティサービスです。Microsoft社が提供するセキュリティ基盤を活用したサービスで、ソフトウェアとハードウェアの両面で鍵の漏洩リスクを低減します。本記事では、Azure Key Vaultの役割や用途を解説していきます。
目次 <Contents>
Azure Key Vaultとは

Azure Key Vault(以下、Key Vault)は、認証や暗号化に使われるシークレット(鍵)を統合的に管理できるプラットフォームサービスです。例えば、アプリケーションで扱われる下記のようなシークレットを保護できます。
- 認証パスワードやトークン
- APIやSSHなどの接続に使うアクセスキー
- DBなどの接続文字列
- 署名に用いる暗号化キー
- 証明書
これらのシークレットはMicrosoftのデータセンターにある堅牢なハードウェア上に格納され、さらにAzureのアクセス管理基盤であるEntra ID(旧Azure Active Directory)によって守られています。
Entra IDによってAzureを中心とした細やかなアクセス制御が可能となり、他のAzureサービスやオンプレミスサーバとの間で交わされる認証にも活用でき、環境に依らないシークレット管理が実現可能です。
このように、Key VaultではシークレットをAzureのセキュアな仕組みの上に一元管理し、専用の保管場所に隔離することで脅威から守っています。
Azure Key Vaultの仕組み
Key Vaultの安全性を実現しているシークレット管理の仕組みを紹介します。
厳重なアクセス管理
Key Vaultでは、シークレットへのアクセス権限や細かな操作権限の制御が可能です。それを支える仕組みが、Azureに備わっているEntra IDとRBACです。
Entra IDはアクセスの認証に使われる仕組みで、Azure上のユーザやサービスごとにシークレットへのアクセス権限を与えることができます。また、RBACと呼ばれるAzure独自のロールベースのアクセス制御機構によって、認証後のシークレット操作を認可します。シークレットの読み取りや生成などの操作権限を最小限に抑えることで、漏洩のリスクを低減します。
なお、これらの仕組みはAzureサービス間で横断的に利用できるため、既存のAzureサービスやユーザに組み込むことが可能です。
安全なシークレット保管
Key Vaultで管理されるシークレットは、キーコンテナと呼ばれる分離された領域に保管されます。キーコンテナにはそれぞれアクセス制限が掛けられるので、顧客や用途ごとに区切ることで情報漏洩の影響範囲が局所化されます。
キーコンテナの保管形態は複数の顧客で間借りするマルチテナント向けと、単一の顧客専用のハードウェアに保管できるシングルテナント向けの2種類です。なお、どちらの形態でも暗号化キーの厳重な管理が行えるHSM(ハードウェアセキュリティモジュール)が利用可能ですが、シングルテナントでは専用のHSMが用意され、より厳密なセキュリティが要求される用途に適しています。
また、Key Vaultは高い可用性も備えています。キーコンテナは物理的に離れたデータセンター(リージョン)にレプリケートされているため、障害時にもシステムを止めずに稼働し続けることが可能です。
Azure Key Vaultの用途
セキュリティがより強固なKey Vaultにシークレットの管理を委ねることで、アプリケーションを安全に運用できます。
アプリケーションとシークレット管理の分離
Key Vaultは、アプリケーションからシークレット管理の役割を分離することが可能です。
アプリケーションにはAPIキー、接続文字列、パスワードなど、他のサービスと連携するための機密情報が含まれています。このような重要な情報はユーザには直接アクセスさせる必要がないため、厳重な管理が求められます。しかし、アプリケーションのセキュリティはインターネットに公開する以上はリスクが付きまとうため、少しでも脅威から守りたいシークレットの管理とは相反した考え方です。
Key Vaultを使うことで、アプリケーションのデプロイ先とは異なる場所でシークレットを統括的に管理できます。シークレットに対しては最低限必要な認証や認可に絞ることで、セキュリティリスクを低減できます。また、集中管理することで、共有されているシークレットの更新管理も容易です。
キーを使った暗号化や署名
Key Vaultを利用することで暗号化や署名を担うアプリケーションが実現できます。例えば、クライアント証明書やアクセスキーの発行、あるいはデータの暗号化や文章の署名といった用途で利用できます。
このような暗号化されたシークレットは、本人であることの証明や改ざんされていないことを保証するために使われますが、これらを作成するためのキーが漏洩してしまうとなりすましができてしまいます。そのため、暗号化キーは厳格なセキュリティの下で管理されなければなりません。
HSMを使うことで、暗号化キーを表に出さずに、ハードウェア内部で暗号化が完結できます。また、暗号化デバイスとして国際的なセキュリティ基準(FIPS 140-2)を満たしており、信頼性が求められる要件でも活用できます。
Azure Key Vaultの利用料金
Key Vaultの利用料金は使用した分だけ請求される従量課金制で、価格はキーコンテナの保管形態やキー管理の種類によって分かれています。
シークレット・証明書の操作
プラン | Standard | Premium |
---|---|---|
秘密情報の操作 | 4.726円 ※10,000トランザクションあたり | 4.726円 ※10,000トランザクションあたり |
証明書の操作 | 更新:472.501円/更新リクエスト その他すべての操作:4.726円 ※1万トランザクションあたり | 更新:472.501円/更新リクエスト その他すべての操作:4.726円 ※1万トランザクションあたり |
ソフトウェアで保護されたキー
プラン | Standard | Premium |
---|---|---|
RSA 2048ビットキー | 4.726円 ※1万トランザクション | 4.726円 ※1万トランザクション |
高度なキー (RSA 3072ビット、RSA 4096ビットなど) | 23.626円 ※1万トランザクション | 23.626円 ※1万トランザクション |
HSMで保護されたキー
プラン | Standard | Premium |
---|---|---|
RSA 2048ビットキー | 不可 | 1キーあたり:157.501円/月 4.726円 ※1万トランザクションあたり |
高度なキー (RSA 3072ビット、RSA 4096ビットなど) | 不可 | 250キーまで:787.501円/月 1,500キーまで:393.751円/月 4,000キーまで:141.751円/月 ※1キーあたりの価格 |
※上記は東日本リージョンにおける価格で、157.5円/ドルで算出されています。
Azure Key Vaultを使ったシークレット管理
Webアプリからシークレットを読み込む手順を紹介していきます。
シークレットの作成
まずはAzureポータルにログインして、キーコンテナを作成しましょう。「セキュリティ」カテゴリからキーコンテナ―を選びます。

次の画面で「キーコンテナーの作成」をクリックし、内容を入力していきます。

- Key Vault名:適当な名称
- 地域:東日本、西日本など
- 価格レベル:標準(※利用料金がかかります)

アクセス構成タブでは、アクセス許可モデルに「Azureロールベースのアクセス制御」を選択します。

続けて、シークレットを作成するために「ロールの割り当ての追加」からキーコンテナーの管理権限を付与しましょう。

ロールタブで「キーコンテナー管理者」を選びます。

また、メンバータブにあるアクセスの割り当て先で「ユーザー、グループ、またはサービスプリンシパル」を選んでから「メンバーを選択する」から現在のユーザーを選択し、最後に「レビューと割り当て」をクリックして作成します。

権限を付与できたら、シークレットを作成しましょう。「シークレット」の画面に移り、「生成/インポート」からシークレット作成に進みます。
- 名前:シークレット名
- シークレット値:保存したい文字列
- 有効:はい

「作成」をクリックするとシークレットが作成されます。
Webアプリからのシークレット取得
まずはApp ServiceでWebアプリを作成しましょう。今回は.NETのWebアプリを例として扱います。
- Webアプリ名:Webアプリのホスト名
- 公開:コード
- ランタイムスタック:.NET 8
- 地域:Japan East
- 価格プラン:Free F1
作成後に、App Serviceにキーコンテナ―の読み込み権限を与えるためのマネージドIDを作成します。IDの画面に移り、システム割り当て済みタブで状態をオンにして、「保存」しましょう。
App Serviceのデプロイ方法ではローカルGitを選び、下記のようにローカル環境でWebアプリを作成します。
mkdir kv-app
cd kv-app
dotnet new web
dotnet run
また、ローカルリポジトリとリモートリポジトリの登録を行い、App Serviceにプッシュします。
git init --initial-branch=main
git add .
git commit -m “first commit.”
git remote add azure https://xxxxxx.scm.azurewebsites.net/xxxxxx.git
git push azure main:master
Webアプリが作成できたら、ページが表示できることを確認しましょう。

続いて、Azureポータルでキーコンテナの「アクセス制御(IAM)」の画面に戻り、「ロールの割り当ての追加」を開きます。ロールタブでは「キーコンテナ―シークレットユーザー」を選びましょう。

メンバータブでは「アクセスの割り当て先」のマネージドIDを選び、「メンバーを選択する」から先ほど作成したApp ServiceのマネージドIDを選択して追加し、「レビューと割り当て」をクリックして権限を付与します。

次に、Webアプリからシークレットを読み込むようにコードを変更します。まずは必要なパッケージを下記のコマンドでインストールしましょう。
dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Secrets
続けてWebアプリのProgram.csを下記のように変更します。
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;
SecretClientOptions options = new SecretClientOptions()
{
Retry =
{
Delay= TimeSpan.FromSeconds(2),
MaxDelay = TimeSpan.FromSeconds(16),
MaxRetries = 5,
Mode = RetryMode.Exponential
}
};
// URIにはKey Vaultのドメインを入力します
var client = new SecretClient(new Uri("https://xxxxxx.vault.azure.net/"), new DefaultAzureCredential(), options);
// メソッドの引数にはシークレット名を入力します
KeyVaultSecret secret = client.GetSecret("app-secret");
string secretValue = secret.Value;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => secretValue);
app.Run();
ビルドを行い、App Serverに再度プッシュしてみましょう。
git push azure main:master
下記の画面のように、登録したシークレットが読み込まれていれば成功です。

本来シークレットは内部で処理されるべき情報ですが、今回はわかりやすいように画面に表示しています。
まとめ
Key Vaultは、アプリケーション内部で使われるシークレットを厳重に管理できるセキュリティサービスです。厳重なセキュリティ下に置かれた専用のコンテナで管理することで、Entra IDやRBACによる統括的で細やかなアクセス制御が可能になります。
今後益々システムの構成が複雑化する中で、分散された機密情報に対して一貫した管理体制を採ることの重要性は高まっていくでしょう。Key Vaultを利用すれば導入コストを極力抑えられるため、まずは局所的な利用を検討してみてください。また、他のAzureサービスとの連携が容易なため、既にAzureを使われている方にも適しています。