Azure App Service のセキュリティ

この記事では、Azure App Service で Web アプリ、モバイル アプリ バック エンド、API アプリ、および関数アプリをセキュリティで保護する方法について説明します。 また、組み込みの App Service 機能を使用してアプリをさらに保護する方法についても説明します。

Azure VM、ストレージ、ネットワーク接続、Web フレームワーク、管理、統合機能を含む App Service のプラットフォーム コンポーネントは、積極的に保護され、強化されています。 App Service は、徹底したコンプライアンス チェックを継続的に行い、以下の点を確認しています。

  • お客様のアプリのリソースが、他のお客様の Azure リソースからセキュリティで保護されていること。
  • 新たに発見された脆弱性に対応できるように、VM インスタンスとランタイム ソフトウェアが定期的に更新されていること。
  • アプリと他の Azure リソース (SQL Database など) 間のシークレット (接続文字列など) の通信が Azure 内にとどまり、ネットワーク境界を越えないこと。 保存時にシークレットが常に暗号化されていること。
  • ハイブリッド接続などの App Service 接続機能を介したすべての通信が暗号化されていること。
  • Azure PowerShell、Azure CLI、Azure SDK、REST API などのリモート管理ツールとの接続がすべて暗号化されていること。
  • 24 時間体制の脅威管理によって、マルウェア、分散型サービス拒否 (DDoS)、man-in-the-middle (MITM) などの脅威からインフラストラクチャとプラットフォームが保護されていること。

Azure のインフラストラクチャとプラットフォームのセキュリティの詳細については、 Azure セキュリティ センターを参照してください。

以下のセクションでは、App Service アプリを脅威からさらに保護する方法について説明します。

HTTPS と証明書

App Service を使用すると、HTTPS でアプリをセキュリティで保護できます。 アプリを作成すると、HTTPS を使用して既定のドメイン名 (<app_name>.azurewebsites.net) にアクセスできます。 アプリのカスタム ドメインを構成する場合は、クライアント ブラウザーがカスタム ドメインに対して安全な HTTPS 接続を実行できるように、TLS/SSL 証明書を使用してセキュリティで保護する必要があります。 App Service では、いくつかの種類の証明書がサポートされています。

  • Free App Service マネージド証明書
  • App Service 証明書
  • サードパーティの証明書
  • Azure Key Vault からインポートされた証明書

詳細については、Azure App Service への TLS/SSL 証明書の追加に関する記事をご覧ください。

セキュリティで保護されていないプロトコル (HTTP、TLS 1.0、FTP)

すべての暗号化されていない (HTTP) 接続からアプリをセキュリティで保護するために、App Service には 1 クリックで HTTPS を適用できる構成が用意されています。 セキュリティで保護されていない要求は、アプリケーション コードに到達する前に拒否されます。 詳細については、「HTTPS の適用」を参照してください。

TLS 1.0 は、PCI DSS などの業界標準によって安全であると見なされなくなっています。 App Service で TLS 1.1/1.2 を適用することで、古いプロトコルを無効にすることができます。

App Service は、ファイルの展開に FTP と FTPS の両方をサポートしています。 ただし、可能な限り FTP ではなく FTPS を使用することをお勧めします。 これらのプロトコルの 1 つまたは両方が使用されていない場合は、無効にすることをお勧めします。

静的 IP の制限事項

既定で、App Service アプリはインターネットを介したすべての IP アドレスの要求を受け入れますが、そのアクセスをごく一部の IP アドレスに制限することができます。 Windows 上の App Service では、アプリへのアクセスを許可されている IP アドレスの一覧を定義できます。 許可一覧には、個々 の IP アドレスまたはサブネット マスクによって定義された IP アドレスの範囲を含めることができます。 詳細については、「Azure App Service 静的 IP 制限」を参照してください。

Windows 上の App Service の場合、web.config を構成して IP アドレスを動的に制限することもできます。詳細については、動的 IP セキュリティ <dynamicIpSecurity> に関するページを参照してください。

クライアントの認証と承認

Azure App Service には、ユーザーまたはクライアント アプリのターンキーの認証および承認機能があります。 有効にすると、アプリ コードをほとんど、またはまったく作成せずに、ユーザーとクライアント アプリにサインインすることができます。 独自の認証および承認ソリューションを実装するか、App Service でその処理を自動的に実行することができます。 認証および承認モジュールは、Web 要求をアプリケーション コードに渡す前に Web 要求を処理し、未承認の要求をコードに到達する前に拒否します。

App Service の認証および認可は、Microsoft Entra ID、Microsoft アカウント、Facebook、Google、Twitter を含む複数の認証プロバイダーをサポートしています。 詳細については、「 Azure App Service での認証および承認」を参照してください。

