ヒント
このコンテンツは、Azure 用のクラウド ネイティブ .NET アプリケーションの設計に関する電子ブックからの抜粋であり、.NET Docs またはオフラインで読み取ることができる無料のダウンロード可能な PDF として入手できます。
すべてが 1 つのインスタンス内で実行されるモノリシック アプリとは異なり、クラウドネイティブ アプリケーションは、仮想マシン、コンテナー、地理的リージョンに分散された独立したサービスで構成されます。 相互に依存する多数のサービスの構成設定を管理するのは困難な場合があります。 異なる場所で構成設定のコピーが重複すると、エラーが発生しやすく、管理が困難になります。 一元化された構成は、分散クラウドネイティブ アプリケーションの重要な要件です。
第 1 章で説明したように、Twelve-Factor アプリの推奨事項では、コードと構成を厳密に分離する必要があります。 構成はアプリケーションから外部に格納し、必要に応じて読み取りインする必要があります。 構成値を定数またはリテラル値としてコードに格納することは違反です。 同じ構成値は、多くの場合、同じアプリケーション内の多くのサービスで使用されます。 さらに、開発、テスト、運用など、複数の環境で同じ値をサポートする必要があります。 ベスト プラクティスは、それらを一元化された構成ストアに格納することです。
Azure クラウドには、いくつかの優れたオプションが用意されています。
Azure アプリケーション構成
Azure App Configuration は、セキュリティで保護された一元化された場所にシークレット以外の構成設定を格納するフル マネージドの Azure サービスです。 格納された値は、複数のサービスとアプリケーション間で共有できます。
このサービスは簡単に使用でき、いくつかの利点があります。
- 柔軟なキー/値表現とマッピング
- Azure ラベルを使用したタグ付け
- 管理専用 UI
- 機密情報の暗号化
- クエリとバッチ取得
Azure App Configuration では、キーと値の設定に加えられた変更が 7 日間保持されます。 特定の時点のスナップショット機能を使用すると、設定の履歴を再構築したり、失敗したデプロイのロールバックを行ったりすることもできます。
App Configuration は、構成ストアへの過剰な呼び出しを回避するために、各設定を自動的にキャッシュします。 更新操作は、設定のキャッシュされた値が期限切れになるまで待機し、構成ストアでその値が変更された場合でも、その設定を更新します。 既定のキャッシュ有効期限は 30 秒です。 有効期限はオーバーライドできます。
App Configuration は、転送中および保存中のすべての構成値を暗号化します。 キー名とラベルは、構成データを取得するためのインデックスとして使用され、暗号化されません。
App Configuration ではセキュリティが強化されていますが、アプリケーション シークレットを格納するには Azure Key Vault が最適な場所です。 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