2017年7月27日木曜日

Azure Function Apps Proxies にカスタムドメイン用 SSL 証明書を設定して LogicFlow を呼び出す

前回のエントリでは、Azure Funcrtion Apps Proxies を利用して、URL を一意にし各種メソッドにより呼び出す LogicFlow を分岐させることを行いました。今回は、HTTPS 対応として証明書の設定までを行ってみました。

URL が hogehogefunction.azurewebsites.net のままでよければ、標準でワイルドカード証明書が提供されていますので特に何も必要ではありませんが、今回は独自ドメインを利用したい場合になります。そのため下準備として、カスタムドメインが必要になります。今回はお試しということもあり、無償ドメインの tk ドメインを取得しています。

image

ドメイン名が非常にアレですが、tk ドメインを取得した状態です。Azure Function Apps Proxies で独自ドメインを扱う場合、こちら側での設定と Azure 側での設定が必要になります。

Azure 側で設定を行う前に、ドメイン側での設定が必要です。

image

DNS 設定として、A レコードと CNAME レコードが必要になります。CNAME レコードでは、上記の例でいうと logicflow.(取得した)ドメイン としてアクセスしてきた場合に Azure Function Apps のほうへ誘導するために必要です。

image

CNAME レコードで指定する値は、Function Apps の URL になります(URL より HTTPS を省いたもの)。

image

もう一つ必要な A レコードは、振替先となる Function Apps の IP アドレスを指定します。IP アドレスは上記のように、Function Apps のプロパティで確認可能です。

これら 2 つのレコード設定を DNS に対して行うと、独自ドメインにアクセスすると、Function Apps Proxies に誘導されるようになります。ここまで設定を行うと、次は Azure 側の設定となります。

image

Function Apps の画面から、カスタムドメインをクリックします。

image

カスタムドメインでは、取得した独自ドメインの設定を行います。ホスト名の下にあるホスト名の追加、をクリックすると上記のような表示になりますので、誘導したい独自ドメイン名を設定し、検証をクリックします。今回であれば、logicflow.nawagami.tk にアクセスしてきたものを Function Apps で扱いたいので、logicflow.nawagami.tk と入力します。

この際に、ドメイン側で設定が正しく行ってあれば、通信はもう行える状態となりますので検証は無事に終了しますが、何かしらエラーとなった場合はドメイン側の設定で、A レコードと CNAME レコードが正しく設定されているかを確認してください。

ここまでの設定で、とりあえずアクセスすると Azure Function Apps Proxies に誘導することは可能です。ただし、SSL 証明書を設定していないので、下記のように保護されていないアドレスとして扱われます。

これを回避するためには SSL 証明書を取得する必要があります。有償で提供されているものを購入してもよいのですが、今回は Let’s Encrypt で提供されている無償のドメイン証明書を利用します。

すでに色々な方が利用している Let’s Encrypt ですが、大体は Web サーバを自分で建ててそこに対しての証明書取得であり、何かしらのツールをインストールしてあれこれする必要があり、一部の人にはまだどうしても敷居の高いものとなっています。

zeroSSL による SSL 証明書の取得

今回はブラウザ上の操作だけで Let’s Encrypt 提供の証明書が取得可能な zeroSSL というサービスを利用して取得を行います。

image

サイトを開くとこのような感じで表示されるので、「ONLINE TOOL」をクリックします。

image

FREE SSL Certificaten と Self-Signed Cerificate があるので、FREE SSL のほうをクリックします。

image

左側には連絡先となるメールアドレスを入力、右側には取得している自分の独自ドメインを指定します。今回は logicflow.nawagami.tk のみを証明書対象としたいので、logicflow.nawagami.tk と入力します。そして、左下部にある、DNS verification をクリックして選択した状態にします。

あとは右下部にある「Accept ZeroSSL TOS」と「Accept Let’s Encript SA」の欄をクリックして、チェックをつけます。

ここまでの設定を行ったら、右上部にある「NEXT」をクリックします。

image

クリックすると上記のように、「www サブドメインを含みますか?」という質問が来るので、もし www サブドメインを利用する予定であるなら「Yes」を、今回のように別サブドメイン限定の場合は「No」をクリックします。

image

