Azure App Service のセキュリティSecurity in Azure App Service

この記事では、Azure App Service で Web アプリ、モバイル アプリ バック エンド、API アプリ、および関数アプリをセキュリティで保護する方法について説明します。This article shows you how Azure App Service helps secure your web app, mobile app back end, API app, and function app. また、組み込みの App Service 機能を使用してアプリをさらに保護する方法についても説明します。It also shows how you can further secure your app with the built-in App Service features.

Azure VM、ストレージ、ネットワーク接続、Web フレームワーク、管理、統合機能を含む App Service のプラットフォーム コンポーネントは、積極的に保護され、強化されています。The platform components of App Service, including Azure VMs, storage, network connections, web frameworks, management and integration features, are actively secured and hardened. App Service は、徹底したコンプライアンス チェックを継続的に行い、以下の点を確認しています。App Service goes through vigorous compliance checks on a continuous basis to make sure that:

  • お客様のアプリのリソースが、他のお客様の Azure リソースからセキュリティで保護されていること。Your app resources are secured from the other customers' Azure resources.
  • 新たに発見された脆弱性に対応できるように、VM インスタンスとランタイム ソフトウェアが定期的に更新されていること。VM instances and runtime software are regularly updated to address newly discovered vulnerabilities.
  • アプリと他の Azure リソース (SQL Database など) 間のシークレット (接続文字列など) の通信が Azure 内にとどまり、ネットワーク境界を越えないこと。Communication of secrets (such as connection strings) between your app and other Azure resources (such as SQL Database) stays within Azure and doesn't cross any network boundaries. 保存時にシークレットが常に暗号化されていること。Secrets are always encrypted when stored.
  • ハイブリッド接続などの App Service 接続機能を介したすべての通信が暗号化されていること。All communication over the App Service connectivity features, such as hybrid connection, is encrypted.
  • Azure PowerShell、Azure CLI、Azure SDK、REST API などのリモート管理ツールとの接続がすべて暗号化されていること。Connections with remote management tools like Azure PowerShell, Azure CLI, Azure SDKs, REST APIs, are all encrypted.
  • 24 時間体制の脅威管理によって、マルウェア、分散型サービス拒否 (DDoS)、man-in-the-middle (MITM) などの脅威からインフラストラクチャとプラットフォームが保護されていること。24-hour threat management protects the infrastructure and platform against malware, distributed denial-of-service (DDoS), man-in-the-middle (MITM), and other threats.

Azure のインフラストラクチャとプラットフォームのセキュリティの詳細については、 Azure セキュリティ センターを参照してください。For more information on infrastructure and platform security in Azure, see Azure Trust Center.

以下のセクションでは、App Service アプリを脅威からさらに保護する方法について説明します。The following sections show you how to further protect your App Service app from threats.

HTTPS と証明書HTTPS and Certificates

App Service を使用すると、HTTPS でアプリをセキュリティで保護できます。App Service lets you secure your apps with HTTPS. アプリを作成すると、HTTPS を使用して既定のドメイン名 (<app_name>.azurewebsites.net) にアクセスできます。When your app is created, its default domain name (<app_name>.azurewebsites.net) is already accessible using HTTPS. アプリのカスタム ドメインを構成する場合は、クライアント ブラウザーがカスタム ドメインに対して安全な HTTPS 接続を実行できるように、カスタム証明書を使用してセキュリティで保護する必要があります。If you configure a custom domain for your app, you should also secure it with a custom certificate so that client browsers can make secured HTTPS connections to your custom domain. それには 2 つの方法があります。There are two ways to do it:

  • App Service 証明書 - Azure で証明書を直接作成します。App Service certificate - Create a certificate directly in Azure. 証明書は Azure Key Vault でセキュリティで保護され、App Service アプリにインポートできます。The certificate is secured in Azure Key Vault, and can be imported into your App Service app. 詳細については、「Azure App Service の SSL 証明書を購入して構成する」を参照してください。For more information, see Buy and Configure an SSL Certificate for your Azure App Service.
  • サードパーティ証明書 - 信頼できる証明機関から購入したカスタム SSL 証明書をアップロードして、App Service アプリにバインドします。Third-party certificate - Upload a custom SSL certificate that you purchased from a trusted certificate authority and bind it to your App Service app. App Service は、単一ドメイン証明書とワイルドカード証明書の両方をサポートしています。App Service supports both single-domain certificates and wildcard certificates. また、テスト目的の自己署名証明書もサポートしています。It also supports self-signed certificates for testing purposes. 詳細については、「既存のカスタム SSL 証明書を Azure App Service にバインドする」を参照してください。For more information, see Bind an existing custom SSL certificate to Azure App Service.

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

すべての暗号化されていない (HTTP) 接続からアプリをセキュリティで保護するために、App Service には 1 クリックで HTTPS を適用できる構成が用意されています。To secure your app against all unencrypted (HTTP) connections, App Service provides one-click configuration to enforce HTTPS. セキュリティで保護されていない要求は、アプリケーション コードに到達する前に拒否されます。Unsecured requests are turned away before they even reach your application code. 詳細については、「HTTPS の適用」を参照してください。For more information, see Enforce HTTPS.

