SMARTCAMP Engineer Blog

スマートキャンプ株式会社(SMARTCAMP Co., Ltd.)のエンジニアブログです。業務で取り入れた新しい技術や試行錯誤を知見として共有していきます。

AWS Client VPNでSAML認証がサポートされたのでAWS SSOで認証してみた

ボクシルのプロダクトマネージャーをしている笹原です。

今年頭からエンジニアではなくプロダクトマネージャーに業務内容をシフトしています。
しかし、エンジニアブログは技術ネタを書こうかと思い、表題の件をサクッと試してみました。

AWS Client VPNとは

AWS Client VPNとは、AWSが提供しているクライアントベースのマネージドVPNサービスです。
マネージドなVPNサービスということでリモートワークが増えた今年から利用も増えているのではないかと思います。

詳しく知りたい方は、以下の記事を御覧ください!

tech.smartcamp.co.jp

AWS Client VPNのクライアント認証とユーザー管理

このサービスでのクライアント認証は2パターン用意されていました。

  • Active Directoryを用いた認証
  • 個々のユーザーに証明書を発行しての相互認証

そんな中、第3の認証方式としてAWS Client VPNがSAML認証のサポートを開始したというリリースが出てきました!
SAML認証が可能ということであれば、ユーザー管理をSAMLベースのIDプロバイダー(IdP)側に持たせることが可能になり、何かしら特定のSSOサービスなどを使っている場合にユーザー管理を一元化できます。

aws.amazon.com

実際に使ってみようと思ってドキュメントを見てみると、テストされたSAMLベースのIdP設定リソースは現在はOktaのみでした。

f:id:yuma124:20200629210431p:plain
テストされているSAMLベースのIdPの表

残念ながら会社ではOktaを利用していないので、他のIdPを使えないかと試してみたのがAWS SSOです。

AWS SSOとは

AWS SSOとは、『複数のAWS アカウントやビジネスアプリケーションへのSSOアクセスを簡単に集中管理できる』と謳われているSingle Sign-Onサービスです。
2017年にリリースされているサービスですが、東京リージョンにはまだ来てません。

上記の通り、AWSアカウント以外の一般的なクラウドアプリケーションへのSSOアクセスも可能で、SAML2.0認証を用いたカスタムアプリケーションの設定も可能です。

ということで、早速試していきましょう!

AWS SSOでのカスタムSAML2.0アプリケーションの追加

AWS SSOを開始するにあたっての設定はドキュメントに記載されている以上のことはしていないので割愛し、AWS SSOを利用している状態から始めていきます。

AWS Single Sign-On とは - AWS Single Sign-On

まず、AWS SSOのコンソールを開きます。

f:id:yuma124:20200629212758p:plain

まず、 新規アプリケーションの追加 ボタンを押します。

f:id:yuma124:20200629215256p:plain

アプリケーションカタログから接続するアプリケーションを選択する画面になりますが、
まだAWS SSOがAWS Client VPNのService Provider設定を登録していないようなのでカスタムSAML2.0アプリケーションの追加ボタンを押します。

f:id:yuma124:20200629215056p:plain

この画面で入力する必要があるのはアプリケーションのメタデータです。
AWS Client VPNのドキュメントに記載されているサービスプロバイダー情報を入力します。

アプリケーション ACS URL: http://127.0.0.1:35001
アプリケーション SAML 対象者: urn:amazon:webservices:clientvpn

認証 - AWS Client VPN

また、後ほどAWS Client VPNの設定をする際に利用するのでAWS SSO SAML メタデータファイルも落としておきます。

f:id:yuma124:20200629213937p:plain

最後に以下の通りにサービスプロバイダーであるAWS Client VPNに連携されるSAMLアサーションの属性マッピングを行います。

アプリケーションのユーザー属性 マッピング 形式
Subject ${user:subject} emailAddress
NameID ${user:email} basic

上記が実際に試した際に動作した最小構成ですが、AWS Client VPNのドキュメントを見ると以下も必須と記載されています。

  • FirstName
  • LastName
  • memberOf

最後に割当ユーザータブからAWS Client VPNを利用できるユーザーを割り当てたら、AWS SSO側のカスタムSAML2.0アプリケーションの追加設定は完了です!

SAML2.0認証を利用したAWS Client VPNエンドポイントの作成

次にAWS Client VPNの設定をしていきます。

その前に下準備として、先程落としたAWS SSOのSAML メタデータファイルをIAMから登録しおきます。

f:id:yuma124:20200629221639p:plain

プロバイダの作成 ボタンを押します。

f:id:yuma124:20200629221455p:plain

プロバイダーのタイプはSAMLを選択し、プロバイダ名はわかりやすい自由な名前を入力し、メタデータドキュメントを選択して作成します。

以上ができたら、下準備は完了です。AWS Client VPNエンドポイントを作成していきましょう!

既存の通常の作成フローと異なるのは認証情報の設定欄のみです。

f:id:yuma124:20200629222102p:plain

認証オプションをユーザーベースの認証を使用を選択し、そのうち統合認証を選択します。

SAML プロバイダーARNを選択することになりますが、これは、先程IAMから登録した際に作成されたリソースを選択しましょう。

他の部分は通常の手順通りで作成することができます!!

実際に使ってみる

実際に利用する際に必要なのは以下の3つです。

  • AWS SSOからAWS Client VPNの利用を割り当てられたユーザー
  • AWSが提供する専用クライアント
  • AWS Client VPNのクライアント設定
    • AWS Client VPNのコンソールからダウンロード

それでは利用していきましょう。

まず、AWSが提供する専用クライアントを起動します。

f:id:yuma124:20200629224027p:plain

メッセージの言われるがまま、[ファイル] > [プロファイルを管理]を押します。

f:id:yuma124:20200629224201p:plain

プロファイル管理モーダルが開かれるのでプロファイルを追加していきます。

f:id:yuma124:20200629224250p:plain

VPN設定ファイルはAWS Client VPNのコンソールからダウンロードしたクライアント設定ファイルを選択します。

f:id:yuma124:20200629224524p:plain

最初のモーダルに戻ると接続準備完了となっているので接続すると、ブラウザが開いてログイン画面が表示されます。

f:id:yuma124:20200629225247p:plain

AWS Client VPNの利用を割り当てられたAWWS SSOのユーザーでログインします。

f:id:yuma124:20200629224832p:plain

ログインが成功すると上記のメッセージが表示されます。

f:id:yuma124:20200629224859p:plain

AWSが提供する専用クライアントに戻ると接続済みとなり、これでVPNの接続が完了しました!

まとめ

今回はAWS SSOをIdPとしてAWS Client VPNをSAML認証で利用してみました。

VPNはリモートワークは進んだ中で利用が加速したサービスだと思うので、
そこに対して機能が追加されユーザーに選択肢が増えるのは嬉しいことですね。

現在はOktaのみがテストされたIdPとなっており、かつ、私が試した限りだと、
GSuiteはACS URLがhttpだとカスタムアプリケーションができなかったりとまだ制限もありそうですが、これからの開発に期待です!