次の方法で共有


証明書と App Service Environment

App Service Environment は、ご使用の Azure Virtual Network 内で実行する Azure App Service のデプロイです。 これは、インターネットでアクセス可能なアプリケーション エンドポイントまたはご使用の仮想ネットワーク内にあるアプリケーション エンドポイントを使用してデプロイできます。 インターネットでアクセス可能なエンドポイントを使用して App Service Environment をデプロイすると、そのデプロイは外部 App Service Environment と呼ばれます。 仮想ネットワーク内にあるエンドポイントを使用して App Service Environment をデプロイすると、そのデプロイは ILB App Service Environment と呼ばれます。 ILB App Service Environment の詳細については、ILB App Service Environment の作成と使用に関するドキュメントを参照してください。

アプリケーション証明書

App Service Environment でホストされるアプリケーションは、次のアプリ中心の証明書機能をサポートします。これらはマルチテナント App Service でも使用できます。 これらの証明書のアップロードと管理の要件と手順については、「Azure App Service で TLS/SSL 証明書を追加する」を参照してください。

証明書を App Service アプリまたは関数アプリに追加したら、その証明書を使用してカスタム ドメイン名をセキュリティで保護することや、その証明書をアプリケーション コードで使用することができます。

制限事項

App Service マネージド証明書は、App Service Environment でホストされているアプリではサポートされていません。

TLS の設定

TLS の設定は、アプリ レベルで構成できます。

プライベート クライアント シナリオのルート証明書

アプリがプライベート証明機関 (CA) 証明書で保護されたサービスに接続するクライアントとして機能する場合は、信頼を確立するためにルート証明書を追加する必要があります。 App Service Environment v3 には、ルート証明書を管理するための 2 つの方法が用意されています。

  • ルート証明書 API (推奨): すべてのアプリの環境全体の管理
  • プライベート クライアント証明書: アプリケーション設定を使用したアプリごとの構成

適切な方法の選択

メソッド Scope 次の場合に使用します。 制限事項
ルート証明書 API App Service Environment 内のすべてのアプリ - 同じルート証明書を必要とする複数のアプリを管理する
- 一元化された証明書管理が必要です
- コードとしてのインフラストラクチャを使用して新しい環境をデプロイする
- 新しい証明書を取得するには、既存のアプリを停止して起動する必要があります
- API/CLI/IaC ツールが必要です (現時点では Azure portal では使用できません)
プライベート クライアント証明書 1 つの App Service プラン内のアプリ - 少数のアプリに対してのみ証明書が必要
- ポータルベースの構成を好む
- アプリごとに異なるルート証明書が必要
- Windows コードアプリケーションのみ
- 各 App Service プランを個別に構成する必要があります
- 証明書はアプリ コードの外部では使用できません (コンテナー レジストリ認証またはフロントエンド TLS 検証には使用できません)

一般的な推奨事項は、新しいデプロイにルート証明書 API を使用し、複数のアプリ間で証明書を管理する場合です。 スケーラビリティが向上し、自動化のサポートが提供され、Windows アプリと Linux アプリの両方で機能します。

ルート証明書 API

ルート証明書 API を使用すると、App Service Environment v3 にルート証明書をプログラムで追加して、起動時にすべてのアプリで使用できるようになります。 ルート証明書は、ルート証明機関 (CA) を識別するパブリック証明書であり、セキュリティで保護された通信で信頼を確立するために不可欠です。 App Service Environment にルート証明書を追加することで、その環境内でホストされているすべてのアプリがルート ストアにインストールされ、プライベート CA またはエンタープライズ CA によって発行された証明書を使用する内部サービスまたは API との安全な通信が保証されます。

この機能は、App Service Environment v3 の Windows ベースと Linux ベースのアプリの両方で使用できます。 この API を介して追加されたルート証明書は、起動時にアプリの信頼ストアに自動的に挿入されるため、アプリごとの構成が不要になり、証明書のライフサイクル管理が簡素化されます。

重要な考慮事項

  • 証明書は、REST API、Azure CLI、ARM テンプレート、Bicep、または Terraform を使用して App Service Environment に追加できます。
  • 既存または実行中のアプリを使用して App Service Environment に証明書を追加する場合は、証明書ストアが新しいルート証明書で更新されるように、各アプリを 停止 してから 起動 する必要があります。 アプリを作成する前にすべての証明書を追加することをお勧めします。アプリを個別に停止して起動する必要がなくなります。
    • 停止操作と開始操作は、アプリの再起動とは異なります。 Azure portal、Azure CLI、または REST API で使用できる専用の停止および開始コマンドを使用する必要があります。
    • アプリを起動および停止すると、アプリの停止中に一時的な停止が発生します。
    • 複数のアプリがあり、このプロセスを自動化する場合は、Azure CLI または REST API を使用できます。
  • 証明書の追加プロセス中に、要求で証明書 BLOB 全体を指定する必要があります。 .cer ファイルを直接アップロードすることはできません。

ルート証明書を追加する

App Service Environment にルート証明書を追加するには、次のいずれかの方法を使用します。

PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/hostingEnvironments/{aseName}/publicCertificates/{certificateName}?api-version=2024-04-01

Content-Type: application/json

{
  "location": "{location}",
  "properties": {
    "blob": "{raw certificate blob}",
    "isRoot": true
  }
}

次のプレースホルダーを置き換えてください。

  • {subscriptionId}: Azure サブスクリプション ID
  • {resourceGroupName}: App Service Environment を含むリソース グループ
  • {aseName}: アプリサービス環境の名前
  • {certificateName}: 証明書リソースの名前
  • {location}: App Service Environment がデプロイされている Azure リージョン
  • {raw certificate blob}: ルート証明書からの証明書データの塊