TLS 1.0 は、PCI DSS などの業界標準によって安全であると見なされなくなっています。TLS 1.0 is no longer considered secure by industry standards, such as PCI DSS. App Service で TLS 1.1/1.2 を適用することで、古いプロトコルを無効にすることができます。App Service lets you disable outdated protocols by enforcing TLS 1.1/1.2.

App Service は、ファイルの展開に FTP と FTPS の両方をサポートしています。App Service supports both FTP and FTPS for deploying your files. ただし、可能な限り FTP ではなく FTPS を使用することをお勧めします。However, FTPS should be used instead of FTP, if at all possible. これらのプロトコルの 1 つまたは両方が使用されていない場合は、無効にすることをお勧めします。When one or both of these protocols are not in use, you should disable them.

静的 IP の制限事項Static IP restrictions

既定で、App Service アプリはインターネットを介したすべての IP アドレスの要求を受け入れますが、そのアクセスをごく一部の IP アドレスに制限することができます。By default, your App Service app accepts requests from all IP addresses from the internet, but you can limit that access to a small subset of IP addresses. Windows 上の App Service では、アプリへのアクセスを許可されている IP アドレスの一覧を定義できます。App Service on Windows lets you define a list of IP addresses that are allowed to access your app. 許可一覧には、個々 の IP アドレスまたはサブネット マスクによって定義された IP アドレスの範囲を含めることができます。The allowed list can include individual IP addresses or a range of IP addresses defined by a subnet mask. 詳細については、「Azure App Service 静的 IP 制限」を参照してください。For more information, see Azure App Service Static IP Restrictions.

Windows 上の App Service の場合、web.config を構成して IP アドレスを動的に制限することもできます。詳細については、動的 IP セキュリティ <dynamicIpSecurity> に関するページを参照してください。For App Service on Windows, you can also restrict IP addresses dynamically by configuring the web.config. For more information, see Dynamic IP Security <dynamicIpSecurity>.

クライアントの認証と承認Client authentication and authorization

Azure App Service には、ユーザーまたはクライアント アプリのターンキーの認証および承認機能があります。Azure App Service provides turn-key authentication and authorization of users or client apps. 有効にすると、アプリ コードをほとんど、またはまったく作成せずに、ユーザーとクライアント アプリにサインインすることができます。When enabled, it can sign in users and client apps with little or no application code. 独自の認証および承認ソリューションを実装するか、App Service でその処理を自動的に実行することができます。You may implement your own authentication and authorization solution, or allow App Service to handle it for you instead. 認証および承認モジュールは、Web 要求をアプリケーション コードに渡す前に Web 要求を処理し、未承認の要求をコードに到達する前に拒否します。The authentication and authorization module handles web requests before handing them off to your application code, and it denies unauthorized requests before they reach your code.

App Service の認証および承認は、Azure Active Directory、Microsoft アカウント、Facebook、Google、Twitter などの複数の認証プロバイダーをサポートしています。App Service authentication and authorization support multiple authentication providers, including Azure Active Directory, Microsoft accounts, Facebook, Google, and Twitter. 詳細については、「 Azure App Service での認証および承認」を参照してください。For more information, see Authentication and authorization in Azure App Service.

サービス間認証Service-to-service authentication

バックエンド サービスに対して認証する場合、App Service には必要に応じて 2 つの異なるメカニズムが用意されています。When authenticating against a back-end service, App Service provides two different mechanisms depending on your need:

リモート リソースへの接続性Connectivity to remote resources

アプリからアクセスする必要があるリモート リソースには、次の 3 種類があります。There are three types of remote resources your app may need to access:

それぞれの場合について、App Service にはセキュリティで保護された接続を確立する方法が用意されていますが、セキュリティのベスト プラクティスを守ることをお勧めします。In each of these cases, App Service provides a way for you to make secure connections, but you should still observe security best practices. たとえば、バックエンド リソースで暗号化されていない接続が許可されている場合でも、常に暗号化された接続を使用します。For example, always use encrypted connections even if the back-end resource allows unencrypted connections. さらに、バックエンドの Azure サービスで最小限の IP アドレスを許可するようにします。Furthermore, make sure that your back-end Azure service allows the minimum set of IP addresses. アプリの送信 IP アドレスについては、「Azure App Service における受信 IP アドレスと送信 IP アドレス」を参照してください。You can find the outbound IP addresses for your app at Inbound and outbound IP addresses in Azure App Service.

Azure リソースAzure resources

アプリが SQL DatabaseAzure Storage などの Azure リソースに接続しても、接続は Azure 内にとどまり、ネットワーク境界を越えません。When your app connects to Azure resources, such as SQL Database and Azure Storage, the connection stays within Azure and doesn't cross any network boundaries. ただし、接続は Azure の共有ネットワークを経由するので、接続は常に暗号化してください。However, the connection goes through the shared networking in Azure, so always make sure that your connection is encrypted.

