BioErrorLog Tech Blog

試行錯誤の記録

Private SubnetにCloud9を構築する | AWS

AWS Cloud9をPrivate Subnetで作成する方法を整理します。

はじめに

Cloud9では、SSM接続方式を選択することでPrivate Subnetにインスタンスを建てることができますが、その際にも満たすべき一定のネットワーク要件があります。

毎回忘れて調べ直しているので、今回はそのやり方を整理します。

前提: Private SubnetでのCloud9の仕組み

前提として、Private Subnetに構築するCloud9の仕組みをおさらいしておきましょう。

Cloud9にはSSHとSSM(Systems Manager)2つのネットワーク接続方式が提供されており、Private SubnetにCloud9を構築するにはSSM接続方式の方を選択する必要があります。

Cloud9には2つのネットワーク接続方式がある

実際にSSM接続方式のCloud9に接続するときの通信は、

  • ユーザーがコンソール経由でSystems Managerにアクセスする
  • Cloud9インスタンスがSystems Managerにアクセスする

の2つの経路が通っている必要があります。 前者は普通にマネジメントコンソールにアクセスできていれば問題ないので、基本は後者の接続を意識することになります。

SSM接続方式のCloud9を利用する際の通信経路の例 | 画像はAWSブログより

では、通信要件の条件に応じて実際にPrivate SubnetにCloud9を構築していきます。

Private SubnetでCloud9を構築する

  • Internet Gateway / NATありの場合
    (NAT Gateway経由でInternet GatewayにアクセスできるPrivate Subnet)
  • Internet Gateway / NATなしの閉域Private Subnetの場合
    (NAT Gatewayもなく、Internet Gatewayに到達する経路がないPrivate Subnet)

のそれぞれで、Cloud9を構築していきます。

Internet Gateway / NATありの場合

NAT Gatewayがある場合は、何か特殊な設定をする必要はありません。

Cloud9を作成するPrivate Subnetから、NAT Gatewayを経由してInternet Gatewayへ出れる通信経路が開いていれば、Cloud9を作成することができます。

  • Private SubnetのルートテーブルでNAT Gatewayへの経路が通っているか
  • Public SubnetのルートテーブルでInternet Gatewayへの経路が通っているか

今回の検証で使ったNetworkリソースのTerraformコードをそのままこちらに配置していますので、ご参考までにどうぞ: github.com

Internet Gateway / NATなしの閉域Private Subnetの場合

Internet Gateway / NAT Gatewayのないno-egressなPrivate Subnetの場合は、最低限下記3つのVPC endpointを作成しておく必要があります。

  • com.amazonaws.[region].ec2messages
  • com.amazonaws.[region].ssm
  • com.amazonaws.[region].ssmmessages

※ 上記[region]部分はregion名に置き換えてください。

こちらも、上記構成のNetworkリソースを構築するTerraformコードをそのままGitHubに配置していますので、ご参考まで:

github.com

おわりに

以上、Private SubnetにCloud9を構築する方法を整理しました。

Cloud9をサクッと使いたい場面もしばしばあります。

そんなときの参考になれば幸いです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

Isolating network access to your AWS Cloud9 environments | AWS Security Blog

Manage private EC2 instances without internet access using Systems Manager | AWS re:Post

Accessing no-ingress EC2 instances with AWS Systems Manager - AWS Cloud9

GitHub - bioerrorlog/terraform-examples: My terraform example projects.