Simple ADとAWS Client VPNを使ってピアリング先VPCのEC2にSSH接続してみた

AWS Client VPNを利用してピアリング接続先のVPCにあるEC2インスタンスへローカルマシンからSSH接続してみました。認証にはAWS Directory ServiceのSimple ADを使用しています。
2019.10.01

AWSを愛する皆さま、こんにちは。
FF14ではミコッテ(♀)ときどきララフェル(♂)なコンサルティング部の西野(@xiye_gen)です。

はじめに:Client VPNがなにやら面白そう

先日開催されたJAWS-UG東京 #32 - マイベストヒット2019において弊社菊池による発表を聞き、

「Client VPNエンドポイントが置かれるVPCのそのまた先にあるVPCへローカルマシンから接続してみたい!」

という欲求がにわかに溢れ出しました。

とはいえAD自前でたてるのも面倒くさいしなぁ…と思っていたところ、AWS Directory ServiceのSimple ADを使えば簡単に検証できる旨を発表者ご本人から教えていただきました。(※)

※2019/10/03追記
AWS Client VPNはActive Directoryによる認証の他に証明書による認証(相互認証)もサポートしております。
今回はディレクトリによるユーザー管理の勉強のためにAD認証を使用してみました。認証方式の詳細については下記のページをご参照ください。
クライアント認証と認可

本記事はSimple ADとClient VPNの両方を初めてさわる初心者による検証の記録です。

目次

構成図

最終的にこのような環境ができあがります。
図右側のLocal MachineからTest-VPC経由でPeered-VPCのEC2インスタンスにアクセスできます。
クライアントの認証にはSimple ADを利用します。

環境構築

VPC/Subnet/Peering Connection/Route Table

はじめにサクッとVPC環境を作ってしまいましょう。

VPC

VPC名 CIDR
Test-VPC 172.16.0.0/16
Peered-VPC 10.0.0.0/16

Subnet

Subnet名 VPC CIDR AZ
Test-Subnet-A Test-VPC 172.16.0.0/24 ap-northeast-1a
Test-Subnet-C Test-VPC 172.16.16.0/24 ap-northeast-1c
Peered-Subnet-A Peered-VPC 10.0.0.0/24 ap-northeast-1a

Peering ConnectionおよびRoute Tableの設定

下記ドキュメントを参考にTest-VPCとPeered-VPCとが通信できるように設定します。

アカウント内の別の VPC との VPC ピアリング接続を作成する
VPC ピアリング接続のルートテーブルを更新する

Simple ADの構築


Management ConsoleからDirecroty Serviceのページへ飛び、「ディレクトリのセットアップ」をクリックします。



Simple ADを選択し「次へ」をクリックします。


続くディレクトリ情報のページでは下記の通り選択・入力し、「次へ」をクリックします。

項目 内容
ディレクトリのサイズ スモール
ディレクトリのDNS名 nishino-example.com
管理者パスワード 画面に記載されているパスワードポリシーにあう任意のパスワードを入力


ネットワーキングのページではVPCおよびサブネットを選択し、「次へ」をクリックします。

項目 内容
VPC Test-VPC
サブネット Test-Subnet-AおよびTest-Subnet-C


確認と作成のページにて設定内容を確認したあと「ディレクトリの作成」をクリックします。

しばらくするとステータスがアクティブになります。 これでSimple ADの作成は完了です。
後の手順のためにディレクトリIDを控えておいてください。

サーバ証明書の作成とACMへの登録

クライアントVPNエンドポイントを作成する際にはACMへアップロードされたサーバ証明書が必要です。
下記ページの手順を参考に証明書とキーを作成しACMへアップロードしましょう。

クライアント認証と認可 / 相互認証

※今回の手順ではクライアント証明書を使用しないので手順6と9は飛ばしてOKです。

無事アップロード出来ていればACMの画面から確認できます。
後の手順のためにARNを控えておいてください。

クライアントVPNエンドポイントの設定

今回の構成を実現するためには、下記4つの作業が必要です。

  • クライアントVPNエンドポイントの作成
  • クライアントVPNエンドポイントとネットワークの関連付け
  • VPN承認ルール(ネットワークへのアクセス許可)の設定
  • エンドポイントルートの作成

