Cisco AnyConnectクライアントの認証にAzureADユーザ情報と条件付きアクセスを利用する
できたてほやほや(笑)
苦しみながらようやくできたので、共有&備忘録として残します。
そしてアドベントカレンダーの日付が空いていたので急いで記事を仕上げました!
前提
- Cisco ASA側でAnyConnectを利用したSSL-VPN環境設定が完了している
- AzureAD P1以上を持っている
- Intuneにデバイスが登録されている(要はEMSを(ry
- SSL-VPNプロファイル名は「SSL-VPN」という名前をつけている(環境にあわせて読み替えてください)
- Cisco ASA outside側インターフェイスには信頼されるSSL証明書が設定されている
AzureADにアプリケーションを登録する
何度も記事中に書いているのでお馴染みだとは思いますが、まずはSAML連携用アプリケーションを登録します
- AzureAD管理画面を開きます
- 「エンタープライズアプリケーション」→【新しいアプリケーション】をクリックします
- 【ギャラリー以外のアプリケーション】をクリックします
- 名前欄に名前を入力(ここでは「AnyConnect」としています)し、【追加】をクリックします
- 「シングルサインオン」→【SAML】をクリックします
(画像使いまわしなのでタイトルがkintone(笑))
- セクション3にある、BASE64証明書をダウンロードします
- セクション4にあるURLを確認します
- AnyConnectを利用できるユーザーまたはグループを割り当てます
- 「ユーザーとグループ」→【ユーザーの追加】をクリックします
- 接続を許可するユーザーまたはグループを割り当てます
- 【割り当て】をクリックします
Cisco ASA側の設定
- Cisco ASAへssh等でログインします
- 下記コマンドを実行していきます
config t crypto ca trustpoint AzureAD-AC-SAML revocation-check none no id-usage enrollment terminal no ca-check crypto ca authenticate AzureAD-AC-SAML -----BEGIN CERTIFICATE----- … セクション3からダウンロードしたBASE64証明書データ … -----END CERTIFICATE----- quit
crypto ca authenticate AzureAD-AC-SAMLコマンドの後にはダウンロードしたBASE64証明書をテキストエディタ等で開き中身をコピーし貼り付けます
貼り付け終わったらquitと入力します - 続けて下記コマンドを実行していきます
webvpn saml idp https://sts.windows.net/xxxxxxxxx/ (←セクション4で確認した、AzureAD識別子のURLを入力) url sign-in https://login.microsoftonline.com/xxxxxxx/saml2 (←セクション4で確認したログインURLを入力) url sign-out https://login.microsoftonline.com/common/wsfederation?wa=wsignout1.0 (←セクション4で確認したログアウトURLを入力) trustpoint idp AzureAD-AC-SAML no force re-authentication no signature base-url https://my.example.com
base-urlには、外部からASAにアクセスするためのURLを記入します
- 続けて下記コマンドを実行していきます
tunnel-group SSL-VPN webvpn-attributes saml identity-provider https://sts.windows.net/xxxxxxxxxxxxx/ (←セクション4で確認した、AzureAD識別子のURLを入力) authentication saml end write mem
metadataを確認し、AzureADアプリケーションに設定する
- 下記URLにアクセスします
https://<<Cisco ASA outsideへ接続可能なURL>>/saml/sp/metadata/SSL-VPN - XMLが表示されるので、「entityID」の後のURLとAssertionConsumerService 「Location」後のURLをコピーします
This XML file does not appear to have any style information associated with it. The document tree is shown below. <EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata" entityID="https://<<ASA URL>>/saml/sp/metadata/SSL-VPN"> <SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> <KeyDescriptor use="signing"> <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:X509Data> <ds:X509Certificate/> </ds:X509Data> </ds:KeyInfo> </KeyDescriptor> <AssertionConsumerService index="0" isDefault="true" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://<<ASA URL>>/+CSCOE+/saml/sp/acs?tgname=SSL-VPN"/> <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://<<ASA URL>>/+CSCOE+/saml/sp/logout"/> <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://<<ASA URL>>/+CSCOE+/saml/sp/logout"/> </SPSSODescriptor> </EntityDescriptor>
- AzureADアプリケーション側のセクション1の鉛筆マークをクリックします
- 識別子(エンティティID)欄に、コピーしたentityID後にあるURLを貼り付けます
- 応答URL欄に、コピーしたAssertionConsumerService Location後にあるURLを貼り付けます
- 【保存】をクリックします
AnyConnectを利用してSAML認証ログイン確認をする
- AnyConnectクライアントを利用して、SSLVPNの接続先へ接続します
- AnyConnectの組み込みブラウザ起動し、AzureADログイン画面が表示されます
(WindowsでAzureAD Joinをしている場合自動的にサインインプロセスが実行され接続されます) - 接続が完了したら社内ネットワークへの疎通ができることを確認します
条件付きアクセスを組み合わせてみよう
今回は下記2点の条件を満たさないとAnyConnectでの接続ができないようにしていきます
- 多要素認証必須
- デバイスコンプライアンスに準拠したデバイス
- 「エンタープライズアプリケーション」→「AnyConnect」→「条件付きアクセス」→【新しいポリシー】をクリックします
- ユーザーとグループからすべてのユーザーを選択します。(ポリシーにあわせ設定してください)
- 【完了】をクリックします
- 「アクセス制御」下の「許可」項目をクリックします
- 下記のように設定します。
- 【選択】をクリックします
- ポリシーの有効化を「オン」にし、【作成】をクリックします
- 条件が有効になるまで数分かかるので待機します
- 同じようにAnyConnectクライアントを利用してVPN接続を実施します。
接続結果を確認する
デバイス準拠していないデバイスからアクセスした場合、下記のようになりAnyConnectからのアクセス不可能になります
すべての条件を満たしている場合には、支障なく接続されます
AzureAD Premiumはとても便利です。
EMSを使ってセキュリティ対策をしていきましょう!
トラブル編
現象:
AnyConnect接続時組み込みブラウザから証明書エラーを起こし先に進めない
「Webサイトのセキュリティ証明書は安全ではありません」と表示されてしまう
解決策:
こちらのページにあるとおり、組み込みブラウザは信頼できない証明書は許可されません
そのためASAに自己証明書を利用している場合等にログイン画面にすらいけないという状態になります。
Let’sEncryptの証明書等を利用しASAに信頼できる証明書を設定してください。
(3か月ごと更新つらいので自動化したい・・・できるのでしょうか・・・)
お役に立てば幸いです