事例研究1 - Litware Inc.
背景
あなたは、従業員の経費管理ソリューションを提供するSaaS企業であるLitware Inc.の開発者です。このソリューションは、Azure WebアプリとしてデプロイされるASP.NET Core Web APIプロジェクトで構成されています。
全体的なアーキテクチャ
従業員は領収書をシステムにアップロードして処理を依頼します。処理が完了すると、従業員は処理結果を詳細に記載した概要レポートメールを受け取ります。その後、従業員はウェブアプリケーションを使用して領収書を管理し、払い戻しに必要なその他の作業を行います。
領収書処理
従業員は領収書を以下の2つの方法でアップロードできます。
* Azure Files マウント済みフォルダーを使用したアップロード
* Webアプリケーションを使用したアップロード
データストレージ
領収書と従業員情報はAzure SQLデータベースに保存されます。
文書
従業員は、ソリューションを初めて使用する際に、入門ドキュメントを受け取ります。このドキュメントには、Azure ファイルアップロードでサポートされているオペレーティングシステムの詳細と、マウントされたフォルダーの設定方法に関する手順が記載されています。
解決策の詳細
ユーザーテーブル

ウェブアプリケーション
Webアプリに対してMSIを有効にし、Webアプリがセキュリティプリンシパル名「WebAppIdentity」を使用するように構成します。
処理
処理は、Azure Functionsランタイムのバージョン2を使用するAzure Functionによって実行されます。
処理が完了すると、結果はAzure Blobに保存されます。
ストレージとAzure SQLデータベースを使用します。その後、処理レポートへのリンクを含む概要メールがユーザーに送信されます。メールが別のユーザーに転送された場合でも、レポートへのリンクは有効なままでなければなりません。
ログ記録
Azure Application Insightsは、プロセッサとWebアプリケーションの両方でテレメトリとログ記録に使用されます。プロセッサでは、TraceWriterによるログ記録も有効になっています。
Application Insightsには、常にすべてのログメッセージが含まれている必要があります。
要件
領収書処理
領収書の同時処理は防止されなければならない。
災害復旧
地域的な障害が発生しても、アプリケーションの可用性に影響があってはなりません。すべての災害復旧(DR)運用は、アプリケーションの稼働状況に依存してはならず、DR地域のデータが常に最新の状態であることを保証する必要があります。
安全
* ユーザーのセキュリティピンは、データベースへのアクセスによって
セキュリティピンの表示。セキュリティピンにアクセスできるのは、Webアプリケーションのみです。
* データ保護に使用されるすべての証明書とシークレットは、Azure Key Vaultに保存する必要があります。
* 最小限の特権の原則に従い、必要不可欠な特権を提供する必要があります。
意図された機能を実行する。
* Azure Storage および Azure SQL データベースへのすべてのアクセスは、アプリケーションのマネージド ストレージを使用する必要があります。
サービスID(MSI)
* レシートデータは保存時に必ず暗号化する必要があります。
* すべてのデータは転送中に保護されなければならない
* ユーザーの経費口座番号は、ログインしているユーザーのみに表示される必要があります。
経費勘定番号には最後の部分のみを含め、残りの部分は伏せ字にする必要があります。
* セキュリティ侵害が発生した場合、すべての要約レポートへのアクセスは取り消されなければならない。
システムの他の部分に影響を与える。
問題
アップロード形式の問題
従業員から、Webアプリケーションを使用して領収書をアップロードする際に問題が発生するという報告が時折寄せられています。Azureファイル共有を使用して領収書をアップロードしても、プロファイルに表示されないとのことです。この問題が発生した場合、従業員はファイル共有内のファイルを削除し、Webアプリケーションを使用しますが、500 Internal Server Errorページが表示されます。
容量の問題
繁忙期には、従業員が領収書をアップロードしてからウェブアプリケーションに表示されるまでに長い遅延が発生すると報告している。
ログ容量の問題
開発者によると、プロセッサのトレース出力におけるログメッセージの数が多すぎるため、ログメッセージが失われるという問題が発生しているとのことです。
アプリケーションコード
Processing.cs

データベース.cs

レシートアップローダー.cs

ConfigureSSE.ps1

ドラッグアンドドロップ問題
アップロード形式の問題が解決されていることを確認する必要があります。
RU14行目にはどのようなコードを追加すればよいですか?
解答するには、適切なコード断片を正しい場所にドラッグしてください。各コード断片は、1回、複数回、または全く使用しない場合があります。コンテンツを表示するには、ペイン間の分割バーをドラッグするか、スクロールする必要がある場合があります。
注:正解ごとに1ポイントが加算されます。

正解:

Explanation:
Box 1: HttpStatusCode.InternalServerError
HttpStatusCode.InternalServerError is equivalent to HTTP status 500. InternalServerError indicates that a generic error has occurred on the server.
Box 2: CannotDeleteFileOrDirectory
HttpResponseMessage.ReasonPhrase Property gets or sets the reason phrase which typically is sent by servers together with the status code.
Scenario: Upload format issue
Employees occasionally report an issue with uploading a receipt using the web application. They report that when they upload a receipt using the Azure File Share, the receipt does not appear in their profile. When this occurs, they delete the file in the file share and use the web application, which returns a 500 Internal Server error page.
References:
https://docs.microsoft.com/en-us/dotnet/api/system.net.httpstatuscode?redirectedfrom=MSDN&view=netframework-4.7.2