アプリが App Service 環境でホストされている場合、仮想ネットワーク サービス エンドポイントを使用して、サポートされている Azure サービスに接続する必要があります。If your app is hosted in an App Service environment, you should connect to supported Azure services using Virtual Network service endpoints.

Azure Virtual Network 内のリソースResources inside an Azure Virtual Network

アプリは、Azure Virtual Network 内のリソースに Virtual Network 統合を介してアクセスできます。Your app can access resources in an Azure Virtual Network through Virtual Network integration. Virtual Network との統合は、ポイント対サイトの VPN を使用して確立されます。The integration is established with a Virtual Network using a point-to-site VPN. アプリは、プライベート IP アドレスを使用して Virtual Network 内のリソースにアクセスできるようになります。The app can then access the resources in the Virtual Network using their private IP addresses. ただし、ポイント対サイト接続は Azure の共有ネットワークを経由します。The point-to-site connection, however, still traverses the shared networks in Azure.

リソース接続を Azure の共有ネットワークから完全に分離するには、App Service 環境でアプリを作成します。To isolate your resource connectivity completely from the shared networks in Azure, create your app in an App Service environment. App Service 環境は常に専用の Virtual Network に展開されるので、アプリと Virtual Network 内のリソースとの接続は完全に分離されます。Since an App Service environment is always deployed to a dedicated Virtual Network, connectivity between your app and resources within the Virtual Network is fully isolated. App Service 環境におけるネットワーク セキュリティのその他の側面については、「ネットワークの分離」を参照してください。For other aspects of network security in an App Service environment, see Network isolation.

オンプレミスのリソースOn-premises resources

データベースなどのオンプレミス リソースには、次の 3 つの方法で安全にアクセスできます。You can securely access on-premises resources, such as databases, in three ways:

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

データベースの資格情報、API トークン、秘密キーなどのアプリケーション シークレット情報をコードや構成ファイルに保存しないでください。Don't store application secrets, such as database credentials, API tokens, and private keys in your code or configuration files. 一般に受け入れられているのは、選択した言語の標準パターンを使用して環境変数としてアクセスする方法です。The commonly accepted approach is to access them as environment variables using the standard pattern in your language of choice. App Service では、アプリ設定 (と .NET アプリケーションの場合は特別に接続文字列) を使用して環境変数を定義します。In App Service, the way to define environment variables is through app settings (and, especially for .NET applications, connection strings). アプリ設定と接続文字列は、Azure で暗号化されて保存され、アプリの起動時にアプリのプロセス メモリに挿入される前に暗号化が解除されます。App settings and connection strings are stored encrypted in Azure, and they're decrypted only before being injected into your app's process memory when the app starts. 暗号化キーは定期的に回転されます。The encryption keys are rotated regularly.

また、高度なシークレット管理のために、App Service アプリを Azure Key Vault と統合することもできます。Alternatively, you can integrate your App Service app with Azure Key Vault for advanced secrets management. マネージド ID を使用してキー コンテナーにアクセスすることで、App Service アプリは必要なシークレットに安全にアクセスできます。By accessing the Key Vault with a managed identity, your App Service app can securely access the secrets you need.

ネットワークの分離Network isolation

Isolated 価格レベルを除くすべての価格レベルでは、App Service の共有ネットワーク インフラストラクチャ上でアプリが実行されます。Except for the Isolated pricing tier, all tiers run your apps on the shared network infrastructure in App Service. たとえば、パブリック IP アドレスとフロントエンド ロード バランサーは他のテナントと共有されます。For example, the public IP addresses and front-end load balancers are shared with other tenants. Isolated 価格レベルでは、専用の App Service 環境内でアプリを実行することで完全なネットワークの分離を実現しています。The Isolated tier gives you complete network isolation by running your apps inside a dedicated App Service environment. App Service 環境は、Azure Virtual Network の独自のインスタンスで実行されます。An App Service environment runs in your own instance of Azure Virtual Network. 以下を実行できます。It lets you:

  • 専用のフロント エンドを使用し、専用のパブリック エンドポイントを介してアプリを提供する。Serve your apps through a dedicated public endpoint, with dedicated front ends.
  • 内部ロードバランサー (ILB) を使用して内部アプリケーションを提供する。これによって、Azure Virtual Network 内からのアクセスのみが許可されます。Serve internal application using an internal load balancer (ILB), which allows access only from inside your Azure Virtual Network. ILB にはプライベート サブネットの IP アドレスがあり、アプリはインターネットから完全に分離されます。The ILB has an IP address from your private subnet, which provides total isolation of your apps from the internet.
  • Web アプリケーション ファイアウォール (WAF) の背後で ILB を使用するUse an ILB behind a web application firewall (WAF). WAF は、DDoS 保護、URI フィルター処理、SQL のインジェクション防止など、一般公開されているアプリケーションにエンタープライズレベルの保護を提供します。The WAF offers enterprise-level protection to your public-facing applications, such as DDoS protection, URI filtering, and SQL injection prevention.

詳細については、Azure App Service 環境の概要に関するページを参照してください。For more information, see Introduction to Azure App Service Environments.