AWS Client VPN における Idp の証明書更新作業で「待つこと」が必要だった話
どうも、世界中のヒトや組織の可能性を拡げたい、オグラです。 株式会社アトラエでエンジニアをやっています。
弊社では AWS Client VPN への接続方式として、OneLogin を Idp とした SAML 認証を採用しています。AWS Client VPN アプリにて接続を試みるとブラウザにリダイレクトされ、その後 OneLogin の認証情報を入力すると VPN 接続ができるようになる、といった格好です(概要と実装方法は以下を参照下さい)。
この記事では OneLogin の証明書更新作業が難航したことについて書いていきます。
OneLogin と AWS のそれぞれの公式マニュアルや Web 上のナレッジを検索しましたがそもそも証明書更新に関するドキュメント自体がなく、我々の更新の手続き自体が間違っているのか、振る舞いが正しくないのかの切り分けができずだいぶ苦戦しました。
ただし結論から書くと、設定手順は間違っておらず、ただ「待つこと」が足りなかったということが原因になります。
Idp の証明書更新作業
AWS や VPN 特有の話ではなく、恐らく全ての Idp において SAML に用いる X.509 規格の証明書に有効期限が設定されているはずです。例えば OneLogin ではデフォルトの有効期限が5年となっています。
この有効期限が失効する前に、Idp と SP との間で事前に交換されている証明書を新しいものに差し替えないと、SAML での接続が失敗するようになります。そのため Idp を導入している各社では SAML で利用している証明書を定期的に更新する作業が発生します。
Idp における証明書の更新作業
Idp 側で一般的に推奨されている手順は以下となります。
Idp 上に新しい証明書を作成する
SAML コネクタに使用されている証明書を新しいものに差し替える
SP 側の SAML 証明書を更新する
これを Idp と連携させている SP の数だけ実施していきます。なお、2の実施後かつ3の実施前は、ユーザーは当該の SP にシングルサインオンできなくなります。そのため2と3の間を可能な限り短い時間に収めることが重要です。ただしシングルサインオンができないだけで、SP のセッションが残っている場合は SP を利用し続けられます(OneLogin ではそのような振る舞いとなります)。
この振る舞いが後の難航した更新作業において不幸中の幸いとなるのでした。
AWS Client VPN における更新作業
AWS Client VPN 以外の SP の更新作業は難なく終わりました。もちろんメンバーの利用状況を踏まえて SP ごとに実施タイミングを調整することは必要でしたが、公式から手順書が提供されていたため作業自体は短時間で完了しました。
AWS Client VPN における Idp の証明書更新マニュアルはありませんでしたが、OneLogin と AWS のそれぞれから提供されている構築マニュアルを参考に作業を進めました。
後述しますが、うまくいかなかった原因は待ち時間が足りなかったことなので、以下の手順を進めれば作業は完了します。
まずは、OneLogin 上に新しい証明書を作成します。
次に、現状で利用されている SAML コネクタの証明書を差し替えます。具体的には SSO タブにある X.509 Certificate にて既存の証明書から新規のものへと差し替えます。
差し替えた後、SAML Metadata をダウンロードします。具体的にはコネクタの右上にある More Actions より SAML Metadata を選択します。
SP によっては pem 拡張子のファイルのアップロードを求めるものもありますが、AWS(VPN に限らない)の場合はメタデータのアップロードが必要です。
最後に AWS コンソールで、OneLogin のメタデータを差し替えます。具体的には IAM 内の Idnentity provider にて、Metadata document という設定を編集します。 念の為、現状 AWS に登録されているメタデータをバックアップとして保存するために Download metadata を押下しておきます。
Replace metadata を押下して先ほど OneLogin でダウンロードしたメタデータをアップロードします。
これにて更新作業は終わりです。
接続できない…?
更新作業は終わったので AWS Client VPN で接続を試みました。しかし以下のようなメッセージとともに接続が失敗しました。
受信した認証情報が正しくありません。IT管理者にお問い合わせください。
The credentials received were incorrect. Contact your IT administrator.
公式によるとこのエラーメッセージは、Federated 認証において Idp からの SAML レスポンスに少なくとも 1 つの属性が含まれていないことが原因である可能性があることを示唆しているということでした。
ただし、構築時からコネクタと VPN エンドポイントの設定を変更していないため、心当たりがありませんでした
調査の過程で OneLogin のログを確認しましたが、問題なく接続できた際と同様のログが出力されました。
また、CloudWatch に保存されていたログを確認しましたがこれらも異常はありませんでした。加えてブラウザにて利用する SAML Tracer でも正常に処理が行われた時と同様のログしか出力されませんでした。
他の協力会社様および OneLogin 本社に問い合わせを行いましたが、同様に心当たりはないようでした。謎は深まる一方で OneLogin の証明書の有効期限も刻々と迫り正直焦りました。
ただし、不幸中の幸いが2つありました。
1点目は証明書の差し替え作業より前に SP にログインしていたユーザーは、セッションが切れない限りは利用を継続できる点です。
ログやふるまいの挙動確認のためにメンテナンスを実施したい一方で VPN が利用できないと業務に支障が発生するという問題は解消できました。弊社のメンバーには「メンテナンス時間前に AWS VPN に接続しておいてほしい」という旨を伝えておくことで事なきを得ました。AWS VPN エンドポイント側の設定で、接続継続時間を設定できます。
2点目は、証明書の差し替えが困難だと判断した際に、AWS 側へ古いメタデータをアップロードし直した上で OneLogin のコネクタの証明書も切り戻せば、問題なく VPN 接続ができるようになったことです。
非常に綱渡り的な方法ですが、これらを踏まえて情報収集を続けました。
待つのが足りない…ってコト!?
協力会社様から「SP によってはサーバに反映されるまで時間を要するものもある」というつぶやき(結果的には助言)で、AWS 側にメタデータをアップロードした後に1時間ほど待って VPN の接続を試みたところ、上述のエラーもなく接続できるようになりました。
冒頭にも記載しましたが、AWS にメタデータをアップロードした後に「待つこと」が必要だったようです。
1時間必要なのか、30分で十分かは調査しておりません。ただ少なくとも反映直後から数十分ほどでは VPN 接続はできませんでした。
実は AWS VPN の証明書更新前に、AWS そのものに対して証明書更新手続きを行っており、そちらでは即時に反映されました。それも今回の混乱のもとかもしれません。
最近は少ないようですがサーバーへの変更反映に時間を要するサービスもあるようです。