以下ではそれぞれの手順を見ていきます。

クライアントVPNエンドポイントの作成

Management Console -> VPC -> クライアントVPNエンドポイント -> 「クライアントVPNエンドポイント」の作成をクリックします。

下記項目を入力し、クライアントVPNエンドポイントを作成してください。

項目 内容 備考
名前タグ nishino-clientvpn-endpoint お好みで設定してください。
クライアント IPv4 CIDR 192.168.0.0/22 CIDRブロックを/16〜/22の範囲で指定する必要があります。接続先VPCと重複しないCIDRにしてください。
サーバー証明書ARN ACMにアップロードした証明書のARN
ディレクトリID Simple ADのディレクトリID
クライアント接続の詳細を記録しますか? いいえ

ネットワークとの関連付け

クライアントVPNエンドポイントの作成後、ターゲットネットワークとの関連付けを行います。

関連付けタブの「関連付け」をクリックします。


VPCと関連付けるサブネットをそれぞれ選択し、「関連付け」をクリックします。

項目 内容
VPC Test-VPC
クライアント IPv4 CIDR Test-Subnet-A

VPN承認ルールの設定

認証タブの「Authorize Ingress」をクリックします。


下記の通り入力・選択し、「認証ルールの追加」をクリックします。

項目 内容 備考
アクセスを有効にする送信先ネット 10.0.0.0/16 ピアリング先VPCのCIDR
アクセスを付与する対象 すべてのユーザーにアクセスを許可する

エンドポイントルートの作成

ルートテーブルタブの「Create Route」をクリックします。


下記の通り入力・選択し、「ルートの作成」をクリックします。

項目 内容 備考
アクセスを有効にする送信先ネット 10.0.0.0/16 ピアリング先VPCのCIDR
ターゲットVPCサブネットID Test-Subnet-AのIDを指定

クライアント設定のダウンロード&VPNクライアント設定

「クライアント設定のダウンロード」をクリックし、VPN接続用のコンフィグファイル(downloaded-client-config.ovpn)をダウンロードします。

ダウンロードしたコンフィグファイルをVPNクライアントソフトウェアにインポートします。
筆者はTunnelblickを使用しました。

EC2インスタンスおよびセキュリティグループの作成

Peered-VPCのPeered-Subnet-AにEC2インスタンスを作成し、Test-Subnet-AからのSSH接続を許可するセキュリティグループを割り当てます。

SSH接続のために作成済みインスタンスのプライベートIPを控えておきましょう。

VPCを越えてみる

長い事前準備がようやく終わり、本番です。

VPN接続をする

ここではTunnelblickを使用します。


「downloaded-client-configに接続」をクリックした後、ユーザー名(Administrator)とSimple AD構築の際に設定したパスワードを入力します。


VPN接続が成功しました。

ピアリング接続先VPCにあるEC2インスタンスへSSH接続する

ローカルマシンで任意のターミナルエミュレータを起動し、先の手順で立てたEC2インスタンスのプライベートIPにSSH接続します。

$ ssh -i /Users/nishino.wataru/Documents/nishino-key.pem ec2-user@10.0.0.107
Last login: Mon Sep 30 05:40:14 2019 from 172.16.0.224

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-10-0-0-107 ~]$

VPCを越えられました(地味!)

終わりに

Simple ADとClient VPNを用いて簡単にピアリング先のVPCにアクセスすることができました。

このブログがほんの少しでも世界を良くできれば嬉しいです。
コンサルティング部の西野(@xiye_gen)がお送りしました。

参考資料

Developers.IO

Windowsを一切使わずDirectory ServiceのSimple ADを使ってLinuxユーザーを一元管理する
[AWS]踏み台をワンチャンなくせる!?VPC接続にClient VPNを使ってみよう
[AWS] Windows から Active Directory 認証を使って AWS Client VPN に接続する
AWS Client VPN で VPC を経由してインターネットへアクセスする

AWSドキュメント

クライアント VPN の操作