
参照:
https://blog.hompus.nl/2017/05/29/adding-application-logging-blob-to-a-azure-web-app-service-using-powershell/
トピック5、Litware Inc
全体的なアーキテクチャ
従業員は、システムが処理するための領収書をアップロードします。処理が完了すると、従業員は処理結果の詳細を記載した要約レポートの電子メールを受け取ります。次に、従業員はWebアプリケーションを使用して領収書を管理し、払い戻しに必要な追加のタスクを実行します。
領収書の処理
従業員は次の2つの方法で領収書をアップロードできます。
AzureFilesマウントフォルダーを使用したアップロード
Webアプリケーションを使用したアップロード
データストレージ
領収書と従業員の情報は、AzureSQLデータベースに保存されます。
ドキュメンテーション
従業員には、ソリューションを最初に使用するときに開始ドキュメントが提供されます。ドキュメントには、Azureファイルのアップロードでサポートされているオペレーティングシステムの詳細と、マウントされたフォルダーを構成する方法の説明が含まれています。
ソリューションの詳細
ユーザーテーブル

ウェブアプリケーション
WebアプリのMSIを有効にし、セキュリティプリンシパル名WebAppIdentityを使用するようにWebアプリを構成します。
処理
処理は、バージョン2のAzureFunctionランタイムを使用するAzureFunctionによって実行されます。処理が完了すると、結果はAzureBlobStorageとAzureSQLデータベースに保存されます。次に、処理レポートへのリンクが記載された電子メールの要約がユーザーに送信されます。電子メールが別のユーザーに転送される場合、レポートへのリンクは有効なままである必要があります。
ロギング
Azure Application Insightsは、プロセッサとWebアプリケーションの両方でのテレメトリとログインに使用されます。プロセッサでは、TraceWriterログも有効になっています。Application Insightsには、常にすべてのログメッセージが含まれている必要があります。
要件
領収書の処理
領収書の同時処理は防止する必要があります。
災害からの回復
地域の停止は、アプリケーションの可用性に影響を与えてはなりません。すべてのDR操作は、実行中のアプリケーションに依存してはならず、DR領域のデータが最新であることを確認する必要があります。
安全
ユーザーのSecurityPinは、データベースへのアクセスでSecurityPinを表示できないように保存する必要があります。Webアプリケーションは、SecurityPinsにアクセスできる唯一のシステムです。
データを保護するために使用されるすべての証明書とシークレットは、AzureKeyVaultに保存する必要があります。
最小特権の原則を順守し、目的の機能を実行するために不可欠な特権を提供する必要があります。
AzureStorageおよびAzureSQLデータベースへのすべてのアクセスでは、アプリケーションのマネージドサービスID(MSI)を使用する必要があります。
受信データは、保存時に常に暗号化する必要があります。
すべてのデータは転送中に保護する必要があります。
ユーザーの経費勘定番号は、ログインしているユーザーにのみ表示される必要があります。経費勘定番号の他のすべてのビューには、最後のセグメントのみが含まれ、残りの部分は隠されている必要があります。
セキュリティ違反が発生した場合は、システムの他の部分に影響を与えることなく、すべての要約レポートへのアクセスを取り消す必要があります。
問題
アップロード形式の問題
従業員は、Webアプリケーションを使用した領収書のアップロードに関する問題を報告することがあります。Azure File Shareを使用してレシートをアップロードすると、レシートがプロファイルに表示されないことが報告されています。これが発生すると、ファイル共有内のファイルが削除され、Webアプリケーションが使用されます。Webアプリケーションは500InternalServerエラーページを返します。
容量の問題
忙しい時期には、従業員は領収書をアップロードしてからWebアプリケーションに表示されるまでに長い遅延があると報告します。
ログ容量の問題
開発者は、プロセッサのトレース出力のログメッセージの数が多すぎて、ログメッセージが失われると報告しています。
アプリケーションコード
Processing.cs

Database.cs

ReceiptUploader.cs

ConfigureSSE.ps1
