VPC 環境の AWS CloudShell のネットワーク調査

本記事は 夏休みクラウド自由研究 8/16付の記事です

どうも、相変わらずCloudShellの話題の寺内です。
時期を逸してしまいましたが、2024年6月26日に、AWS CloudShell が指定のVPC内で起動できるようになりました。

AWS CloudShell now supports Amazon Virtual Private Cloud (VPC) - AWS
Discover more about what's new at AWS with AWS CloudShell now supports Amazon Virtual Private Cloud (VPC)

作成数の制約

ひとつのIAMユーザで作成できるVPC環境のCloudShell は2つまでです。
VPC環境のCloudShell を削除するには、削除したいCloudShellのコンソールを選択した後、アクションから「削除」を選択します。意外とわかりにくいですね。

 

作成

VPC環境のCloudShell を作成するには、CloudShell の「アクション」メニューから「Create a VPC environment (max 2)」 を選択します。
すると以下のようなVPCとサブネット、セキュリティグループを選択する画面がでますので、ここを指定するだけです。

ネットワークインターフェースの確認

このようにして作成したVPC環境のCloudShell のIPアドレスを確認してみましょう。
CloudShellを作成する以下の種類のVPCを指定します。

  1. VPC環境ではない標準のCloudShell
  2. インタネットゲートウェイを持つパブリックサブネットのCloudShell
  3. インターネットゲートウェイを持たず外部接続できないCloudShell

IPアドレスの値は、それぞれ指定したVPCとサブネットの設定に依存します。ここでは、その値そのものより、ネットワークインターフェースに注目します。

a. 標準のCloudShell

[cloudshell-user@ip-10-132-71-142 ~]$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 0e:cb:3f:8e:55:d7 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname eni-079c3fba4bc3a932d
    altname device-number-0
    inet 10.132.71.142/19 metric 512 brd 10.132.95.255 scope global dynamic ens5
       valid_lft 3445sec preferred_lft 3445sec
    inet6 fe80::ccb:3fff:fe8e:55d7/64 scope link 
       valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:f8:e3:ca:72 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

b. インターネット接続可能なVPC

[cloudshell-user@ip-10-1-1-46 ~]$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:4c:44:c6:9f brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
4: ens6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 06:78:c6:7c:d0:c1 brd ff:ff:ff:ff:ff:ff
    altname enp0s6
    altname eni-03e1af8560b73e6fe
    altname device-number-1
    inet 10.1.1.46/24 scope global ens6
       valid_lft forever preferred_lft forever
5: devfile-veth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether da:70:b4:10:58:d7 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.0.2/32 scope global devfile-veth0
       valid_lft forever preferred_lft forever

c. クローズドVPC

[cloudshell-user@ip-10-10-1-223 ~]$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:b8:b6:77:c8 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
4: ens6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 06:9e:3b:36:ff:bf brd ff:ff:ff:ff:ff:ff
    altname enp0s6
    altname eni-0a72fb1c1bcc4d6c6
    altname device-number-1
    inet 10.10.1.223/24 scope global ens6
       valid_lft forever preferred_lft forever
5: devfile-veth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether e2:d3:11:74:63:1f brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.0.2/32 scope global devfile-veth0
       valid_lft forever preferred_lft forever

いずれも以下の3つのネットワークインターフェースは持っていることがわかります。

  • lo
  • docker
  • ens

ensのインターフェースを見ると、altname(別名)としてeni IDが記載されています。
CloudShell コンテナがAWSの基盤内で作られると、そのコンテナに対して利用者のAWSアカウント内の指定VPCにENIが作成され、そこと関連付けられる仕組みのようです。
確認のために、EC2のコンソールからネットワークインターフェース一覧を見てみてください。そこで、ManagedByCloudShell というタグキーを持つENIを検索すると、上記の altname に記載されたENIがリストアップされます。

またVPC環境の CloudShell には上記に加えて、 devfile-veth0 というものを持っています。devfile というのは、CodeCatalyst などで使われる構成情報自動化のファイルなので、内部の自動構築を行うための専用の制御ネットワークがあるのかもしれません。これは推測です。

使いどころ

このような仕組みで提供されるVPC環境のCloudShell ですので、使いどころを考えてみましょう。
いままで構築したEC2やRDSなどのVPC内リソースの動作確認に、テスト用EC2を立て、そこからping やtelnet、curl やmysql コマンドでテストをしていたのではないかと思います。
そうした一時的なテストでは、VPC環境のCloudShell が活用できます。
その他、ちょっとしたデータ加工の後のテストデータの作成とテストの実施などにも便利ですね。
注意すべきは、インターネット接続できないクローズドなVPCに作った場合です。インターネットのリポジトリへアクセスできませんので、追加のツールインストールができません。AWS APIへのアクセスもVPCエンドポイントがない限りはできません。
当然といえば当然ですが、VPC内のEC2やコンテナなどと同じネットワーク条件になるわけなので注意が必要です。

その他、従来のCloudShell の注意点である、以下も同じですのでお忘れなく。

  • 1GBしか保存できない
  • 120日間アクセスないとデータが消える
  • 12時間でセッションが切れる

ますます便利になったAWS CloudShell。これからも愛用していきたいと思います。なんせ無料なのがいい。ですが、VPC環境の場合データ通信量はかかります。

著者について
寺内康之

SF好きで夢見がち。小学生の頃にPC-8001に出会い、その後パソコン通信にはまり、UNIX好きになり、ネットワークエンジニアとなる。AWSと出会い、徐々に上位レイヤーに進出中。
2024年 Japan AWS Top Engineers に選出される。

寺内康之をフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(AWS)は、企業価値の向上につながるAWS 導入を全面支援するオールインワンサービスです。AWS最上位パートナーとして、多種多様な業界のシステム構築実績を持つSCSKが、お客様のDX推進を強力にサポートします。

AWSクラウド
シェアする
タイトルとURLをコピーしました