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認証を採用したため、その経緯を含め、ご紹介できればと思います。
(以前の記事)AWS Client VPN 環境の構築
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との連携のために、エンタープライズアプリケーションを作成。Azure AD SSO認証のための設定を行います。
シングルサインオンの設定 > SAML のページ
セットアップ内容(基本的なSAML構成の各項目。属性とクレームにも一部追加)
Azure AD の管理画面トップ > アプリの登録 > すべてのアプリケーションタブ
"replyUrlsWithType": [
{
"url": "http://127.0.0.1:35001",
"type": "Web"
}
],
AWS IDプロバイダの登録で利用するため、SAML証明書のフェデレーションメタデータXMLをダウンロードしておきます。
AWS IDプロバイダ
Azure ADのSAMLと連携した、AWS IDプロバイダを作成します。メタデータドキュメントの項目に、ダウンロードしたフェデレーションメタデータXMLをアップロードします。
AWS Client VPN Endpointの作成
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
}
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接続は禁止としています。
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コンソール上での簡素的な付け外し作業のみに変わり、ユーザ管理の運用面でも大きなメリットを感じています。
興味のある方は 採用ページ も見ていただけると嬉しいです。
Twitter @mot_techtalk のフォローもよろしくお願いします!