Application GatewayのSSLオフロードでShibboleth認証

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【4/18開催】VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

こんにちは。サイオステクノロジーの小川です。

今回はShibboleth IdPサーバの前にApplication GatewayのSSLオフロードを設定し、Shihbboleth IdPサーバにはhttpsで受け付ける構成の検証をしましたので、その手順について記載します。

構成は以下になります。負荷分散については検証していないので、バックエンドの接続先は1サーバにしています。

今回Shibboleth IdPで使用しているミドルウェアは以下になります。

ミドルウェアバージョン
Apache2.4.6
Apache Tomcat9.0.33
Shibboleth IdP4.0.0

Application Gatewayの設定

Azure Portalに接続してアプリケーションゲートウェイに移動し、追加を選択します。

アプリケーションゲートウェイの作成をします。サブスクリプション、リソースグループを選択します。

インスタンスの詳細情報を入力し、仮想ネットワークを構成します。

今回負荷分散の検証はしないので、自動スケールせず、可用性ゾーンはなしで設定しています。

仮想ネットワークの「新規作成」を選択すると、仮想ネットワークの作成画面がでるので、名前を入力し以下設定をします。

今回Application Gateway用の仮想ネットワークとサブネットワークは以下で設定します。

項目名設定値アドレス空間
Application Gateway用仮想ネットワークApplicationGateway-vnet10.16.0.0/16
Application Gateway用サブネットワークshibAGSubnet10.16.0.0/24
バックエンド用サブネットワークshibBackendSubnet10.16.1.0/24

設定が完了したらOKをクリックします。仮想ネットワークの構成欄に仮想ネットワークとApplicationGatewey用のサブネットが表示されるので、「次:フロントエンドの数」を選択します。

フロントエンドIPの種類でパブリックを選択し、新規追加をクリックします。パブリックIP名を入力しOKをクリックします。

「次:バックエンド」を選択します。

バックエンドプールの追加をクリックします。

バックエンドプールの名前を入力します。バックエンドサーバをまだ作成してない場合は、ターゲットを持たないバックエンドプールを追加しますで「はい」を選択し「追加」をクリックします。

既にバックエンドサーバを構成している場合は、「ターゲットを持たないバックエンドプールを追加します」で「いいえ」を選択しターゲットの種類で「IPアドレスまたはFQDN」を選択し、対象サーバのIPを入力し追加を選択します。

バックエンドプールが作成されているので、「次:構成」をクリックします。先ほどサーバのIPを設定しているとバックエンドプールの対象に設定したサーバの数が表示されます。

次にルーティング規則を作成します。ルーティング規則の追加を選択します。

ルール名、リスナー名を入力します。フロントエンドIP、プロトコル、ポートは以下の設定値に設定します。

フロントエンドIP:パブリック

プロトコル:HTTPS

ポート:443

証明書のアップロードを選択し、pfxの証明書ファイルをアップロードし、証明書名とパスワードを入力します。

次に、「バックエンドターゲット」をクリックします。バックエンドターゲットで先ほど作成したBackendPoolを選択します。HTTP設定で「新規追加」をクリックします。

HTTP設定名を入力し、バックエンドプロトコルに「HTTP」、バックエンドポートに「80」を選択します。

設定が完了したら「追加」をクリックし構成の「次:タグ」をクリックします。

タグ、確認および作成に進み「作成」をクリックするとアプリケーションゲートウェイの作成が開始されます。

バックエンドのサーバの追加

作成したアプリケーションゲートウェイを選択し、設定->バックエンドプールに移動します。

BackendPoolをクリックします。

ターゲットで「IPアドレスまたはFQDN」を選択し、バックエンドサーバのIPをターゲットに入力し保存をクリックします。

バックエンドサーバとの正常性確認

作成したアプリケーションゲートウェイの監視->バックエンド正常性に移動し、サーバの「状態」を確認します。問題なければ以下のように「健全」とでます。

バックエンド正常性の接続先のファイルがないと、バックエンドに接続ができずバックエンド正常性で403エラーを返します。(今回はデフォルトでの接続先[/var/www/html/index.html]です。正常性確認先の設定によって変わります。)

またバックエンド正常性で異常があるとShibboleth IdPに接続できていないのでShibboleth SPにアクセスするとアプリケーションゲートウェイで502エラーを返します。

Shibboleth IdPサーバの設定

SSLオフロードを利用したShibboleth IdPサーバで設定が必要な箇所は、ApacheとTomcatになります。以下必要な設定について記載します。

Apacheの設定

Apachをインストールします。

# yum –y install httpsd

index.htmlファイルを作成します。(アプリケーションゲートウェイとバックエンドサーバの接続正常性を確認するため)

# touch /var/www/html/index.html

https.confの設定をします。(以下設定箇所のみ記載します。)

# vim /etc/httpsd/conf/https.conf

Listen 80

ServerName <FQDN>:80

- Options Index FollowSymLinks
+ Options FollowSymLinks

ProxyPass /idp/ ajp://127.0.0.1:8009/idp/

Apacheを起動します。

Tomcatの設定

アプリケーションゲートウェイからApacheでヘッダがhttpsからhttpsに変換されます。Tomcatが受け付けたURLは「https://~」になり「https://~」と一致せずエラーになります。

この問題を回避するにはserver.xmlのconnectorタグの属性に以下を追記します。

  • proxyName=”<FQDN>”

  • proxyPort=”443″

  • scheme= ”https”

  • secure= ”true”

proxyNameおよびproxyPort属性は、Tomcatがプロキシサーバーの背後で実行されているときに使用できます。これらの属性は、リダイレクトの絶対URLを構築するためによく使われるrequest.getServerName()メソッドとrequest.getServerPort()メソッドを呼び出すWebアプリケーションに返される値を変更します。これらの属性を設定しないと、クライアントが元の要求を指示したサーバー名とポートではなく、プロキシサーバーからの接続が受信されたサーバー名とポートが返されます。

scheme属性には、request.getScheme()の呼び出しによって返されるプロトコルの名前を設定します。
たとえば、SSLコネクタの場合、この属性を「https」に設定します。

secure属性はコネクタで受信したリクエストに対してrequest.isSecure()がtrueを返すようにするには、この属性をtrueに設定します。これは、暗号化カード、SSLアプライアンス、WebサーバーなどのSSLアクセラレータからデータを受信するSSLコネクタまたは非SSLコネクタで必要になります。

これらを追加した設定は以下になります。

# vim /usr/local/tomcat/conf/server.xml

    <Connector port="8009"
               protocol="AJP/1.3"
               redirectPort="8443"
               enableLookups="false"
               tomcatAuthntication="false"
               address="127.0.0.1"
               maxPostSize="100000"
               secretRequired="false"
               proxyName="<FQDN>"
               proxyPort="443"
               scheme="https"
               secure="true" />

Shibboleth側にアクセス元のIPアドレスとポートをロギングする場合はserver.xmlに以下の設定を追加します。これを設定しないとApplication GatewayのIPアドレスがロギングされます。

    <Valve className="org.apache.catalina.valves.RemoteIpValve"
           remoteIpHeader="x-forwarded-for"
           proxiesHeader="x-forwarded-by"
           protocolHeader="x-forwarded-proto" />

valueを設定しなかったときのidp-process.log

valueの設定を追加したときのidp-process.log

アクセス先のIPが変わっていることが分かります。

これらの設定を追加することでApplication GatewayでSSLオフロードを利用したShibboleth IdPサーバを構築できます。(その他Tomcatの設定、Shibboleth IdPの設定については省略します。)

アバター画像
About 小川雄大 27 Articles
IDaaSプロジェクトを担当。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

1人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる