CloudShell をVPCで試してみた

# 背景・目的
本日、[AWS CloudShell now supports Amazon Virtual Private Cloud (VPC)](https://aws.amazon.com/about-aws/whats-new/2024/06/aws-cloudshell-amazon-virtual-private-cloud/)が発表されました。
VPC内で CloudShellが使用できるとのことですので試してみました。

# まとめ
下記に特徴をまとめます

|特徴|説明|
|:--|:--|
|概要|VPCでCloudShellが使えるようになる|
|制約|IAMプリンシパル毎に最大2つのVPCの作成まで<BR><BR>VPCには最大5つのSGまで割り当てが可能<BR><BR>アップロード、ダウンロードオプションは使用できない<BR><BR>ストレージは一時的なもの<BR><BR>|


# 概要
[Using AWS CloudShell in Amazon VPC](https://docs.aws.amazon.com/cloudshell/latest/userguide/using-cshell-in-vpc.html)を基に整理します

> AWS CloudShell は VPC のネットワーク構成を継承し、VPC 内の他のリソースと同じサブネット内で AWS CloudShell を安全に使用し、それらに接続できるようにします。

- VPCでCloudShellが使えるようになる

## Operating constraints

> AWS CloudShell VPC 環境には次の制約があります。
> - IAM プリンシパルごとに最大 2 つの VPC 環境を作成できます。
> - VPC 環境には最大 5 つのセキュリティ グループを割り当てることができます。
> - VPC 環境の [アクション] メニューでは、CloudShell のアップロードおよびダウンロード オプションは使用できません。

- IAMプリンシパル毎に最大2つのVPCが作成できる
- VPCには最大5つのSGを割り当てられる
- アップロード、ダウンロードオプションは使用できない

> VPC 環境では永続的なストレージはサポートされません。ストレージは一時的なものです。アクティブな環境セッションが終了すると、データとホーム ディレクトリは削除されます。

- 一時的なストレージのみ

> AWS CloudShell 環境は、プライベート VPC サブネット内にある場合にのみインターネットに接続できます。

- プライベートサブネットがあるVPCにのみ接続できる

> デフォルトでは、パブリック IP アドレスは CloudShell VPC 環境に割り当てられません。すべてのトラフィックをインターネット ゲートウェイにルーティングするようにルーティング テーブルが設定されたパブリック サブネットに作成された VPC 環境はパブリック インターネットにアクセスできませんが、ネットワーク アドレス変換 (NAT) が設定されたプライベート サブネットはパブリック インターネットにアクセスできます。このようなプライベート サブネットに作成された VPC 環境はパブリック インターネットにアクセスできます。

- デフォルトではパブリックIPアドレスがはCloudShell VPCには割り当てられていない
- IGWにルーティングするようにルーティングテーブルが設定されたパブリックサブネットに作成された、VPCはインターネットにアクセスできない
- インターネットアクセスするには、NATをアタッチする


# 実践
## CloudShellの起動
### VPCの作成
1. VPCに移動します
1. 「VPCの作成」をクリックします
1. 下記のような構成のVPCを構築します
    - Public Subnetなし
    - Private Subnet1つだけ
    - VPCeなし
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/65f1d7cf-8d81-d179-31a6-a4e5374f974b.png)

### EC2の起動
1. EC2に移動します
1. 「インスタンスの起動」をクリックします
1. 作成したVPCで、キーペア無し、パブリックIP無しでインスタンスを起動します

### セキュリティグループの修正
1. 上記のEC2で作成したSGを修正します
1. VPC内からのICMPだけ受け付けるように変更します

### CloudShellの起動

1. CloudShellを選択します
1. 「＋」＞「Create VPC envrionment(max 2) 」を選択します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/c1aeee77-720a-5eb3-0c0a-be50b6907566.png)

1. 下記を入力し、「Create」をクリックします
    - VPC envrinment
    - VPC:作成したVPCを指定
    - Subnet：作成したSubnet
    - Security Group：任意
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/27cd79a1-cbb6-3a0b-a66e-e5ca63d4b709.png)

1. 起動されました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/66433188-663a-4275-18a5-ea449ecc0cf7.png)

1. 上記の事前準備で作成したEC2と通信します（pingを打ちます）
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/df10be66-42f1-4686-29dc-bc573f4a2d44.png)

## インターネットに接続可能な環境でCloudShellを起動する
### VPCの作成
1. VPCに移動します
1. IGW、NATGWを作成したVPCを作成します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/87f3879c-b04d-7e24-39af-15d7b5e3e006.png)

### CloudShellの起動
1. CloudShellを選択します
1. 「＋」＞「Create VPC envrionment(max 2) 」を選択します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/4a4a78d4-a701-3850-5f7c-70b6726fcb3b.png)
1. 作成したVPCとPrivate Subnetに作成します
1. できました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/9e84bbb8-fcdb-e456-5270-27451ef8ab53.png)
1. curl でインターネットにアクセスします。接続できました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b9e1d74f-f797-d9f8-cd96-3bf3daddaabe.png)

# 考察
VPCでCloudShellが起動できるようになり、今後は踏み台やSession Managerなど使用するためにVPCeやインスタンスを用意していましたが、それらは不要になりそうだと思いました！

# 参考
https://aws.amazon.com/about-aws/whats-new/2024/06/aws-cloudshell-amazon-virtual-private-cloud/

https://docs.aws.amazon.com/cloudshell/latest/userguide/using-cshell-in-vpc.html