Cloud9
AWSが提供する、コードを記述、実行、デバッグできるクラウドベースの統合開発環境 (IDE)です。
詳細はこちら。
そのCloud9ですが、2020/8/18にアップデートがあり、
Cloud9 は、Cloud9 IDE を使用しているお客様に拡張 VPC サポートの提供を開始します。このリリースでは、イングレスがない (そして、オプションでエグレスがない) プライベートサブネットで Cloud9 環境を作成するためのサポートが追加されています。
という機能追加が行われました。
つまり、Session ManagerでEC2インスタンスに接続して、そこで開発作業が行えるようになったのです。
Session Manager
System Managerの機能の一部で、インバウンドポートを開いたり、踏み台ホストを維持したり、SSHキーを管理したりすることなく、監査可能なインスタンスを安全に管理できるようになります。
詳細はこちら。
AWS Systems Manager Session Manager
何がうれしくなるの?
これまで、Cloud9を動作させるために必要なEC2インスタンスは、SSH接続する必要がありました。
それはそれで、別にダメではないのですが、よりセキュアな環境を作るために、SSHポートは閉じてSession Managerでセキュアに接続する運用をしたい、と考えていた開発者の方々には、なんかひっかかる部分があったのではないでしょうか。
今回、Session Manager経由でアクセスできるようになったことで、SSHポートを開けることなく、Private でセキュアなEC2インスタンスをCloud9から接続して開発作業が行えるようになるのです。
これは、朗報ではないでしょうか。
準備
準備の章については、既に特定のVPC上に、Session ManagerでアクセスできるPrivate Subnetが構築できている(既にEC2用に使用している)のであれば、スキップしても大丈夫です。
VPC
ルートテーブル
以下の設定で作成します。
- 名前タグ:わかりやすい名称で
- VPC:デフォルトのVPCでOKです
InternetGatewayにルーティングしていないことを確認してください。
サブネット
以下設定で作成します。
- 名前タグ:わかりやすい名称で
- VPC:デフォルトのVPCでOKです
- アベイラリティゾーン:指定なし
- IPv4 CIDRブロック:VPCのCIDR内の適当なCIDRを指定
ルートテーブルは、上で作成したルートテーブルに関連付けるようにしてください。
セキュリティグループ
以下設定で作成します。
- セキュリティグループ名:わかりやすい名称で
- 説明:適当にわかりやすい説明を
- VPC:デフォルトのVPCでOKです
- インバウンドルール:
- タイプ:HTTPS
- プロトコル:TCP
- ポート範囲:443
- ソース:サブネットのIPv4 CIDRブロックを指定
- アウトバンドルール:なし
エンドポイント
以下のエンドポイントを作成してください。
- com.amazonaws.[リージョン名].ssm
- com.amazonaws.[リージョン名].ssmmessages
- com.amazonaws.[リージョン名].ec2messages
上記インタフェースは、いずれも、
- VPC:デフォルトのVPCでOKです
- サブネット:上で作成したサブネット
- アベイラリティゾーン:全部チェックでOKです
- プライベートDNS名有効にする:チェック
- セキュリティグループ:上で作成したセキュリティグループ
さらに、下記ゲートウェイを同様に作成してください。
- com.amazonaws.[リージョン名].s3
各種設定は、以下のようになります。
- VPC:デフォルトのVPCでOKです
- ルートテーブル:上記で作成したルートテーブル
- ポリシー:フルアクセス
Cloud9
では、Cloud9の環境を作成していきましょう。
最初の「Name」については、わかりやすい適当な名前をつけてください。
次に、Configure settingsで、Environment typeに、新しく選択項目が追加になったのです。
- Create a new no-ingress EC2 instance for environment (access via Systems Manager)
という項目です。これが、EC2インスタンスを作成しつつSession Managerで接続できる環境を意味します。
そして、画面の下部ぶある「Network settings(advanced)」を展開し、Session ManagerのEndpointが設定済みのVPCと、Private Subnetを選択してください。
そして「Next Step」ボタンを押します。
確認画面が出るので、そのまま「Create environment」ボタンを押すと、Cloud9の環境と、EC2のプロビジョニングが始まります。
そして、繋がりました。
でも正直、今までとの違いがわかりません。
接続確認
というわけで、ローカルPCのターミナルから、SSHではなくSession Managerで接続してみましょう。
接続するコマンドは、
$ aws ssm start-session --target [インスタンスID]
です。
インスタンスIDを調べるには、起動中のCloud9のコンソールから
$ curl 169.254.169.254/latest/meta-data/instance-id/
i-0d4c52a1c2080013e
と実行してみましょう。自分のインスタンスIDが表示されます。
では、ローカルPCのターミナルから、Session Managerで接続してみましょう。
あと、事前にクレデンシャルの設定をお忘れなく。
$ aws ssm start-session --target i-0d4c52a1c2080013e
Starting session with SessionId: **************
sh-4.2$
繋がりますね、あっさりと。
なお、AWS Cliから、Session Managerでアクセスするためには、Session Manager Pluginが必要です。もしプラグインがインストールされていない場合は、下記よりクライアント環境にあったプラグインをインストールしてください。
(Optional) Install the Session Manager Plugin for the AWS CLI
まとめ
今回のアップデートは、セキュリティ強化のためのアップデートですので、ぜひ開発環境向けに活用したいと思います。
あと、開発するものからAWSのサービスを使う際に、場合によってはアタッチしているVPCにエンドポイントを追加する必要があるかもしれませんので、その辺は必要に応じて追加していってみてください。