困っていた内容
Bottlerocket OS のコンテナインスタンスで、ECS を実行しています。
トラブルシューティングのため、コンテナインスタンスに SSH 接続したいのですが、接続できません。
Bottlerocket OS のコンテナインスタンスに SSH 接続する方法を教えてください。
なお、インスタンスにキーペアは設定済みで、セキュリティグループ等は解放済みです。
どう対応すればいいの?
管理コンテナ (Admin container)を有効にしてください。
Bottlerocket には SSH サーバーが含まれていないため、インスタンスに直接 SSH 接続することはできません。
一方で、デバッグとトラブルシューティングに使用できる管理コンテナが使用可能であり、管理コンテナには SSH で接続が可能です。
管理コンテナはデフォルトで無効になっているため、トラブルシューティングで必要な場合は有効にしてください。
Amazon ECS 最適化 Bottlerocket AMI - Amazon Elastic Container Service
Bottlerocket イメージには、SSH サーバーまたはシェルは含まれません。
Bottlerocket のよくある質問 – Amazon Web Services
Q: 管理コンテナとは何ですか?
管理コンテナは Amazon Linux コンテナイメージであり、Bottlerocket のトラブルシューティングとデバッグのためのユーティリティが含まれており、昇格された権限で実行されます。
やってみた
Amazon ECS コンソールの「クラスター」からインスタンスが含まれるクラスターを選択します。
「インフラストラクチャ」タブを選択します。
「コンテナインスタンス」セクションから接続したいコンテナインスタンスのインスタンス ID をクリックします。
「セキュリティ」タブを選択します。
IAM ロールをクリックします。
「許可の追加」から「ポリシーのアタッチ」を選択します。
許可ポリシーから「AmazonSSMManagedInstanceCore」ポリシーを選択して、「許可を追加」をクリックします。
ポリシーが正常に追加されたことを確認します。
Amazon EC2 コンソールに戻り「接続」をクリックします。
「接続」をクリックします。
※ポリシー設定直後は「can't connect to your instance」で接続が押せない場合があります。しばらくお持ちください。
enable-admin-container
コマンドを実行して、管理コンテナを有効にします。
$ enable-admin-container
Enabling admin container
The admin container is now enabled - it should pull and start soon, and then you can SSH in or use 'apiclient exec admin bash'.
You can also use 'enter-admin-container' to enable, wait, and connect in one step.
管理コンテナの有効に成功したら、SSH クライアントを使用して、インスタンスに接続します。
コマンド例
ssh -i 【プライベートキー】 ec2-user@【確認したパブリック IP】
※左側の図形は崩れていますが、Bottlerocket のアスキーアートのようです。
接続例
$ ssh -i /home/hato/KeyPair.pem ec2-user@198.51.100.1
Welcome to Bottlerocket's admin container!
╱╲
╱┄┄╲ This container provides access to the Bottlerocket host
│▗▖│ filesystems (see /.bottlerocket/rootfs) and contains common
╱│ │╲ tools for inspection and troubleshooting. It is based on
│╰╮╭╯│ Amazon Linux 2, and most things are in the same places you
╹╹ would find them on an AL2 host.
To permit more intrusive troubleshooting, including actions that mutate the
running state of the Bottlerocket host, we provide a tool called "sheltie"
(`sudo sheltie`). When run, this tool drops you into a root shell in the
Bottlerocket host's root filesystem.
[ec2-user@admin]$
[ec2-user@admin]$
トラブルシューティングが完了した際は、セッションマネージャーで接続し、disable-admin-container
コマンドで管理コンテナを無効にします。
なお、セッションマネージャーはデフォルトで有効なコントロールコンテナ(Control Container)に接続しています。
Amazon ECS での Bottlerocket の始め方 〜 コンテナ向けのセキュアな Linux ディストリビューション | Amazon Web Services ブログより引用