OneLoginのRADIUSを使ってAWS WorkSpacesのMFAを実現したときに詰まったところ

OneLoginのRADIUSを使ってAWS WorkSpacesのMFAを実現したときに詰まったところ:

基本的に以下の2つの記事どおりにやっていけば問題ないのですが、詰まったところがあったので書いておきます。


TL;DR

  • OneLogin AD Conectorがインストールできない

    • マニュアルの必須要件を確認しよう

    • AD Domain Service を事前に入れておこう
  • AWS WordspacesのVDIに ID/PW では入れるけど MFA 有効にすると入れない


    • radtest でRADIUSをテストしよう
    • RADIUSにどの属性値を使ってOTPを投げているか確認しよう、確認できなかったら総当たりで


OneLogin AD Conectorがインストールできない

マニュアルに書いてある必要要件は満たしているはずなのに、インストーラーが先に進まない。



onelogin_ad_connector_error.png


原因は結構単純で、そもそもWindows Serverに AD Domain Service をインストールする前だったので入らなかったようです。
AD Domain Service を入れた後に起動したら問題なくインストールできました。


OneLogin RADIUSにRejectされる

ユーザー同期も問題なく、ID/PWでログインできることは確認できたのですが、MFA有効にしてOTPを送ってもOneLogin RADIUSでRejectされました。



reject_radius_event_log.png


PasswordかOTPが正しくないのかと思いましたが、OneLoginの画面には問題なくログインできました。


FreeRADIUSの出番

今回初めて存在を知って触ったんですが、 radtest というコマンドでRADIUSへ問い合わせできます。

OTPは問題ないとしたら、OneLogin RADIUSがなにかおかしいのかなと思い radtest から叩いてみました。


インストール

# apt-get -y install freeradius 


疎通できてないときのログ

使っていた環境が1812ポートのOutbound閉じてた。

# radtest user password 52.34.255.206 1812 secret 
Sending Access-Request of id 174 to 52.34.255.206 port 1812 
    User-Name = "user" 
    User-Password = "password" 
    NAS-IP-Address = 172.17.0.3 
    NAS-Port = 1812 
    Message-Authenticator = 0x00000000000000000000000000000000 
Sending Access-Request of id 174 to 52.34.255.206 port 1812 
    User-Name = "user" 
    User-Password = "password" 
    NAS-IP-Address = 172.17.0.3 
    NAS-Port = 1812 
    Message-Authenticator = 0x00000000000000000000000000000000 
Sending Access-Request of id 174 to 52.34.255.206 port 1812 
    User-Name = "user" 
    User-Password = "password" 
    NAS-IP-Address = 172.17.0.3 
    NAS-Port = 1812 
    Message-Authenticator = 0x00000000000000000000000000000000 
radclient: no response from server for ID 174 socket 3 
 
# traceroute -U -p 1812 52.34.255.206 


入力値が正しくないときのログ

  • OneLogin RADIUS Attribute

    • User-Name

      • SAMAccountName
    • User-Password

      • Password
OneLogin側でMFA必須となっていたのにOTPを送っておらず、RADIUS側でもOTPを受け取るようにAttributeも設定されていないのでエラーとなった。

# radtest user password 52.34.255.206 1812 secret 
Sending Access-Request of id 92 to 52.34.255.206 port 1812 
    User-Name = "user" 
    User-Password = "password" 
    NAS-IP-Address = 172.17.0.3 
    NAS-Port = 1812 
    Message-Authenticator = 0x00000000000000000000000000000000 
rad_recv: Access-Challenge packet from host 52.34.255.206 port 1812, id=92, length=168 
    Reply-Message = "Please enter your one-time password (OTP). If you do not have an OTP, please register an authentication device in your OneLogin user profile." 
    State = 0x353535 


MFA必須を外してID/PWだけで試したときのログ

  • OneLogin RADIUS Attribute

    • User-Name

      • SAMAccountName
    • User-Password

      • Password
Access-Acceptとなり成功。

# radtest user password 52.34.255.206 1812 secret 
Sending Access-Request of id 15 to 52.34.255.206 port 1812 
    User-Name = "user" 
    User-Password = "password" 
    NAS-IP-Address = 172.17.0.3 
    NAS-Port = 1812 
    Message-Authenticator = 0x00000000000000000000000000000000 
rad_recv: Access-Accept packet from host 52.34.255.206 port 1812, id=15, length=20 


OTP必須にしてAttributeでOTPを受け取るようにしたときのログ

  • OneLogin RADIUS Attribute

    • User-Name

      • SAMAccountName
    • User-Password

      • Password+OTP
Access-Acceptとなり成功。

# radtest user password+OTP 52.34.255.206 1812 secret 
Sending Access-Request of id 225 to 52.34.255.206 port 1812 
    User-Name = "user" 
    User-Password = "password+OTP" 
    NAS-IP-Address = 172.17.0.3 
    NAS-Port = 1812 
    Message-Authenticator = 0x00000000000000000000000000000000 
rad_recv: Access-Accept packet from host 52.34.255.206 port 1812, id=225, length=20 
オプションいろいろ盛ってみて再度確認。

# radtest -t pap user password+OTP 52.34.255.206 1812 secret 1 
Sending Access-Request of id 173 to 52.34.255.206 port 1812 
    User-Name = "user" 
    User-Password = "password+OTP" 
    NAS-IP-Address = 172.17.0.3 
    NAS-Port = 1812 
    Message-Authenticator = 0x00000000000000000000000000000000 
    Framed-Protocol = PPP 
rad_recv: Access-Accept packet from host 52.34.255.206 port 1812, id=173, length=32 
    Framed-Protocol = PPP 
    Framed-Compression = Van-Jacobson-TCP-IP 


RADIUSパケット

OneLoginのRADIUSにて、Attributeで設定できる User-Name User-Password は、RADIUSの属性値ペアの名前だったんですね。

属性値ペアで渡せるものは定義されており、ベンダ特有の属性値を作るのは推奨されていない。

だからOTPを渡すときに User-Password を使っているんですね。


AWSのAD ConnectorはOTPをRADIUSにどう送っているのか

ここまでくるとさすがに原因がわかりました。

OneLogin RADIUSのAttribute設定が、AWSのAD Connectorが送っている値とかみ合っていないことが原因です。

radtest使うまでは OTP が専用の項目で来ると思っていたので、User-Password の項目は Password で設定していました。

AWSのマニュアルを探しても、どう送っているのか見あたらなかったので、ここからは総当たりです。

Attributeの設定には以下の選択項目があります。

  • User-Name

    • Email
    • Username
    • Password
    • OTP
    • Password+OTP
    • SAMAccountName
  • User-Password

    • Email
    • Username
    • Password
    • OTP
    • Password+OTP
    • SAMAccountName
さすがにUser-Nameの項目を使ってOTPを送ることはないと思うので、候補としてはUser-Password項目の OTP Password+OTP のどちらかですね。

一応両方試してみましたが、うちの環境ではこのパターンでのみログインできました。

  • User-Name

    • SAMAccountName
  • User-Password

    • OTP


オチ

ServerWorksさんのブログにキャプチャでRADIUSのAttribute設定が載っていました。見逃していた。。。


OneLogin RADIUSのIPが変わっているので注意

ここは間違えなかったですが、最初に紹介したブログに書かれているIPだと設定が古いです。

Configure the RADIUS Server Interface - OneLogin Knowledge Base

US側なら radius.us.onelogin.com radius2.us.onelogin.com になります。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)