ルート証明書を削除する

App Service Environment からルート証明書を削除するには:

DELETE https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/hostingEnvironments/{aseName}/publicCertificates/{certificateName}?api-version=2024-04-01

特定の証明書を取得する

App Service Environment から特定のルート証明書を取得するには:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/hostingEnvironments/{aseName}/publicCertificates/{certificateName}?api-version=2024-04-01

すべてのパブリック証明書を取得する

App Service Environment からすべてのパブリック証明書を取得するには:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/hostingEnvironments/{aseName}/publicCertificates?api-version=2024-04-01

アプリを停止して起動する

既存のアプリを使用してルート証明書を App Service Environment に追加した後、各アプリを停止して起動して証明書ストアを更新する必要があります。

  1. Azure portal でアプリに移動します。
  2. 概要ページから [停止] を選択します。
  3. アプリが完全に停止するのを待ちます。
  4. [ 開始] を選択してアプリを再起動します。

プライベート クライアント証明書 (アプリごとの構成)

Note

ほとんどのシナリオでは、このメソッドの代わりに ルート証明書 API を 使用します。 ルート証明書 API は、Windows アプリと Linux アプリの両方に環境全体の証明書管理を提供しますが、この方法は 1 つの App Service プラン内の Windows コード アプリに限定されます。

特定のアプリのみにルート証明書を構成する必要がある場合、または Azure portal を使用する場合は、プライベート クライアント証明書の方法を使用できます。 この方法では、証明書を個々のアプリにアップロードし、同じ App Service プランのアプリで使用できるようにします。

Important

プライベート クライアント証明書は、Windows コード アプリのカスタム コードからのみサポートされます。 プライベート クライアント証明書は、アプリの外部ではサポートされていません。 これにより、プライベート証明書を使用してレジストリからアプリ コンテナー イメージを取得するシナリオや、プライベート証明書を使用してフロントエンド サーバーを介して TLS 検証を行うシナリオなどでの使用が制限されます。

証明書 (.cer ファイル) を App Service Environment 内のアプリにアップロードするには、次の手順に従います。 .cer ファイル は、証明書からエクスポートできます。 テストを目的とした一時的な自己署名証明書を生成する PowerShell の例が最後に示されています。

  1. Azure portal で証明書を必要とするアプリに移動します。

  2. アプリで [証明書] に移動します。 [公開キー証明書 (.cer)] を選びます。 [+ 証明書の追加] を選択します。 名前を指定します。 .cer ファイルを参照して選択します。 [アップロード] を選択します。

  3. サムプリントをコピーします。

  4. [構成]>[アプリケーションの設定] に移動します。 サムプリントを値として使用して、アプリ設定 WEBSITE_LOAD_ROOT_CERTIFICATES を作成します。 複数の証明書がある場合は、次のように空白なしのコンマで区切ることで、同じ設定に配置することができます。

    84EC242A4EC7957817B8E48913E50953552DAFA6,6A5C65DC9247F762FE17BF8D4906E04FE6B31819

この証明書は、その設定を構成したアプリと同じ App Service プラン内のすべてのアプリで使用できますが、プライベート CA 証明書に依存するすべてのアプリでは、タイミングの問題を回避するようにアプリケーション設定を構成する必要があります。

別の App Service プラン内のアプリに対しても使用できるようにする必要がある場合は、その App Service プランでアプリの設定操作を繰り返す必要があります。 証明書が設定されていることを確認するには、Kudu コンソールに移動し、PowerShell デバッグ コンソールで次のコマンドを発行します。

dir Cert:\LocalMachine\Root

テストを実行するには、自己署名証明書を作成し、次の PowerShell を使用して .cer ファイルを生成します。

$certificate = New-SelfSignedCertificate -CertStoreLocation "Cert:\LocalMachine\My" -DnsName "*.internal.contoso.com","*.scm.internal.contoso.com"

$certThumbprint = "Cert:\LocalMachine\My\" + $certificate.Thumbprint
$fileName = "exportedcert.cer"
Export-Certificate -Cert $certThumbprint -FilePath $fileName -Type CERT

プライベート サーバー証明書 (TLS/SSL バインド)

Note

このセクションでは、TLS/SSL バインドのサーバー証明書について説明します。これは、前に説明したルート証明書とは異なります。 サーバー証明書は HTTPS を使用してアプリのカスタム ドメインをセキュリティで保護するために使用され、ルート証明書は送信クライアント接続の信頼を確立します。

アプリがクライアント サーバー モデルのサーバーとして動作していて (リバース プロキシの内側で、またはプライベート クライアントと直接)、プライベート CA 証明書を使っている場合は、完全な証明書チェーンを含むサーバー証明書 (.pfx ファイル) をアプリにアップロードし、証明書をカスタム ドメインにバインドする必要があります。 インフラストラクチャは App Service Environment 専用であるため、完全な証明書チェーンはサーバーの信頼ストアに追加されます。 同じ App Service Environment 内のアプリで証明書を使うには、それを 1 回アップロードするだけで済みます。

Note

2023 年 10 月 1 日より前に証明書をアップロードした場合は、完全な証明書チェーンをサーバーに追加するために、証明書を再アップロードして再バインドする必要があります。

TLS/SSL によるカスタム ドメインのセキュリティ保護に関するチュートリアルに従い、プライベート CA ルート証明書を App Service Environment 内のアプリにアップロードしてバインドします。

次のステップ