事例研究3 - シティ・パワー&ライト
背景
City Power & Light社は、家庭や企業向けに電力インフラ監視ソリューションを提供しています。同社は現在、ソリューションをAzureに移行中です。
現在の環境
アーキテクチャの概要
同社はhttp://www.cpandl.com/に公開ウェブサイトを構えています。このサイトは、Linux上のAzure App Serviceで動作するシングルページWebアプリケーションです。静的コンテンツの配信には、Azure Storageに保存され、Azureコンテンツ配信ネットワーク(CDN)にキャッシュされたファイルを使用します。
API ManagementとAzure Function Appの関数は、データを処理してAzure Database for PostgreSQLに保存するために使用されます。API Managementは、Logic Appとの統合のためにAzure Function App関数への通信を仲介するために使用されます。Logic Appはデータ処理のオーケストレーションに使用され、Service BusとEvent Gridはメッセージングとイベントを処理します。
このソリューションは、Application Insights、Azure Monitor、およびAzure Key Vaultを使用します。
アーキテクチャ図
同社は事業を支える複数のアプリケーションとサービスを運用している。同社は可能な限りサーバーレスコンピューティングを導入する予定である。全体のアーキテクチャは以下の図に示す。

ユーザー認証
ユーザー認証プロセスの詳細は以下のとおりです。
13. ユーザーはウェブサイトで「サインイン」を選択します。
14. ブラウザはユーザーを Azure Active Directory (Azure AD) のサインインページにリダイレクトします。
15.ユーザーがサインインします。
16. Azure AD はユーザーのセッションを Web アプリケーションにリダイレクトします。その URL にはアクセス トークンが含まれています。
17.WebアプリケーションはAPIを呼び出し、認証ヘッダーにアクセストークンを含めます。
アプリケーションIDは、アクセストークン内のオーディエンス('aud')クレームとして送信されます。
18.バックエンドAPIはアクセストークンを検証します。
要件
企業ウェブサイト
* 通信およびコンテンツはSSLを使用して保護する必要があります。
* 通信にはHTTPSを使用する必要があります。
データは、セカンダリリージョンと3つの可用性ゾーンに複製する必要があります。
* データ保存コストは最小限に抑えなければならない。
Azure Database for PostgreSQL
データベース接続文字列は、以下の属性とともにAzure Key Vaultに保存されます。
* Azure Key Vault 名: cpandlkeyvault
* シークレット名: PostgreSQLConn
* ID: 80df3e46ffcd4f1cb187f79905e9a1e8
接続情報は頻繁に更新されます。アプリケーションは常に最新の情報を使用してデータベースに接続する必要があります。
Azure Service Bus と Azure Event Grid
* Azure Event Grid は、キューベースの負荷平準化のために Azure Service Bus を使用する必要があります。
* Azure Event Grid のイベントは、バッファリングに使用するために、Service Bus キューに直接ルーティングする必要があります。
* Azure Service Bus およびその他の Azure サービスからのイベントは、引き続き Azure にルーティングされる必要があります。
処理用のイベントグリッド。
安全
* すべての SSL 証明書と認証情報は、Azure Key Vault に保存する必要があります。
* ファイルへのアクセスは、IPアドレス、プロトコル、およびAzure ADの権限によって制限する必要があります。
* すべてのユーザーアカウントとプロセスは、
本来の機能を果たす。
コンプライアンス
一般データ保護規則(GDPR)を遵守するためには、ファイル更新および転送の監査を有効にする必要があります。ファイル更新は読み取り専用とし、発生順に保存し、作成、更新、削除、コピー操作のみを含み、コンプライアンス上の理由から保持する必要があります。
問題
企業ウェブサイト
サイトをテスト中に、以下のエラーメッセージが表示されます。
CryptographicException: 指定されたファイルが見つかりません。
機能アプリ
RequestUserApproval関数のローカルテストを実行すると、次のエラーメッセージが表示されます。
「関数 RequestUserApproval によってタイムアウト値 00:10:00 が超過しました」
Azure開発環境で以下のKustoクエリを実行して関数をテストすると、同じエラーメッセージが表示されます。
FunctionAppLogs
| ただし、FunctionName = = "RequestUserApproval"
ロジックアプリ
開発環境でロジックアプリをテストすると、次のエラーメッセージが表示されます。
「400 Bad Request」
エラーのトラブルシューティングの結果、RequestUserApproval関数を呼び出すHttpTriggerアクションが原因であることが分かりました。
コード
企業ウェブサイト
Security.cs:

機能アプリ
RequestUserApproval.cs:

開発環境におけるAzure Functionsアプリのエラーメッセージを調査する必要があります。
あなたはどうすべきでしょうか?