[AWS] [2020/8/18Update] Cloud9がSession Managerに対応しました!


Cloud9

AWSが提供する、コードを記述、実行、デバッグできるクラウドベースの統合開発環境 (IDE)です。
詳細はこちら。

AWS Cloud9

そのCloud9ですが、2020/8/18にアップデートがあり、

Cloud9 は、Cloud9 IDE を使用しているお客様に拡張 VPC サポートの提供を開始します。このリリースでは、イングレスがない (そして、オプションでエグレスがない) プライベートサブネットで Cloud9 環境を作成するためのサポートが追加されています。

AWS Cloud9 が拡張 VPC サポートをリリース

という機能追加が行われました。
つまり、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にエンドポイントを追加する必要があるかもしれませんので、その辺は必要に応じて追加していってみてください。

関連記事