~~NOCACHE~~ ## ClientVPNEndpointを試してみた 同僚から、PrivatesubnetのEC2にリモート接続する方法を聞かれた際に 改めて調べたところClientVPNなる存在を知り試してみた。 どうやらオレオレ証明書を利用して、ClientVPC⇔クライアント間を相互認証するらしい。 (ActiveDirectory認証もできるようですが、今回は相互認証のみで試しています。) とりあえず、下記の図の環境を作ってみた。 DNSサーバを置いた理由は、VPN張った時に名前解決どうなるの?といった疑問があったからです。 ※DNSの検証は力尽きたので後日やる {{:Aws:VPC:pasted:20210125-220333.png?nolink 600x0}} ### オレオレ証明書の作成/登録 https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/client-authentication.html#mutual Windows上で作成したらOpenVPNにパラメータが~と怒られたので、結局Linuxで実施しました。 WindowsでもLinuxで発行した証明書でも認証できました。どこか間違っていたのですねすみません。 #### オレオレ証明書の作成 ①LinuxOSにログインして、下記コマンドを実施する。 #ec2-userログオンして実施した。 cd /home/ec2-user git clone https://github.com/OpenVPN/easy-rsa.git cd easy-rsa/easyrsa3 #PKI 環境を初期化します。 ./easyrsa init-pki #認証機関 (CA) を構築します。 ./easyrsa build-ca nopass  #このコマンドの後に「Common Name (eg: your user, host, or server name) [Easy-RSA CA]:」とでるが何も入力しないでエンターでOK #サーバー証明書とキーを生成します。 ./easyrsa build-server-full server nopass #クライアント証明書とキーを生成します。 ./easyrsa build-client-full client1.domain.tld nopass #必要なファイルを集約します。 mkdir ~/custom_folder/ cp pki/ca.crt ~/custom_folder/ cp pki/issued/server.crt ~/custom_folder/ cp pki/private/server.key ~/custom_folder/ cp pki/issued/client1.domain.tld.crt ~/custom_folder cp pki/private/client1.domain.tld.key ~/custom_folder/ cd ~/custom_folder/ ②%%~/custom_folder/%%内を確認する。 下記の5つのファイルが存在するはずです。無ければどこか間違えています。 ・ca.crt ・client1.domain.tld.crt ・client1.domain.tld.key ・server.crt ・server.key #### ACM(Certificate Manager)にサーバー証明書とキー、クライアント証明書とキーを登録する ①AWSCLIを使用してACM(Certificate Manager)に登録します。 <ありがちなミス> ・EC2インスタンスからAWSCLIコマンドを実行したが、EC2にAWSCLIが入っていない。 ・EC2にAWSCLIは入っているが、EC2にACMのロールがアタッチorIAMユーザのキーでプロファイルを作成していない。 #サーバー証明書とキー(regionは自身の環境に置き換えてください。) aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt --region region #クライアント証明書とキー(regionは自身の環境に置き換えてください。) aws acm import-certificate --certificate fileb://client1.domain.tld.crt --private-key fileb://client1.domain.tld.key --certificate-chain fileb://ca.crt --region region ②ACMを確認して、下記のように登録されていれば、証明書の登録は完了です。 {{:Aws:VPC:pasted:20210113-212127.png?nolink 800x0}} #### サーバー証明書とキー、クライアント証明書とキーをクライアントPCに格納する ※後々クライアントPCのセットアップで使用するので、以下のファイルをSCP等でクライアントPCに格納しておいてください。 ・client1.domain.tld.crt ・client1.domain.tld.key ### クライアントVPNエンドポイントの作成 最低限赤枠の設定をします。 ・名前タグ:好きな名前で ・クライアントIPv4 CIDR:AWS内(VPC)で使用していないアドレス帯を指定する。サブネットマスクは/22以上で無いと作成できない。 ■認証情報 ・サーバー証明書 ARN:ACMに登録した「Server」の証明書 ・認証オプション:相互認証の使用を選択 ・クライアント証明書 ARN:ACMに登録した「client1.domain.tld」の証明書 ■その他のオプションパラメータ ・VPC ID:接続したいEC2が置いてあるVPCを選択 ・セキュリティグループID:接続したいEC2が置いてあるsubnetを選択 ・セキュリティグループを選択:接続したいEC2が置いてあるsubnetのDefaultセキュリティグループを選択  ※ここはまだ検証していないがDefaultセキュリティグループは以下の設定になっている。   インバウンドルール→タイプ:全てのトラフィック、プロトコル:すべて、ポート範囲:すべて、ソース:選択したセキュリティグループID   アウトバウンドルール→タイプ:すべてのトラフィック、プロトコル:すべて、ポート範囲:すべて、ソース:0.0.0.0/0 ②設定したら[クライアントVPNエンドポイントの作成]をクリックする。 {{:Aws:VPC:pasted:20210113-221811.png?linkonly|ClientVPN設定画面}} ③ClientVPN作成後のイメージ {{:Aws:VPC:pasted:20210125-220259.png?nolink 600x0}} ### クライアントVPNエンドポイントの追加設定 ※この章の追加設定しないと待てど暮らせど設定が終わりません。 #### 関連付けの設定 ①[関連付け]タブの[関連付け]をクリックします。 {{:Aws:VPC:pasted:20210113-221219.png?nolink 800x0}} ②以下のように設定し[関連付け]をクリックします。 ・VPC:接続したいEC2の置いてあるVPC ・関連付けるサブネットの選択:接続したいEC2の置いてあるサブネット {{:Aws:VPC:pasted:20210113-221846.png?nolink 800x0}} #### 関連付けの設定 ①[認証]タブの[受信の承諾]をクリックします。 {{:Aws:VPC:pasted:20210113-222255.png?nolink 800x0}} ③以下のように設定し[認証ルールの追加]をクリックします。 ・アクセスを有効にする送信先ネット:接続したいEC2の置いてあるVPCのCIDR ・アクセスを付与する対象:すべてのユーザにアクセスを許可する {{:Aws:VPC:pasted:20210113-222727.png?nolink 800x0}} ④しばらくするとClientVPNの状態が[使用可能]になります。※この待ち時間でクライアント側の設定をします。 {{:Aws:VPC:pasted:20210113-223008.png?nolink}} ### クライアントPCの設定 Windows端末前提で記載します #### OpenVPNのインストール ①[[https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/client-authentication.html#mutual|こちらのページ]]のWindows版の手順を参照して、OpenVPNのインストールのみ実施します。 #### クライアント設定ファイルの作成 ①クライアントVPNエンドポイントの画面から、作成したClientVPNを選択し[クライアント設定のダウンロード]をクリックします。 {{:Aws:VPC:pasted:20210113-223244.png?nolink}} ②クライアント設定ファイルを以下の通り編集します。 [[Aws:VPC:TryClientVPN-Endpoint#ACM(Certificate Manager)にサーバー証明書とキー、クライアント証明書とキーを登録する|クライアントPCに格納]]の格納先が「C:\custom_folder」の前提で記載します。 ③クライアント設定ファイルをエディタで開きます。 ④設定ファイルの末尾に、以下の記述を追記して保存します。※%%\%%←バックスラッシュは2つずつ書く cert C:\\custom_folder\\client1.domain.tld.crt key C:\\custom_folder\\client1.domain.tld.key <設定ファイルの完成イメージ> {{:Aws:VPC:pasted:20210113-225216.png?nolink 400x0}} #### クライアント設定ファイルのインポート ①タスクバーにOpenVPNのアイコンがあるので、右クリック→[Inport file]から、編集したクライアント設定ファイルを選択します。 {{:Aws:VPC:pasted:20210113-225809.png?nolink 200x0}} ②再度、タスクバーにOpenVPNのアイコンを、右クリック→[接続]をクリックすると以下の画面が表示されVPN接続完了となります。 {{:Aws:VPC:pasted:20210113-230211.png?nolink 400x0}} ### 動作確認 構成図のEC2(10.0.2.67)に無事SSH接続できました。 {{:Aws:VPC:pasted:20210113-231307.png?nolink 400x0}} 今回はとりあえず繋げてみたお試し設定でしたが、チューニングできそうな項目が色々ありましたね。 仕事で使うことになったら考えよう。※DNSの検証は・・・後日やる・・・ぞ {{tag>AWS VPC ClientVPN SSL証明書}}