Bottlerocket
コンテナ実行に特化した Linux ベースの OS で、セキュリティと運用性を最小限のフットプリントで実現する
概要
Bottlerocket は、AWS が開発したコンテナワークロード専用の Linux ベースオペレーティングシステムです。汎用 Linux ディストリビューションからコンテナ実行に不要なコンポーネント (パッケージマネージャー、シェルログイン、汎用ライブラリなど) を徹底的に排除し、攻撃対象領域を最小化しています。イミュータブルなルートファイルシステム、API ドリブンの設定管理、自動アップデート機構を備え、大規模なコンテナクラスターの運用負荷を大幅に軽減します。
イミュータブルファイルシステムとセキュリティモデル
Bottlerocket のルートファイルシステムは dm-verity で整合性が検証された読み取り専用パーティションとしてマウントされます。OS のバイナリやライブラリが実行時に改ざんされることを構造的に防止しており、仮にコンテナからのエスケープが発生しても、ホスト OS のファイルを書き換えることはできません。SSH デーモンは標準では無効化されており、ホストへの直接ログインを排除しています。デバッグが必要な場合は、管理コンテナ (admin container) を一時的に有効化して SSM Session Manager 経由でアクセスします。SELinux がデフォルトで有効化されており、コンテナランタイムとホスト OS の間にマンダトリーアクセス制御を適用します。カーネルのロックダウン機能により、カーネルモジュールの動的ロードも制限されています。これらの多層防御により、CIS ベンチマークや DISA STIG の多くの項目を OS レベルで自動的に満たします。汎用 Linux と比較してインストール済みパッケージ数が大幅に少ないため、CVE の影響を受ける確率自体が低く、パッチ適用の頻度と緊急度も抑えられます。
API ドリブンの設定管理とアップデート
Bottlerocket の設定変更は、従来の Linux のように設定ファイルを直接編集するのではなく、API サーバー経由で行います。apiclient コマンドまたは HTTP API を通じて、ネットワーク設定、DNS、NTP、コンテナランタイムのパラメータなどを構造化されたデータとして設定します。設定は TOML 形式でシリアライズされ、バリデーションを経てから適用されるため、構文エラーによるシステム障害を防止できます。OS のアップデートはパーティション A/B 方式で実施されます。現在稼働中のパーティションとは別のパーティションに新バージョンを書き込み、再起動時に切り替えます。アップデートに失敗した場合は自動的に元のパーティションにロールバックするため、アップデート起因の障害リスクが極めて低い設計です。EKS 環境では Bottlerocket Update Operator がクラスター内のノードを順次アップデートし、Pod の退避 (drain) とノードの再起動を自動化します。アップデートの適用はイメージ全体の置き換えであり、個別パッケージの更新は行いません。
ECS・EKS での実行とバリアント選択
Bottlerocket はオーケストレーターごとに最適化されたバリアントとして提供されます。EKS 向けの aws-k8s-1.29、aws-k8s-1.30 などのバリアントには kubelet と containerd が組み込まれ、EKS のマネージドノードグループまたはセルフマネージドノードグループとして起動できます。ECS 向けの aws-ecs-2 バリアントには ECS エージェントが組み込まれ、ECS クラスターのコンテナインスタンスとして動作します。バリアントの選択は起動時の AMI で決まり、後から変更することはできません。EKS マネージドノードグループで使用する場合、起動テンプレートで Bottlerocket AMI を指定し、ユーザーデータに TOML 形式の設定を記述します。Amazon Linux 2 の bash スクリプト形式とは異なる点に注意が必要です。GPU ワークロード向けには NVIDIA ドライバー組み込みバリアントも用意されています。AMI は AWS が定期的に更新しており、SSM パラメータストアから最新の AMI ID を取得して Terraform や CloudFormation で動的に参照できます。