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

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

Clock Icon2023.08.18 01:00

困っていた内容

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

参考資料

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.