クリックすると必要情報の生成が開始され、終了すると上記のように表示されますので、ダウンロード(左のアイコン)かクリップボードへコピー(右のアイコン)をクリックして、生成された情報を保存しておきます。この情報は、あとで証明書ファイルを生成する際に利用する情報の一つ、ドメインの CSR 情報となります。

保存を行ったらもう一度右上の「NEXT」をクリックします。

image

さらに情報の生成が行われ、今度は左側に情報が表示されます。これも同様にダウンロードかクリップボードにコピーを行い、保存しておきます。この情報はアカウント情報となり、秘密鍵として利用されます。

保存を行ったら右上の「NEXT」をクリックします。

image

クリックすると、ドメイン側 DNS の設定で追加が必要になるレコードの情報が表示されます。Let’s Encrypt でのドメイン確認の方法として、DNS に特定の TXT レコードを設定する必要があり、その内容が表示されています。上記の例だと、デフォルトのドメインと www サブドメインの設定となります。

image

実際に設定を行った例が上記になります。TXT レコードを設定して、zeroSSL より指定したアドレスに対しての文言を設定します。この設定が反映されるのには 10~20 分ほどかかるので、ここでは少し時間をおいてください。確認するのであれば、コマンドプロンプトから以下のコマンドを実行するなどして、txt レコードが反映されているか確認できます。

nslookup (txt レコードを設定したドメイン) –type=txt

image

設定が反映されていたら、zeroSSL 側に戻り「NEXT」をクリックします。

image

TXT レコードで設定が行われているのを確認できると、証明書情報が発行されます。左下部に二つ情報が生成され表示されていますので、どちらもダウンロードまたはコピーして保存を行っておきます。これらは、ドメインのキー情報とドメインのCRT情報となり、どちらも証明書ファイルを生成する際に利用されます。

Azure Function Apps Proxies に設定する証明書ファイル( .pfx )の生成

zeroSSL 上で作成された各種ファイルをもとに、Azure 上で利用する証明書ファイルを作成します。AWS では先ほどのファイルの中身をそのまま貼り付けることができるのですが、Azure では pfx 形式として用意したファイルのみ対応している状態です。

大体はここで openSSL というツールを利用して生成することになるのですが、Azure ではすでにその環境は用意されています。ポータルから利用できる Azure Cloud Shell です。右上にある「>_」をクリックすると起動し、初回の場合はストレージアカウントの新設を求められますので、作成します。

image

Azure Cloud Shell を利用できる状態にして、作成されたストレージアカウントの File サービスから、zeroSSL で生成された「ドメイン用の CRT ファイル」と「ドメイン用のキーファイル」をアップロードします。

image

アップロードができているかの確認は、シェル上で clouddrive にカレントフォルダを移動した後で、ファイル一覧を参照すると確認可能です。

  1. cd clouddrive
  2. ls

準備ができたら、以下のコマンドを入力し実行します

openssl pkcs12 -export -inkey <秘密鍵ファイル名> -in <SSLサーバ証明書ファイル名> -out <任意のpfxファイル名>

こうすると pfx ファイルが生成されますので、先ほどの File サービスのところからローカルにダウンロードを行っておきます。なお、zeroSSL で生成される情報のうち、証明書生成時にパスワードを求められますが、初期状態では「パスワードなし」(ブランク)です。

image

Azure Function Apps Proxies に戻り、SSL 設定をクリックし、「証明書のアップロード」をクリックすると、上記のように表示されますので、ここで先ほど作成された pfx ファイルをアップロードします。

image

このような設定を行うことで、独自ドメインを Function Apps Proxies に対応させることができます。ブラウザでアクセスした際、「保護された通信」となっていることで、設定した証明書が正しく認証されているもの、とわかります。

各種ツールを利用すれば、このような手作業で色々行う必要はほとんどないのですが、多くの人にとって「ツールを利用する」というのは、思っているよりも敷居の高いことだと思っています。そのような考えもあって、今回はできるだけツールを利用しない方法で、SSL 対応を Azure Function Apps Proxies に適用させてみました。証明書を作成するあたりは、Function Apps Proxies でなくても共通している箇所ですので、WebApps 用に利用するのも可能です。

0 件のコメント:

コメントを投稿