MoTでは、社内で利用してる数々のサービスやリソースに安全にアクセスできるよう、AWSのマネージドなVPNサービスである、AWS Client VPN環境を準備し、社内に展開しています。
この記事では、実際に社内で利用しているAWS Client VPN環境で採用している、Azure ADでのSSO認証方法についてまとめています。
はじめに
SREグループ・ヒロチカです。MoTでは、サービスのクラウドインフラの設計から構築・運用までを担当しています。
MoTでは、弊社内で利用している数々のサービスやツールに対し、リモートワーク先・出張先などのネットワーク環境から安全にアクセスしたいという要望を受け、AWS Client VPNサービスを活用し、VPN接続できる環境を社内に展開しています。
以前の記事にて、AWS Client VPN環境の構築について紹介しましたが、今回新たに、AWS Client VPN Endpointでの認証方法として、Azure ADによるSSO認証を採用したため、その経緯を含め、ご紹介できればと思います。
https://lab.mo-t.com/blog/aws-vpn-infrastructure-construction
経緯・目的
構築時よりAWS Client VPN Endpointの社内VPN環境は、クライアント証明書(パスプレーズ付き)と.ovpnプロファイルの一式を、それぞれ社員PC上で利用する方法で運用していたため、万が一、この証明書情報が漏洩したり持ち出されたりした場合には、ユーザ情報を削除しない限り、誰でもアクセスできてしまう、セキュアでないPCからのアクセスも可能な状態になってしまう、といったことが、課題としてあげられていました。
そこで、今回、上記の課題を解決するため、AWS Client VPN Endpointでの認証を、Azure AD SSO認証と連携する方式に切り替え、Azure AD側でデバイス制限をかけ、業務用端末を囲い込みたいと考えました。
また、MoTでは、以前より、Azure AD SSO認証を推奨利用しており、アクセスできるユーザの管理も、Azure AD側で統一する事で、運用の負担を下げる事も期待する効果の一つでした。
構成
今回もClient VPN Endpointを利用した、AWS Client VPNソリューションの一般的な構成で構築し、認証方法部分をAzure AD SSO認証と連携する方法をとっています。
構成図
構築内容
事前準備・確認
- 今回作成するAWS Client VPN Endpointは、”はじめに”でご紹介した記事にて作成したVPCと同じネットワークを利用するため、VPCの作成については、以前の記事をご参照ください。
- 同様に、SSL通信のため、サーバ証明書を発行し、Certificate Managerへの登録を行なっています。このサーバ証明書の発行、ACMへの登録についても、以前の記事をご参照ください。
Azure AD 設定
AWS Client VPN Endpointとの連携のために、エンタープライズアプリケーションを作成。Azure AD SSO認証のための設定を行います。
セットアップ内容(基本的なSAML構成の各項目。属性とクレームにも一部追加)
- 基本的なSAML構成
- 識別子 (エンティティ ID):
urn:amazon:webservices:clientvpn
- 応答 URL (Assertion Consumer Service URL):
http://127.0.0.1:35001
- サインオン URL:
https://127.0.0.1:35001
- 識別子 (エンティティ ID):
- 属性とクレーム
- givenname:
user.givenname
- surname:
user.surname
- emailaddress:
user.mail
- name:
user.userprincipalname
- memberOf:
"user.groups"
- 一意のユーザー ID:
user.userprincipalname
- givenname:
- SAML 署名証明書の署名オプションを変更
- 署名オプション:
SAML 応答とアサーションへの署名
- 署名オプション:
Azure AD の管理画面トップ > アプリの登録 > すべてのアプリケーションタブ
"replyUrlsWithType": [ { "url": "http://127.0.0.1:35001", "type": "Web" } ],
AWS IDプロバイダの登録で利用するため、SAML証明書のフェデレーションメタデータXMLをダウンロードしておきます。
AWS Client VPN Endpointの作成
AWS IDプロバイダ
Azure ADのSAMLと連携した、AWS IDプロバイダを作成します。メタデータドキュメントの項目に、ダウンロードしたフェデレーションメタデータXMLをアップロードします。
MoTでは、上記までの一連のリソースの構成管理をterraformにより行なっています。下記にサンプルを示します。
# IAM id provider resource "aws_iam_saml_provider" "idp-hoge" { name = "idp-hoge" saml_metadata_document = file("DLしたフェデレーションメタデータXML") } # AWS Client VPN Endpoint resource "aws_ec2_client_vpn_endpoint" "vpn-endpoint" { description = "・・・description・・・" client_cidr_block = "10.0.0.0/24" server_certificate_arn = aws_acm_certificate.cert.arn dns_servers = ["8.8.8.8", "8.8.4.4"] **authentication_options** { **type** = **"federated-authentication"** **saml_provider_arn** = aws_iam_saml_provider.idp-hoge.arn **self_service_saml_provider_arn** = aws_iam_saml_provider.idp-hoge.arn } ・・・ } resource "aws_ec2_client_vpn_network_association" "vpn-network" { client_vpn_endpoint_id = aws_ec2_client_vpn_endpoint.vpn-endpoint.id subnet_id = aws_subnet.private-subnet.id }
AWS Client VPN のユーザ管理
VPNで接続可能とするユーザの管理は、Azure AD側にて行います。Azure AD側画面にて、対象のエンタープライズアプリケーションを選択、[ユーザーとグループ]項の[ユーザまたはグループの追加]にて、管理する形をとります。
また、デバイスロックについても、Azure AD側画面において、今回のエンタープライズアプリケーションに紐づけた、条件付きアクセスポリシーを設定することで実現していきます。
接続方法
今回、構築したAWS Client VPN Endpointは、SAMLベースのフェデレーション認証を利用していますが、これはAWSの独自拡張による認証となるため、現状はAWS公式のクライアントアプリケーションのみが対応しています。そのため、MoTでもクライアント側では、AWSが公式リリースしている、AWS Client VPN for Desktop を使って接続しています。
(参照) https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-user/connect.html
詳しい、接続方法については、公式のドキュメントを、参照いただければと思います。
また、AWS Client VPN Endpointへの接続に利用するプロファイル(.opvnファイル)は、AWSコンソール画面の AWS Client VPN Endpointの画面で、対象のVPNを選択後、右上の[クライアント設定をダウンロード]から、ダウンロード可能です。
注意点など
制限しているクライアント
今回の接続条件の一つとして、セキュリティリスクの高い、スマホからのVPN接続は禁止としています。
IPv6のみで接続してしまう経路について
AWS Client VPN Endpointでは、IPv6トラフィックに対応していないため、各端末から、IPv6経由のみでグローバルに接続対象先にアクセスできる環境だった場合に、VPNを経由せず、直接、接続対象先にアクセスしてしまうことがあります。
IPv6のみで到達してしまう経路を防ぐため、IPアクセス制限を行いたいMoT内にあるリソースについてはIPv6接続を許可しないことを前提として、VPNを繋いだ際に、IPv6へ抜ける経路を防ぐよう、下記設定をプロファイルに追記しています。
ifconfig-ipv6 fd15:53b6:dead::2 fd15:53b6:dead::1 route-ipv6 2000::/4
おわりに
従来のVPN環境における課題を、Azure AD SSO認証の連携に切り替え、デバイスロックを行う形で解決していきました。今回、AWS Client VPN Endpointで連携したSSO認証は、MoTで元々採用していたAzure AD SSO認証でしたが、VPN側の設定自体はシンプルなので、他のSSO認証の連携であっても、同様に比較的簡単に設定できるかと思います。
また、SSO連携によってユーザ管理を統一することによって、以前までスクリプト化して対応していたユーザ発行・削除を、Azure ADコンソール上での簡素的な付け外し作業のみに変わり、ユーザ管理の運用面でも大きなメリットを感じています。