2020/08/24 AWS Client VPN 構築
Client VPN
Client VPNとはAWSが提供しているVPNサービス
リモートアクセスVPNであり、OpenVPNを利用している。
AWSのClient VPNでは3つの認証方法が用意されている。
Active Directory 認証(ユーザー)
相互認証(証明書)
シングルサインオン(SAML)
今回は証明書をベースとした相互認証を利用して構築する。
構築
まずは証明書の作成が必要になる。
OpenVPNの証明書作成ツールを利用する。
まずはOpneVPNコミュニティーのDLページから落とす。
インストール。
証明書の作成
サーバ証明書を作成する。
まずはコマンドプロンプトからインストールしたOpenVPNのディレクトリに移動する
init-config
notepad vars.bat
メモ帳が起動するのでset KEY_SIZEの値を2048に変更する
vars.bat
clean-all
CAを構築する
build-ca
証明書の情報を聞かれる。
オレオレ認証局なのですべてデフォルトでOK
次にサーバー証明書と秘密鍵を作る
build-key-server server
これはサーバー証明書なのでcommonNameは正しく設定する必要がある。
サーバ側なのでAWSのドメインを指定する。
それ以外はデフォルトでOK
次にクライアント証明書と秘密鍵を作る
build-key client
これはクライアント証明書なのでcommonNameは正しく設定する必要がある。
commonNameは利用するユーザー名を指定する。
証明書のアップロード
Amazonは証明書をACMで管理する。
ACMは証明書をインポートすることが出来るので、作成した証明書をアップロードする。
AWS CLIからアップロードも可能だが、今回はコンソールから操作する。
AWSコンソールからACMに入り、証明書のインポートを選択する。
https://gyazo.com/9f81d9f5b6d3ae7aa424a4b44b9336b6
ここに証明書を設置する。
まずはサーバー証明書から。
Windowsのeasy-rsaディレクトリの中に、keysというディレクトリができている。
その中の鍵を貼り付ける。
証明書本文はserver.crt
証明書のプライベートキーはserver.key
証明書チェーンはca.crt
次にクライアント証明書。同様にインポート。
証明書本文はclient.crt
証明書のプライベートキーはclient.key
証明書チェーンはca.crt
valueにname=<ユーザー名>を入れるとわかりやすい
izumin.icon 余談
WindowsのコマンドプロンプトでLinuxのようにcatはできないのか?
と思ったらできた。
typeコマンド
知らなかった。
クライアントVPNエンドポイントの作成
まずはVPCコンソールのクライアント VPN エンドポイントを選択する。
クライアントVPNエンドポイントの作成
https://gyazo.com/a2bc89e704ebad2a225ac9dbcf7564b4
ここに入力していく。
名前をつける。
説明をする。
クライアントIPv4CIDRを設定。(/12~/22)
これは重要。クライアントに割り当てられるIPアドレスのことで、IPがほかのルートと重複してはいけない。
また、クライアントVPNエンドポイントを作成した後に範囲を変えることはできない。
サーバー証明書 ARN
サーバ証明書を選択する。
次に相互認証の使用にチェックを入れる。
クライアント証明書ARN
クライアント証明書を選択
クライアント接続の詳細を記録しますか?
今回は記録しない
VPC ID
利用するVPCを選択
セキュリティグループID
利用するセキュリティグループを選択
ポート
443
他はそのまま
クライアントのVPN接続を有効化
VPNを確立できるようにするためにはサブネットを
クライアントVPNエンドポイントと紐付けする必要がある
クライアントVPNエンドポイントから関連付けを選択する
VPCとサブネットを選択する。
冗長化を考え、複数指定すると良い。
https://gyazo.com/af113a8c241d4f050196e9debc0b76cb
クライアントのネットワークへのアクセスを承認する
受信の承認を行う
誰がどこのネットワークにアクセスできるか設定できる。
今回はすべてのユーザに適用させる。
https://gyazo.com/ef98d03530c01bcff8adfc52049134de
ここまでで基本的な設定は終わり。
他にもルーティングの設定などもできるが、今回はパス
設定ファイルのダウンロード
クライアントVPNエンドポイントからクライアント設定のダウンロードを行う。
https://gyazo.com/36a12687ffedc3978792f00894144010
次に、さっき作成したクライアント証明書をダウンロードした設定ファイルと同じところに置く。
DLした設定ファイルを編集する。
そこに.certと.keyの位置を最後尾の行に入力
code:hoge.ovpn
reneg-sec 0
cert c:\\path\\client.crt
key c:\\path\\client.key
windowsは¥¥を使うらしい。
接続できない…
izumin.icon なんで?
どうやらOpenVPNのコンフィグファイルに問題が合ったようだ。
Unrecognized option or missing or extra parameter(s)
こんなエラーがでてきてしまい悩んだが、
ダブルクォーテーションを入れることで解決した。
code:hoge.ovpn
reneg-sec 0
cert "c:\\path\\client.crt"
key "c:\\path\\client.key"
接続完了
https://gyazo.com/17e295c375bd1bb0320d275be5ec2a5b
インスタンスのインバウンドSGにVPNエンドポイントに設定したSGを許可してあげれば、
疎通が可能に。
https://gyazo.com/12cbbc99c8e68567585d794eced7fe1e
しっかりとプライベートIPで接続できている。
料金
クライアントVPNエンドポイントを紐付けたサブネット*接続時間
us-east1では0.1USD/h
アクティブな接続中のクライアント*接続時間
これは1接続で0.05USD/h
クライアントソフトはOpenVPNでもいいらしい。
クライアントソフト増えて大変なことになってる。整理しなきゃ。。。。
以上
===================================================
余談
上に書いたようにVPNは1時間で0.1USD
0.1USDは日本円で10円。
1時間で10円。
24時間で240円。
3日で720円。
そう。
3日間有効にしていたら
お金がかかりました。
やっちまった!!
ドル表記だと安く見えてしまうの怖い