チュートリアル: Azure Key Vault を使用して Azure Cosmos DB 資格情報を格納して使用する
適用対象: NoSQL MongoDB Cassandra Gremlin Table
重要
Azure Cosmos DB にアクセスする場合、システム割り当てマネージド ID を使用することをお勧めします。 マネージド ID ソリューションと証明書ベースのソリューションのどちらもニーズを満たしていない場合は、この記事の Azure Key Vault ソリューションを使用してください。
Azure Cosmos DB をデータベースとして使用している場合は、SDK、API エンドポイント、主キーまたは 2 次キーを使用して、データベース、コンテナー、項目に接続します。
エンドポイント URI と機密性の高い読み取り/書き込みキーを直接アプリケーション コードまたは構成ファイル内に保存することはお勧めしません。 このデータはホスト内の環境変数から読み取ることが理想的です。 Azure App Service では、Azure Cosmos DB アカウントのランタイム資格情報を開発者が安全でないクリア テキスト形式で保存しなくても、アプリ設定を使用することで、それらの資格情報を挿入できます。
Azure Key Vault では、資格情報への Azure App Service マネージド アクセスなどのサービスを提供しながらこれらの資格情報を安全に保存できるようにして、このベスト プラクティスへの取り組みをさらに進めます。 Azure App Service では、Azure Key Vault から資格情報を安全に読み取り、それらの資格情報を実行中のアプリケーションに挿入します。
開発者は、このベスト プラクティスを利用して、開発中に Azure Cosmos DB エミュレーターや Azure Cosmos DB を無料で試すといったツールの資格情報を保存できます。 それにより、運用チームが、実行時に正しい運用設定が挿入されるようにすることができます。
このチュートリアルでは、次の作業を行う方法について説明します。
- Azure Key Vault インスタンスを作成する
- Azure Cosmos DB 資格情報をシークレットとしてキー コンテナーに追加する
- Azure App Service リソースを作成して登録し、"読み取りキー" アクセス許可を付与する
- キー コンテナーのシークレットを App Service リソースに挿入する
注意
このチュートリアルとサンプル アプリケーションでは、Azure Cosmos DB for NoSQL アカウントを使用します。 同じ手順のうち、多くは他の API を使用して実行できます。
前提条件
- 既存の Azure Cosmos DB for NoSQL アカウント。
- Azure サブスクリプションをお持ちの場合は、新しいアカウントを作成します。
- Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
- または、コミットする前に Azure Cosmos DB を無料で試すこともできます。
- GitHub アカウント。
開始する前に: Azure Cosmos DB の資格情報を取得する
開始する前に、既存のアカウントの資格情報を取得します。
既存の Azure Cosmos DB for NoSQL アカウントの Azure portal ページに移動します。
Azure Cosmos DB for NoSQL アカウント ページで、[キー] ナビゲーション メニュー オプションを選択します。
URI フィールドと PRIMARY KEY フィールドの値を記録します。 これらの値は、このチュートリアルで後ほど使用します。
Azure Key Vault リソースを作成する
まず、NoSQL 用 API の資格情報を保存する新しいキー コンテナーを作成します。
Azure portal にサインインします。
[リソースの作成] > [セキュリティ] > [Key Vault] の順に選択します。
[キー コンテナーの作成] ページで、次の情報を入力します。
設定 説明 サブスクリプション この Azure Cosmos アカウントに使用する Azure サブスクリプションを選択します。 リソース グループ リソース グループを選択するか、 [新規作成] を選択し、新しいリソース グループの一意の名前を入力します。 キー コンテナー名 グローバルに一意のキー コンテナー名を入力します。 リージョン Azure Cosmos DB アカウントをホストする地理的な場所を選択します。 データに最も高速にアクセスできるよう、お客様のユーザーに最も近い場所を使用します。 [価格レベル] [Standard] を選択します。 残りの設定は既定値のままにします。
[確認と作成] を選択します。
指定した設定を確認し、[作成] を選択します。 アカウントの作成には数分かかります。 ポータル ページに "デプロイが完了しました" と表示されるまで待ってから移動します。
Azure Cosmos DB アクセス キーの Key Vault への追加
ここで、Azure Cosmos DB の資格情報をシークレットとしてキー コンテナーに格納します。
[Go to resource] (リソースに移動) を選択して、Azure Key Vault リソース ページに移動します。
Azure Key Vault リソース ページで、[シークレット] ナビゲーション メニュー オプションを選択します。
メニューから [生成/インポート] を選択します。
[Create a secret] (シークレットの作成) ページで、次の情報を入力します。
設定 説明 Upload options 手動 名前 cosmos-endpoint シークレット値 このチュートリアルで先ほどコピーした URI を入力します。 [作成] を選択して、新しい cosmos-endpoint シークレットを作成します。
もう一度メニューから [生成/インポート] を選択します。 [Create a secret] (シークレットの作成) ページで、次の情報を入力します。
設定 説明 Upload options 手動 名前 cosmos-readwrite-key シークレット値 このチュートリアルで先ほどコピーした主キーを入力します。 [作成] を選択して、新しい cosmos-readwrite-key シークレットを作成します。
シークレットを作成すると、それらが [シークレット] ページ内のシークレットの一覧に表示されます。
各キーを選択し、最新バージョンを選択して、シークレット識別子をコピーします。 cosmos-endpoint と cosmos-readwrite-key シークレットの識別子は、このチュートリアルで後ほど使用します。
ヒント
シークレット識別子は、
https://<key-vault-name>.vault.azure.net/secrets/<secret-name>/<version-id>
の形式になります。 たとえば、キー コンテナーの名前が msdocs-key-vault、キーの名前が cosmos-readwrite-key、バージョンが 83b995e363d947999ac6cf487ae0e12e の場合、シークレット識別子はhttps://msdocs-key-vault.vault.azure.net/secrets/cosmos-readwrite-key/83b995e363d947999ac6cf487ae0e12e
になります。
Azure Web アプリを作成して Azure Key Vault に登録する
このセクションでは、新しい Azure Web アプリを作成し、サンプル アプリケーションをデプロイし、その後に Web アプリのマネージド ID を Azure Key Vault に登録します。
cosmos-db-nosql-dotnet-sample-web-environment-variables テンプレートを使用して、新しい GitHub リポジトリを作成します。
Azure portal で [リソースの作成] > [Web] > [Web アプリ] を選択します。
[Web アプリの作成] ページで、[基本情報] タブに次の情報を入力します。
設定 説明 サブスクリプション この Azure Cosmos アカウントに使用する Azure サブスクリプションを選択します。 リソース グループ リソース グループを選択するか、 [新規作成] を選択し、新しいリソース グループの一意の名前を入力します。 名前 グローバルに一意の Web アプリ名を入力します。 発行 [コード] を選択します。 ランタイム スタック [.NET 6 (LTS)] を選択します。 オペレーティング システム [Windows] を選択します。 [リージョン] Azure Cosmos DB アカウントをホストする地理的な場所を選択します。 データに最も高速にアクセスできるよう、お客様のユーザーに最も近い場所を使用します。 残りの設定は既定値のままにします。
[次へ: デプロイメント] を選択します。
[デプロイメント] タブで、次の情報を入力します。
設定 説明 継続的なデプロイ [有効化] を選択します。 GitHub アカウント [承認] を選択します。 GitHub アカウント承認プロンプトに従って、新しく作成した GitHub リポジトリを読み取る Azure アクセス許可を付与します。 組織 新しい GitHub リポジトリの組織を選択します。 リポジトリ 新しい GitHub リポジトリの名前を選択します。 ブランチ [main](メイン) を選択します。 [確認と作成] を選択します。
指定した設定を確認し、[作成] を選択します。 アカウントの作成には数分かかります。 ポータル ページに "デプロイが完了しました" と表示されるまで待ってから移動します。
Web アプリケーションが最初に Web アプリにデプロイされるまで、場合によってはさらに数分待つ必要があります。 Azure Web アプリ リソース ページで、[参照] を選択して、アプリの既定の状態を確認します。
[ID] ナビゲーション メニュー オプションを選択します。
[ID] ページで、[システムが割り当て済み] のマネージド ID で [オン] を選択し、[保存] を選択します。
Azure Key Vault シークレットを Azure Web App アプリ設定として挿入する
最後に、キー コンテナーに保存されているシークレットを Web アプリ内のアプリ設定として挿入します。 これにより、このアプリ設定で、資格情報をクリア テキストで保存することなく、実行時に資格情報がアプリケーションに挿入されます。
Azure portal でキー コンテナー ページに戻ります。 ナビゲーション メニューで [アクセス ポリシー] を選択します。
[アクセス ポリシー] ページで、メニューから [作成] を選択します。
[アクセス ポリシーを作成する] ページの [アクセス許可] タブで、[シークレットのアクセス許可] の [取得] オプションを選択します。 [次へ] を選択します。
[プリンシパル] タブで、このチュートリアルで先ほど作成した Web アプリの名前を選択します。 [次へ] を選択します。
注意
この例のスクリーンショットでは、Web アプリの名前は msdocs-dotnet-web です。
[次へ] をもう一度選択して [アプリケーション] タブをスキップします。[確認 + 作成] タブで、指定した設定を確認し、[作成] を選択します。
Azure portal で Web アプリ ページに戻ります。 ナビゲーション メニューから [構成] を選択します。
[構成] ページで、[新しいアプリケーション設定] を選択します。 [アプリケーション設定の追加/編集] ダイアログで、次の情報を入力します。
設定 内容 名前 CREDENTIALS__ENDPOINT
キー このチュートリアルで先ほど作成した、キー コンテナー内の cosmos-endpoint シークレットのシークレット識別子を取得します。 識別子は、 @Microsoft.KeyVault(SecretUri=<secret-identifier>)
の形式で入力します。ヒント
環境変数の値に、1 つのアンダースコアではなく 2 つのアンダースコア (
__
) があることを確認します。 二重アンダースコアは、すべてのプラットフォームで .NET によってサポートされるキー区切り記号です。 詳細については、環境変数の構成に関するページを参照してください。注意
たとえば、シークレット識別子が
https://msdocs-key-vault.vault.azure.net/secrets/cosmos-endpoint/69621c59ef5b4b7294b5def118921b07
の場合、参照は@Microsoft.KeyVault(SecretUri=https://msdocs-key-vault.vault.azure.net/secrets/cosmos-endpoint/69621c59ef5b4b7294b5def118921b07)
になります。[OK] を選択して新しいアプリ設定を保持します
[新しいアプリケーション設定] をもう一度選択します。 [アプリケーション設定の追加/編集] ダイアログで、次の情報を入力し、[OK] を選択します。
設定 内容 名前 CREDENTIALS__KEY
キー このチュートリアルで先ほど作成した、キー コンテナー内の cosmos-readwrite-key シークレットのシークレット識別子を取得します。 識別子は、 @Microsoft.KeyVault(SecretUri=<secret-identifier>)
の形式で入力します。[構成] ページに戻り、[保存] を選択して Web アプリのアプリ設定を更新します。
Web アプリが新しいアプリ設定で再起動するまで数分待ちます。 この時点で、新しいアプリ設定には、それらがキー コンテナーの参照であることが示されています。
ナビゲーション メニューで [概要] を選択します。 [参照] を選択して、アプリに資格情報が設定されていることを確認します。
次のステップ
- Azure Cosmos DB 用のファイアウォールを構成するには、ファイアウォールのサポートに関する記事を参照してください。
- 仮想ネットワーク サービス エンドポイントを構成するには、VNet サービス エンドポイントを使用してアクセスをセキュリティで保護する方法に関する記事をご覧ください。