サービス間認証

バックエンド サービスに対して認証する場合、App Service には必要に応じて 2 つの異なるメカニズムが用意されています。

リモート リソースへの接続性

アプリからアクセスする必要があるリモート リソースには、次の 3 種類があります。

それぞれの場合について、App Service にはセキュリティで保護された接続を確立する方法が用意されていますが、セキュリティのベスト プラクティスを守ることをお勧めします。 たとえば、バックエンド リソースで暗号化されていない接続が許可されている場合でも、常に暗号化された接続を使用します。 さらに、バックエンドの Azure サービスで最小限の IP アドレスを許可するようにします。 アプリの送信 IP アドレスについては、「Azure App Service における受信 IP アドレスと送信 IP アドレス」を参照してください。

Azure リソース

アプリが SQL DatabaseAzure Storage などの Azure リソースに接続しても、接続は Azure 内にとどまり、ネットワーク境界を越えません。 ただし、接続は Azure の共有ネットワークを経由するので、接続は常に暗号化してください。

アプリが App Service 環境でホストされている場合、仮想ネットワーク サービス エンドポイントを使用して、サポートされている Azure サービスに接続する必要があります。

Azure Virtual Network 内のリソース

アプリは、Azure Virtual Network 内のリソースに Virtual Network 統合を介してアクセスできます。 Virtual Network との統合は、ポイント対サイトの VPN を使用して確立されます。 アプリは、プライベート IP アドレスを使用して Virtual Network 内のリソースにアクセスできるようになります。 ただし、ポイント対サイト接続は Azure の共有ネットワークを経由します。

リソース接続を Azure の共有ネットワークから完全に分離するには、App Service 環境でアプリを作成します。 App Service 環境は常に専用の Virtual Network に展開されるので、アプリと Virtual Network 内のリソースとの接続は完全に分離されます。 App Service 環境におけるネットワーク セキュリティのその他の側面については、「ネットワークの分離」を参照してください。

オンプレミスのリソース

データベースなどのオンプレミス リソースには、次の 3 つの方法で安全にアクセスできます。

アプリケーション シークレット

データベースの資格情報、API トークン、秘密キーなどのアプリケーション シークレット情報をコードや構成ファイルに保存しないでください。 一般に受け入れられているのは、選択した言語の標準パターンを使用して環境変数としてアクセスする方法です。 App Service では、アプリ設定 (と .NET アプリケーションの場合は特別に接続文字列) を使用して環境変数を定義します。 アプリ設定と接続文字列は、Azure で暗号化されて保存され、アプリの起動時にアプリのプロセス メモリに挿入される前に暗号化が解除されます。 暗号化キーは定期的に回転されます。

また、高度なシークレット管理のために、App Service アプリを Azure Key Vault と統合することもできます。 マネージド ID を使用してキー コンテナーにアクセスすることで、App Service アプリは必要なシークレットに安全にアクセスできます。

ネットワークの分離

Isolated 価格レベルを除くすべての価格レベルでは、App Service の共有ネットワーク インフラストラクチャ上でアプリが実行されます。 たとえば、パブリック IP アドレスとフロントエンド ロード バランサーは他のテナントと共有されます。 Isolated 価格レベルでは、専用の App Service 環境内でアプリを実行することで完全なネットワークの分離を実現しています。 App Service 環境は、Azure Virtual Network の独自のインスタンスで実行されます。 以下を実行できます。

  • 専用のフロント エンドを使用し、専用のパブリック エンドポイントを介してアプリを提供する。
  • 内部ロードバランサー (ILB) を使用して内部アプリケーションを提供する。これによって、Azure Virtual Network 内からのアクセスのみが許可されます。 ILB にはプライベート サブネットの IP アドレスがあり、アプリはインターネットから完全に分離されます。
  • Web アプリケーション ファイアウォール (WAF) の背後で ILB を使用する。 WAF は、DDoS 保護、URI フィルター処理、SQL のインジェクション防止など、一般公開されているアプリケーションにエンタープライズレベルの保護を提供します。

DDoS 保護

Web ワークロードの場合は、新たな DDoS 攻撃から保護するために Azure DDoS 保護Web アプリケーション ファイアウォールを利用することを強くお勧めします。 もう 1 つのオプションは、Web アプリケーション ファイアウォールと共に Azure Front Door をデプロイすることです。 Azure Front Door は、ネットワーク レベルの DDoS 攻撃に対するプラットフォーム レベルの保護を提供します。

詳細については、Azure App Service 環境の概要に関するページを参照してください。