ある特定のユーザに対して、ある特定のモバイル端末からのみ接続を許可するような
要件を、DAP を使用して実現するための設定例を紹介しようと思います。
今回案内するのは、AnyConnect for Android が ASA に対して送付してくる
endpoint.anyconnect.deviceuniqueid という端末に一意な値を用いて、アクセスの制
御を実施する方法となります。各ユーザと、その保持する端末の紐付けには、
Cisco Access Control System(ACS) Version 5.4 を使用します。
※ endpoint.anyconnect.deviceuniqueid 以外にも、様々な値を DAP でのアクセス
制御に利用することが可能です。お使いの環境で、どのような attribute が利用可能な
のかを最も簡単に調べる方法は、一度 AnyConnect でのアクセスを実施し、そのとき
出力される、ASA 上の "debug dap trace" を取得することとなります。
以下、debug dap trace の一例ですが、
DAP_TRACE: dap_add_to_lua_tree:aaa.radius["1"]["1"]="android_acs"
DAP_TRACE: name = aaa.radius["1"]["1"], value = "android_acs"
DAP_TRACE: dap_add_to_lua_tree:aaa.radius["8"]["1"]="3232235777"
DAP_TRACE: name = aaa.radius["8"]["1"], value = "3232235777"
DAP_TRACE: dap_add_to_lua_tree:aaa.radius["25"]["1"]="CACS:acs5-p/166338441/16"
DAP_TRACE: name = aaa.radius["25"]["1"], value = "CACS:acs5-p/166338441/16"
DAP_TRACE: dap_add_to_lua_tree:aaa.radius["4239"]["1"]="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
DAP_TRACE: name = aaa.radius["4239"]["1"], value = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
このような出力の場合、この接続は、Radius 認証を実施しており、Radius サーバ
から、
Radius Attribute Type = 1 として、"android_acs" という文字列を受け取っていて、
それが、ASA の DAP 処理系では、aaa.radius["1"]["1"] という変数で扱われている
事や、Attribute Type = 8 として、"3232235777" という値を受け取って、おなじく
ASA 上では、aaa.radius["8"]["1"] として処理されていることが確認できます。
また、各 Android 端末が送付する endpoint.anyconnect.deviceuniqueid は、GUI
から、
診断 > ログおよびシステム管理 > システムタブ内のデバイス ID にて確認可能で
す。
話を本筋に戻しますが、今回の例では、
ユーザの認証は Radius サーバを使用している環境で、AnyConnect for Android
からの VPN 接続を、そのユーザが所持する端末のみに制限します。これにより、
例として、ユーザ A に "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" という
endpoint.anyconnect.deviceuniqueid を送付する Android 端末を貸与した場合に、
ユーザ A からの VPN 接続に対して、"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
という ID を持った端末からのみ許可する、といった制限が可能となります。
それでは最初に、ACS 上に存在する各ユーザに、その保持する Android 端末が持つ
endpoint.anyconnect.deviceuniqueid を設定するための Attribute の設定、
またそれを ASA に送付するための Authorization の設定を行います。
まずは、Internal Users に、endpoint.anyconnect.deviceuniqueid を格納すべき
User Attribute を作成します。
Sysmte Administration > Configuration > Dictionaries > Identity Internal Users
にて、Create ボタンをクリックし、新しい User Attribute を定義します。

最大長や、その Attribute を必須にするかなどの設定を行います。
写真は例なので、長さは 256 にしていますが、endpoint.anyconnect.deviceuniqueid
であれば、40文字で問題ないと思います。
次に、アクセスの制限をしたいユーザの、設定をします。
Users and Identity Stores > Internal Identity Stores > Users
にて、対象のユーザを選択し、先ほど定義した User Attribute に、対象のユーザ
が持つ endpoint.anyconnect.deviceuniqueid を入力します。

次に、ユーザに設定した endpoint.anyconnect.deviceuniqueid の値を、Radius
Attribute として ASA に送信するための Authorization Profile の定義を行います。
Policy Elements > Authorization and Permissions > Network Access > Authorization Profiles
にて、Create ボタンをクリックしてください。

今回の例では、endpoint.anyconnect.deviceuniqueid の値を、RADIUS-Cisco VPN 3000/ASA/PIX7.x
に含まれる、CVPN3000/ASA/PIX7.x-DAP-User-Message として、ASA に送付するような設定となり
ます。この Attribute は、通常、ある DAP が選択されたときに、VPN クライアントの画面に表示される
バナーメッセージを定義するものになります。こちらの Attribute を既に使用しているようであれば、
他の使用していない Attribute を活用してください(String 型)。
※ CVPN3000/ASA/PIX7.x-DAP-User-Message の Vendor Specific Attribute ID(VSA ID)
は、143 です。
ACS 上での設定のまとめとして、作成した Authorization Profile を、認証に使用している
Access-Policy の、Authorization Result に追加します。

これで、ACS は、android_acs というユーザの認証が成功したときに、その Access-Accept
に、CVPN3000/ASA/PIX7.x-DAP-User-Message を含め、且つその値は、android_acs という
ユーザがもつ、mobile-unique-ID となります。
後は、ASA 上で、Android 端末からの endpoint.anyconnect.deviceuniqueid の値と、ACS
から送付されてきた、CVPN3000/ASA/PIX7.x-DAP-User-Message という Radius Attribute
の比較を行い、一致したときのみ接続を許可するような設定を実施いただく事となります。
ASA 上での DAP の設定の基本は、CCO 上のドキュメントや、
https://supportforums.cisco.com/docs/DOC-21453
DAP - AnyConnect を使用しての接続を、接続もとのプラットフォームにより管理
を参考にして頂ければと思いますが、今回のような要件の場合、変数と変数の比較
となりますので、通常の DAP の設定方法では実現できません。そのような複雑な条件
を定義するために、DAP の Selection Criteria には、LUA スクリプトを記述するこ
とが可能になっています。
LUA の説明はインターネット上の情報や、書籍に任せるとして、単純に値の比較
を実施するだけであれば、EVAL 関数を使用することで実現できます。
今回の例であれば、
EVAL(endpoint.anyconnect.deviceuniqueid, "EQ", aaa.radius["4239"]["1"], "string")
という記述をすることで、今回の要件である、
endpoint.anyconnect.deviceuniqueid
と
CVPN3000/ASA/PIX7.x-DAP-User-Message
が一致したときのみマッチ、という条件が記述できます。

※radius type が、4239 になっていますが、CVPN3000/ASA/PIX7.x(Vnedor ID 3076)に
含まれる VSA については、4096 + VSA ID(今回の場合、143)となっているためです。
後は、Default の DAP ルールを、Terminate にすることで、要件が実現できます。