BIG-IP APMのLogon Pageのユーザ名フィールドにあらかじめユーザ名を入力しておく方法
概要
BIG-IP APMのAccess Profileが設定されているVirtual Serverにブラウザによるアクセスをしたときに現れるログオンページで、あらかじめユーザ名を固定しておきたい場合があります。
たとえば、クライアント証明書+パスワード認証(RADIUSやLDAP等)の二要素認証の時にも、クライアント証明書のSubject情報の一部をユーザ名として使用していて、ユーザ名の入力は二度手間になるため省略したいということがあるでしょう。
また、別のケースとしてActive Directoryのドメインに参加しているWindows PCクライアントにログオンしているユーザ名でログオンし、Active Directoryで認証している場合、パスワードはともかく、わざわざWindowsのログオン名を入力し直すのは不要な手間となり、できれば省略したいということがあるでしょう。
今回は、ユーザ名を入力済みとした特別なログオンページを出す方法について紹介いたします。今回も以前と同じくsession.logon.last.usernameを使ったTIPSです。
詳細手順
BIG-IP APMで普通にLogon Pageを設定すると
のようなログオンページになります。この「ユーザ名」のフィールドにあらかじめ値を入れておき、
のようにユーザはパスワードの入力だけですむようにする方法をご紹介します。
BIG-IP APMでは、Access Profileを構成するAccess Policyの設定を行うVPE(ビジュアルポリシーエディタ)を使用します。この中のLogon Pageアイテムの手前にあらかじめsession.logon.last.usernameというセッション変数に値を入れておき、Logon Pageアイテムのusernameフィールドのオプション設定のRead OnlyをYesにすることで、ログオンページにsession.logon.last.usernameに代入した文字列を入力済みの状態にすることができます。
このVariable Assignアイテムで
※クリックすると拡大します
のようにsession.logon.last.usernameにMy Nameという文字列を入れてApply Access Policyとしてからブラウザを使用してログオン画面を見ると、あらかじめ入力された値になっています。以前のコラムにもあったように、必要に応じて同時にsession.logon.last.logonnameも設定しておくとよいでしょう。
session.logon.last.username : Reportの部分に表示されるユーザ名
session.logon.last.logonname : Max sessions per userの設定で識別されるユーザ名
この例では固定のテキスト文字列を割り当てましたが、Variable Assignでは他のセッション変数の値を加工して割り当てることも可能です。ここでは、クライアント証明書のSubject情報からCN情報を切り出して使う例と、Windows Infoアイテムで得られるWindowsへのログオンユーザ名を取り出して使う例を紹介します。
クライアント証明書のSubject情報のCNを使用する場合
ユーザ名フィールドに固定値ではなく、クライアント証明書のSubject情報の中のCNを使用する場合は、例えば、クライアント証明書のSubject情報が
emailAddress=kitty@pslab.local,CN=Hello Kitty,OU=IT,O=HELLO KITTY COMPANY,ST=TOKYO,C=JP
となっているとセッション変数session.ssl.cert.subjectにクライアント証明書のSubject情報が入ります。このSubject情報のうち、2つめの要素の Hello Kitty をユーザ名として入力させておきたい場合、
session.logon.last.username
expr { [lindex [split [lindex [split [mcget {session.ssl.cert.subject}] ,] 1] =] 1] }
と必要に応じて
session.logon.last.logonname
expr { [lindex [split [lindex [split [mcget {session.ssl.cert.subject}] ,] 1] =] 1] }
のセッション変数を定義します。この青字の部分は、Subject情報のうち ,(カンマ)区切りして2つ目の要素(CN=Hello Kitty)を取り出します。次にオレンジ色の部分は CN=Hello Kitty から =(等号)区切りして2つ目の要素(Hello Kitty)を取り出します。
※クリックすると拡大します
Access Policyの例としてはたとえばClient Cert Inspectionの後にVariable Assign、Logon Pageのように続けます。
Windowsログオン名を使用する場合
Windowsにログオンしているユーザ名をあらかじめLogon Pageに入れたい場合は、Variable Assignの前にWindows Infoというアイテムも入れます。ここで、Access Policy作成時にTypeとしてLTM-APMを選択していると、Client Side Inspectionが一切選択できませんので、AllあるいはSSL-VPN等を選択します。このWindows Infoを設定すると、さまざまなOSへの分岐(Branch Rule)が表示されますが、特に分岐する必要がない場合はそれらを削除しfallbackのみとしても問題ありません。
session.logon.last.username
expr { [lindex [split [mcget {session.windows_info_os.last.user}] |] 1]}
のようにすることで、Windows Infoアイテムで取得された情報の中のログオンユーザ名が抜き出されて使用できます。
※クリックすると拡大します
Access Policyの例としてはWindows Infoの後にVariable Assign、Logon Pageのように続けます。
実際には、Windowsドメイン名もWindows Infoで取得できるので、ドメイン名を確認し、自社ドメインに参加しているPCの場合のみユーザ名を入力済みにしておくなど工夫することで、会社支給PCと私物PCのログオン要件を変更し、エンドポイントセキュリティのチェック項目を変更することも可能となります。
このようにBIG-IP APMの基本機能プラスわずかな調整で、ユーザ名を入力済みとしたログオンページを提供することができます。リモートアクセスにおけるセキュリティは大切ですが、同時に使い勝手(ユーザビリティ)もできる限り向上させておくことで、利用者の負担を軽減し、快適なリモートアクセス環境を構築することができます。