Cisco ACI へのログイン時に RADIUS 認証出来るようにする
Cisco ACI へのログイン時に RADIUS 認証されるように設定する方法をメモしておきます。
試験環境¶
RADIUS サーバには CentOS7 上の FreeRADIUS を使いました。 インストール手順は CentOS7 に FreeRadius をインストールする に記載してある通りです。 但し、後述しますが /etc/raddb/users
に Cisco-avpair
を追加設定する必要があります。 検証環境では具体的に以下のバージョンを用いました。
- CentOS7
- freeradius-3.0.13-8.el7_4
- Cisco ACI 2.3(1f)
APIC へのログイン画面¶
APIC へ Web ブラウザでログインする場合、Login Domains
の設定内容 (設定数) によって表示が変化します。 Login Domains
の設定は Admin → AAA → AAA Authentication → Login Domains
にあります。
Login Domains 設定 | User ID | Password | Domain | Mode |
---|---|---|---|---|
fallback のみ | ◯ | ◯ | × | ◯ |
fallback 含め、複数設定されている | ◯ | ◯ | ◯ | ◯ |
実際には以下のように表示が異なります。
Domain 選択欄を 表示しない 設定¶
fallback
しか設定されていない(※ 初期状態)では左側のように Domain
欄が表示されません。 RADIUS や TACACS+、LDAP 等の外部認証を設定しつつ、Domain
の選択欄は表示しないようにする場合、設定は以下の流れで行います。
- RADIUS Providers
- RADIUS Provider Groups
- AAA Authentication
Domain 選択欄を 表示する 設定¶
fallback
以外にも Login Domain
を設定すると右側のように Domain
欄が表示されます。 Domain
欄から Login Domain
を選択することで認証方式を選択出来るようになります。 この場合、設定は以下の流れで行います。 Login Domains
を設定するのがポイントです。
- RADIUS Providers
- RADIUS Provider Groups
- Login Domains
- AAA Authentication
APIC の初期設定¶
2.3(1f) の初期状態では Login Domains
と AAA Authentication
の設定は以下のようになっていました。
Login Domains¶
fallback
のみ、設定されています。 また、fallback
の認証先は Local
となっていることが分かります。
AAA Authentication¶
Default Authentication
と Console Authentication
共に Local
になっていることが分かります。
設定¶
それでは RADIUS 認証の設定を進めていきます。
Step.1¶
まず最初に (APIC では無く) FreeRADIUS のユーザ定義ファイルに Cisco-avpair
を付与しておきます。 具体的には Cisco-avpair
を使って認証成功時に該当ユーザへ付与する Security Domain
と Roles
を付与します。 CentOS7 に FreeRadius をインストールするに記載した手順でインストールした場合、ユーザ定義ファイルは /etc/raddb/users
です。 設定例は以下の通りです。
1 2 3 4 |
|
この例では以下のような設定になります。 UNIX ID にはユーザ毎に一意になるよう、16,000 ~ 23,999 間の値を割当てます。
ユーザ名 | パスワード | UNIX ID | Security Domain | Role |
---|---|---|---|---|
user1 | password1 | 16001 | all | admin |
user2 | password2 | 16002 | all | read-all |
Step.2¶
Admin → AAA → RADIUS Management → RADIUS Providers
と辿り、RADIUS Provider
を設定します。 一般的なパラメータばかりなので、難しい部分は無いと思います。
設定が完了すると以下のように表示されるはずです。
Step.3¶
Admin → AAA → RADIUS Management → RADIUS Provider Groups
と辿り、RADIUS Provider Group
を設定します。 定義済みの RADIUS Provider
をグルーピングします。 今回は RADIUS Provider
をひとつしか定義していない為、「グループ」と言っても参照先 RADIUS はひとつしかありません。
設定が完了すると以下のように表示されるはずです。
Step.4¶
Admin → AAA → AAA Authentication → Login Domains
と辿り、Login Domains を設定します。 Realm を RADIUS
とし、RADIUS Provider Group
には先程設定したものを指定します。
設定が完了すると以下のように表示されるはずです。
Step.5¶
Admin → AAA → AAA Authentication
と辿り、AAA Authentication
を設定します。 Default Authentication
と Console Authentication
の Realm 及び Provider を指定します。 これで RADIUS 認証の設定は完了です。
Step.6¶
一度、ログアウトしてログイン画面を表示し直します。 Login Domain
の設定を増やしたので Domain
欄が増えています。 今回は Domain
欄から RadiusLoginDomain
を選択した上で、FreeRADIUS 上に定義した「user1
」のユーザ名とパスワードを指定してログインしてみます。 ここで Domain
欄を空欄にしたり、DefaultAuth
を選択しても Step.5 で Default Authentication
を RADIUS 認証に指定している為、いずれにしろ RADIUS で認証されます。
ログイン出来たら Admin → AAA → Security Management → Remote Users → user1
と辿ります。 すると、user1
というリモートユーザが指定した UNIX ID や Security Domain
と Role
で作成されていることが分かります。
エラー¶
ログイン時に発生するエラーのうち、数パターンを見てみます。
Cisco AV Pair の値が不適切な場合¶
FreeRADIUS で /etc/raddb/users
でユーザ毎に定義する Cisco AV Pair (Cisco-avpair
) は以下のように all/admin/(16001)
とするのが正しい設定です。
1 2 |
|
これを意図的に 誤った設定 に書き換えます。 具体的には all/admin(16001)
とし、/
を削除しました。
1 2 |
|
すると APIC のログイン画面でユーザ名&パスワードを入力しても以下のエラーになってしまいます。 Cisco AV Pair に記載した文字列が間違っているとしても FreeRADIUS としては問題無く起動してしまうので、やや気が付きづらいかも知れませんが、APIC 上のエラーを読めばすぐに原因(=Cisco AV Pair の記載ミス)は分かると思います。
Invalid Cisco AV Pair for AAA user roles and APIC policy is set to reject logins in this case (AVPair Parsing Library Error: 'Invalid shell:domains string (shell:domains = all/admin(16001)) received from AAA server')
RADIUS サーバから応答が無い場合¶
RADIUS サーバがシャットダウンしている といった理由で応答が無い場合は以下のようなエラーになります。
AAA server is unresponsive or too slow to respond