ウェブサイト検索

Azure Web AppにLet's Encrypt SSLを設定する方法


Azureは多くのツールを提供していますが、すべてを備えているわけではありません。Azure Web Appに機能的なLet's Encrypt SSLを設定する方法を見ていきましょう。これにより、すべての標準的なオンライン操作に必要なセキュリティレベルを提供できます。

Let's Encryptとは何ですか?

まず第一に、Let's Encryptのことを片付けましょう。それは何かと言うと、自動化された無料のオープンな証明書機関です。つまり、完全に無料のSSL証明書を取得でき、デフォルトのURL構造をHTTP://からHTTPS://に変更することができます。

しかし、何が裏があるのでしょうか?本当にそれほど簡単なのでしょうか?実際、SSL証明書の有効期限は90日間であり、他の証明書のように何年も持続するわけではありません。それでも、これには理由があります。それは自動化を促進し、SSLの体験を忘れられるものにするためです(自動的に証明書を更新しインストールするスクリプトやバックグラウンドプロセスがあれば)。

最近では、Let's Encryptを使用しない理由は本当にありません。さまざまな業界での多数の使用例と、それに伴うWebアプリケーションから明らかです。

設定の前提条件:

  1. アクティブなAzureアカウント。(学生は無料のAzureリソースを取得できます。)
  2. App Serviceを介してホストされている任意のWebアプリケーション。スタックは関係ありません。
  3. ウェブアプリにポイントするカスタムDNSエントリ。

理想的な世界では、App ServiceとApp Service Planは同じリソースグループ内にあります。しかし、これがなくても実行することは可能です。

ステップ1: WebJobのためのストレージアカウント

さて、第一歩はAzure Storageアカウントを作成することです。これにより、Azure WebJobsを介して90日ごとに認証を更新できるようになります。

アカウントはBlobStorageではなく、動作しません。アカウントは「Storage」または「StorageV2」のいずれかである必要があります。

これが完了したので、"AzureWebJobsDashboard"と"AzureWebJobsStorage"の2つの別々の設定を追加します。それらを以前に作成したストレージアカウントに接続する文字列で設定します。

文字列は次のように見える場合があります:

デフォルトエンドポイントプロトコル=https;アカウント名=[youraccount];アカウントキー=[yourkey];

ステップ2: プロセスの自動化

前の拡張機能が私たちの干渉なしに機能するためには、「Azureサービスプリンシパル」を作成する必要があります。これは、Azure ADのエントリーを介した委任の概念に基づいて動作します。

新しいアプリケーションを作成したいAzure Active Directoryに自分自身を配置します。パネル内で「アプリ登録」を選択します。

  1. 新しいアプリケーションを作成し、この画像に見られるように設定してください。

  2. クライアントシークレットを生成し、安全な場所に保存してください。保存しないと、再度クリアテキストでアクセスすることができなくなります。
  3. 概要に戻り、「クライアントID」を保存してください。
  4. 今、サービスプリンシパルに寄与権限を付与する必要があります。それは、あなたの「アプリサービスプラン」と「アプリサービス」のリソースグループにリンクされている必要があります。

  5. 次のメニューで「貢献者」役割を選択し、作成された「サービスプリンシパル」に追加します。
  6. グループ内に他のサービスがある場合は、それにも貢献者の役割を追加できます。

設定は好きなようにいじることができますが、それがサービスプリンシパルについてのすべてです。

ステップ3: Let's Encrypt 拡張機能

すべての二次要件が揃ったので、ついに拡張機能をインストールして、それに応じて設定できます。

「アプリサービス」に移動し、「SJKP」によるAzure Let's Encrypt拡張機能を検索します。インストールしたら、設定を進めることができます。

拡張機能を設定するには、「アプリサービス」の「高度なツール」ページに移動する必要があります。検索バーで検索することで見つけることができ、おそらく次のようなサイトに移動するでしょう: https://yourdomain.scm.azurewebsite.net.

設定にアクセスするには、「サイト拡張」ボタンをクリックし、「起動」をクリックします。これで設定ページが開くはずで、次のオプションが表示されます。

  • テナント: あなたのサービスプリンシパルが作成されたAzure ADディレクター。
  • クライアントID: 前と同じクライアントIDです。
  • クライアントシークレット: 前と同じクライアントシークレット。
  • ResourceGroupName: あなたが使用しているApp Serviceのリソースグループの名前です。
  • SubscriptionID: リソースグループに使用しているサブスクリプションのIDです。
  • アプリケーション設定の更新: 常に True に設定してください。そうしないと、すべての設定が保存されません。それ以外の場合、新しい証明書をインストールするための WebsJobs で設定を使用できません。
  • ServicePlanResourceGroupName: あなたのアプリサービスとサービスプランが同じグループにある場合、名前はリソースグループ名と同じになります。それ以外の場合は、実際のサービスプランの場所のリソースグループの名前を入力します。

すべてのオプションを設定した後、証明書、SSLバインディング、およびカスタムドメインの概要に移動します。まだ生成する必要があるため、リクエストのためにドメインを選択し、SSL証明書の「取得リクエスト」を送信できます。

しかし、その前に、証明書に問題が発生した場合(例えば、古くなったり更新されなかったりする場合)にアラートを受け取るために、自分のメールアドレスを追加するべきです。

それで全部です。これで全てが準備完了ですので、自分自身でタスクを完了した報酬を楽しむことができます。

潜在的な問題

ドメイン認証のために拡張機能があなたのページにアクセスできる必要があるので、URLがHTTP://yourdomain.com/.well-known/acme-challenge/を介して一般にアクセス可能であることを確認してください。

エラーが発生してURLにアクセスできない場合、アクセスを妨げているweb.configのルールセットがあるか、App Serviceの設定でHTTPSが強制されている可能性があります。

また、Let's EncryptがACMEのHTTP-01メカニズムを使用するため、ウェブサーバーのファイルにランダムなトークンを配置し、その後それをHTTP経由で取得しようとします。Webアプリをhttpsのみに設定した場合、リクエストは拒否されるため、これは避けたいことです。

関連記事: