Azure Key Vault とは
Azure Key Vault は "シークレット ストア" です。つまり、パスワードや接続文字列のような常時保護する必要のある構成値などのアプリ シークレットを格納するための一元的なクラウド サービスです。 Key Vault は、アプリのシークレットを中央の 1 か所に保持することによって制御するのに役立ちます。 それにより、セキュリティ保護されたアクセス、アクセス許可の制御、アクセス ログが提供されます。
Key Vault を使用する主な利点は次のとおりです。
- 機密性の高いアプリの情報を他の構成やコードから分離し、偶発的なリークのリスクを減らす
- アプリとそれを必要とする個人に合わせて作成されたアクセス ポリシーを使用して、シークレットのアクセスを制限する
- 一元化されたシークレット ストレージにより、必要な変更を 1 か所で行う必要があることを意味します
- アクセスをログに記録して監視することで、シークレットにいつどのようにアクセスされたかを把握するのに役立つ
シークレットは個々のコンテナーに格納されています。これは、シークレットをグループ化するために使用される Azure リソースです。 シークレットへのアクセスとコンテナーの管理は、REST API を使って行います。 多くの一般的な言語で使用できるすべての Azure 管理ツールとクライアント ライブラリでも、この API がサポートされています。 すべてのコンテナーには、その API がホストされている一意の URL があります。
重要
Key Vault は、サーバー アプリの構成のシークレットを格納するよう設計されています。 これは、お客様のアプリのユーザーに属するデータを格納するためのものではありません。 アプリのクライアント側の部分では使わないでください。 この動作は、そのパフォーマンス特性、API、コスト モデルに反映されています。
ユーザー データは、Transparent Data Encryption を使用する Azure SQL データベース、Storage Service Encryption を使用するストレージ アカウントなど、別の場所に保存する必要があります。 そうしたデータ ストアにアクセスするためにアプリで使用されるシークレットは、Key Vault に保持できます。
Key Vault のシークレットとは
Key Vault のシークレットは、文字列の名前と値のペアです。 シークレット名は 1 - 127 文字の長さで、英数字とダッシュのみを使用し、コンテナー内で一意である必要があります。 シークレット値には、最大 25 KB のサイズの任意の UTF-8 文字列を指定できます。
ヒント
シークレット名は、それ自体を特にシークレットと見なす必要はありません。 実装にとって必要な場合は、アプリの構成内にこれらを格納できます。 コンテナー名および URL についても同様です。
Note
Key Vault では、文字列の他に、"キー" と "証明書" という 2 種類のシークレットもサポートされています。 Key Vault には、それらのユース ケースに固有の便利な機能が用意されています。 このモジュールでは、これらの機能については説明せず、パスワードや接続文字列などのシークレット文字列に的を絞って説明します。
コンテナーの認証とアクセス許可
Key Vault の API では、ユーザーとアプリの認証に Microsoft Entra ID が使われます。 コンテナー アクセス ポリシーは "アクション" に基づいており、コンテナー全体に適用されます。 たとえば、コンテナーへの Get
(シークレット値の読み取り)、List
(すべてのシークレットの名前を一覧表示)、Set
(シークレット値の作成または更新) アクセス許可を持つアプリでは、シークレットの作成、すべてのシークレット名の一覧表示、そのコンテナー内のすべてのシークレット値の取得と設定を行うことができます。
コンテナーに対して実行される "すべての" アクションには、認証と認可が必要です。 どのような種類であっても匿名アクセスを許可する方法はありません。
ヒント
開発者とアプリにコンテナーへのアクセスを許可するときは、必要最小限のアクセス許可のセットのみを付与します。 アクセス許可の制限は、コードのバグに起因する事故を回避し、資格証明の盗難やアプリに挿入された悪意のあるコードによる影響を軽減することに役立ちます。
通常、開発者に必要なのは、開発環境のコンテナーに対する Get
と List
のアクセス許可のみです。 一部のエンジニアには、必要に応じて、シークレットを変更および追加するための完全なアクセス許可が必要です。
アプリでは、Get
アクセス許可のみが必要な場合がよくあります。 アプリの実装方法によっては、一部のアプリで List
アクセス許可が必要になる場合があります。 このモジュールの演習のアプリでは、コンテナーからシークレットを読み取るために使用する手法のため、List
アクセス許可が必要になります。