集中管理構成
ヒント
このコンテンツは eBook の「Azure 向けクラウド ネイティブ .NET アプリケーションの設計」からの抜粋です。.NET Docs で閲覧できるほか、PDF として無料ダウンロードすると、オンラインで閲覧できます。
すべてが 1 つのインスタンス内で動作するモノリシック アプリとは異なり、クラウドネイティブ アプリは、仮想マシン、コンテナー、地域に分散された、独立したサービスで構成されています。 相互に依存する何十個ものサービスの構成設定を管理することは困難です。 さまざまな場所に構成設定の重複するコピーがあると、エラーが発生しやすく、管理も困難になります。 一元化された構成は、分散型クラウドネイティブ アプリケーションにとって重要な要件です。
第 1 章で説明したように、Twelve-Factor App (12 要素アプリ) の推奨事項では、コードと構成を厳密に分離する必要があります。 構成はアプリケーションの外部に格納し、必要に応じて読み込む必要があります。 構成値を定数やリテラル値としてコードに格納することは違反になります。 同じアプリケーション内の多くのサービスで、同じ構成値が使用されることはよくあります。 さらに、開発、テスト、運用など、複数の環境で同じ値をサポートする必要があります。 ベスト プラクティスは、それらを一元化された構成ストアに格納することです。
Azure クラウドにはいくつかの素晴らしい選択肢があります。
Azure App Configuration
Azure App Configuration は、フル マネージド Azure サービスであり、シークレットではない構成設定が安全な一元化された場所に格納されます。 格納された値は、複数のサービスやアプリケーション間で共有できます。
このサービスは使いやすく、いくつかの利点があります。
- 柔軟性に優れたキーと値による表現とマッピング
- Azure ラベルによるタグ付け
- 管理専用の UI
- 機密情報の暗号化
- クエリとバッチ取得
Azure App Configuration により、キー値設定に加えられた変更が 7 日間維持されます。 ポイントインタイム スナップショット機能を使用すると、設定の履歴を再構築し、失敗したデプロイをロールバックすることもできます。
App Configuration では、構成ストアへの呼び出しが多くなりすぎないようにするため、個々の設定が自動的にキャッシュされます。 キャッシュされた設定の値は、構成ストアで変更されたとしても、その有効期限が切れるまで、設定の更新操作は先延ばしされます。 キャッシュの既定の有効期間は 30 秒です。 有効期間はオーバーライドすることができます。
App Configuration により、転送中と保存中のすべての構成値が暗号化されます。 キー名とラベルは、構成データを取得するためのインデックスとして使用され、暗号化されません。
App Configuration は強固なセキュリティを備えていますが、それでもアプリケーション シークレットの保管場所としては Azure Key Vault が最も優れています。 Key Vault では、ハードウェアレベルの暗号化、粒度の細かいアクセス ポリシー、管理操作 (証明書のローテーションなど) が利用できます。 キー コンテナーに格納されているシークレットを参照する App Configuration 値を作成できます。
Azure Key Vault
Key Vault は、シークレットを安全に保管し、それにアクセスするためのマネージド サービスです。 シークレットは、API キー、パスワード、証明書など、アクセスを厳密に制御する必要がある任意のものです。 コンテナーはシークレットの論理グループです。
Key Vault によって、シークレットが誤って漏洩する可能性が大幅に小さくなります。 Key Vault を使用すると、アプリケーション開発者は、アプリケーションにセキュリティ情報を格納する必要がなくなります。 この手法を使用すると、コード内にこの情報を格納する必要がなくなります。 たとえば、必要に応じてデータベースに接続するアプリケーションがあるとします。 この場合、接続文字列をアプリのコードに格納する代わりに、Key Vault に安全に格納できます。
アプリケーションでは、URI を使用して、必要な情報に安全にアクセスできます。 アプリケーションでは、これらの URI を使用して特定のバージョンのシークレットを取得できます。 Key Vault に格納されているシークレット情報のいずれかを保護するためにカスタム コードを記述する必要はありません。
Key Vault にアクセスするには、適切な呼び出し元の認証と承認が必要です。 通常、クラウドネイティブ マイクロサービスには、ClientId と ClientSecret の組み合わせが使用されます。 このような資格情報は、ソース管理の外部に保持することが重要です。 ベスト プラクティスは、アプリケーションの環境でそれらを設定することです。 AKS から Key Vault に直接アクセスするには、Key Vault FlexVolume を使用します。
eShop での構成
eShopOnContainers アプリケーションには、各マイクロサービスにローカル アプリケーション設定ファイルが含まれています。 これらのファイルはソース管理にチェックインされていますが、接続文字列や API キーなどの運用シークレットは含まれていません。 運用環境では、個々の設定が、サービスごとの環境変数で上書きされる可能性があります。 環境変数にシークレットを挿入することは、ホステッド アプリケーションに一般的な手法ですが、中央の構成ストアは提供されません。 構成設定の一元管理をサポートするために、各マイクロサービスには、ローカル設定と Azure Key Vault 設定の使用を切り替える設定が含まれています。
リファレンス
- eShopOnContainers アーキテクチャ
- 高いスケーラビリティと可用性のためにマイクロサービスと複数のコンテナー アプリケーションを調整する
- Azure API Management
- Azure SQL Database の概要
- Azure Cache for Redis
- Azure Cosmos DB の MongoDB 用 API
- Azure Service Bus
- Azure Monitor の概要
- eShopOnContainers: AKS での Kubernetes クラスターの作成
- eShopOnContainers: Azure Dev Spaces
- Azure Dev Spaces
.NET