AWS Hands-on for Beginners を理解しながら進めてみた #2


<br></br>
### #2 [AWS Hands-on for Beginners - Network編#3 クライアントVPNをつかって、リモート接続環境を構築しよう](https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Network-3-2022-reg-event.html?trk=aws_introduction_page "ハンズオン公式サイト")

# 目的
[前回](https://qiita.com/okigaruni_/items/7bd594c1750b008bc56e "Network編#1")に続き、今回の主役は [AWS Client VPN](https://aws.amazon.com/jp/vpn/client-vpn/ "ハンズオン公式サイト") というサービスです。概要を説明すると、AWSのプライベートサブネット内のEC2にアクセスできるVPNです。クライアント側では、接続を期待するIPアドレスをクライアントCIDRで指定し、VPC側ではインターフェイスのサブネットを指定します。<br></br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/850329/80741e4d-06e1-14e4-4d59-c57e05c1e897.png)


# 本題

以下が、今回のハンズオンの全体像になります。
##### ネットワーク構成図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/850329/53a04eb3-73af-be1f-5146-5f3c8e6ad557.png)
##### ルートテーブル一覧
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/850329/897e173b-bd5b-b2e7-9364-4e708584f689.png)
※④はルートテーブルではなく、クライアントVPN エンドポイントの設定です。
##### セキュリティグループ一覧
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/850329/f81ebc56-183b-a4e0-3e4c-a08539b95f42.png)
※クライアントVPNエンドポイントのインバウンドはデフォルトの設定のままでした。ここで、ClassMethod 社が提供するDevelopersIO の[関連記事](https://dev.classmethod.jp/articles/how-to-configure-security-groups-for-aws-client-vpn/ "参考文献")によると、デフォルトのセキュリティグループではなく、インバウンドルールを設けないセキュリティグループを新規作成することで、予期せぬトラフィックを防ぐことが推奨されていました。詳細につきましては記事をご覧ください。

次に、大まかな手順について説明します。

1. VPCを作成
2. プライベートサブネットを２つ作成
3. subnet1にはEC2を立て、セキュリティグループはpingに対応したプロトコルICMPを設定
4. subnet255は Client VPN のインターフェイス用
5. VPCへのアクセスログを出力するため、CloudWatch Logsでロググループとログストリームを作成
6. VPN接続でクライアント承認(相互認証)をするため、[公式の手順](https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/client-authentication.html)に従ってAWS CLI 上で証明書と秘密鍵を作成し、ACMにインポートする
7. Client VPN Endpoint を設定し、subnet255に関連付ける **※1**
8. Client VPN Endpointで設定したクライアント設定ファイルをダウンロード
9. [AWS Client VPN](https://aws.amazon.com/jp/vpn/client-vpn-download/ "ダウンロードサイト")ソフトをクライアント側にダウンロード
10. AWS Client VPN でクライアント設定を読み込む
11. シェルからEC2にpingコマンドを打つ
12. マネジメントコンソールの Client VPN Endpoint と、CloudWatchでアクセスログを確認

:::note alert
**※1** VPCへのアクセスのみVPN接続の経由にするため、**スプリットトンネルを必ず有効化する**
無効の場合、クライアントのすべてのネットワークがVPN経由となり、インターネットにアクセスできなくなる。
:::

# まとめ

今回のハンズオンは再生時間こそ短いものの、セキュリティの視点で重要な内容だと感じました。[前回](https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Network1-2022-reg-event.html?trk=aws_introduction_page "Network編#1")はVPC外のサービス(SSM, S3)への接続を確認したが、あくまでAWS内で完結していました。しかし、今回はAWS外のクライアントが登場したことで、意図しないクライアントによる不正アクセスを防ぐため、よりルートテーブルやセキュリティグループの設定を意識する必要がありました。

ここで、先述した[ルートテーブル一覧](https://qiita.com/drafts/9a7e13df357cff82f6fe/edit#%E3%83%AB%E3%83%BC%E3%83%88%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E4%B8%80%E8%A6%A7)の④の クライアント VPN エンドポイントの認証ルールについて補足します。今回は、全てのユーザーに対して、全てのネットワークへのアクセス権限を付与しています。例えば、「アクセスが有効な送信先」を198.19.1.0/24とし、「アクセスの付与対象」を192.168.0.6 とした場合、IPアドレスが192.168.0.6 のユーザーに対して、Private subnet1 へのアクセスに限定した権限を付与する設定になります。


# その他
また、インターンの中では、上司が理解度を確認するための時間を設けてくださり、独学では身に付けられなかったアウトプットの重要性や、AWSへの理解を深めるための視点に気づかされました。非常に学びが多く励みになりました。特に、スプリットトンネルとフルトンネルの違いについて理解が深まりました。また、リモート開発ではVPNへの理解が必須となるので、確実に押さえておきたい内容だと思いました。

[次の記事](https://qiita.com/okigaruni_/items/6804e66ca63a982de56b)



# 参考サイト
https://dev.classmethod.jp/articles/how-to-configure-security-groups-for-aws-client-vpn/

<br></br>
最後まで記事を読んでくださり、ありがとうございます。もし内容に誤りがございましたら、ご指摘いただけますと幸いです。