~~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証明書}}