Bottlerocket AMI のコンテナインスタンスに SSH 接続する方法を教えてください

2023.08.18

困っていた内容

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 ブログより引用

参考資料