Bottlerocket - 検証済みブートを備えた最小限の不変 Linux OS
(bottlerocket.dev)- Bottlerocket は、コンテナホスティング向けに最適化された Linux ベースの OS で、Kubernetes のようなオーケストレーターが管理するクラスタワーカーノードの基本 OS として使われる
- 汎用ディストリビューションに含まれるパッケージ、ツール、インタープリターを削ぎ落とした 最小構成 により、運用負荷と攻撃対象領域を縮小し、環境ごとの variant で必要な組み合わせだけを提供する
- シェルやパッケージマネージャーを持たず、権限付き host コンテナと API を通じてシステムを扱い、更新はイメージとパーティション切り替えによってアトミックに適用される
- 設定は API ベースで管理されるため、バージョン間のマイグレーションとロールバックが可能で、更新管理は手動またはオーケストレーター別ツールで行える
- 不変のルートファイルシステム、dm-verity、制限付き SELinux、Rust と一部 Golang による実装を通じて、システム改ざんや未検証コードの実行経路を減らしている
コンテナクラスタ向けの基本 OS
- Bottlerocket は、コンテナホスティングに最適化された Linux ベースのオペレーティングシステム
- 無料のオープンソースソフトウェアであり、GitHub で公開開発されている
- コンテナが実行されるマシンやインスタンスの 基本オペレーティングシステム としてインストールされる
- Kubernetes のようなコンテナオーケストレーターとともに動作するよう設計されており、クラスタ内のコンテナライフサイクル自動化を支援する
- クラウドとデータセンターで実行可能
- 設計目標は Minimal、Safe Updates、Security Focused の3つに整理される
最小構成と環境別 variant
- コンテナホスティングのみを目的としているため、汎用 Linux ディストリビューションに標準で含まれる多くのパッケージ、ツール、インタープリター、依存関係を取り除いている
- 不要なソフトウェアが減ることで、運用オーバーヘッド と セキュリティオーバーヘッド もあわせて低減される
- さまざまなオーケストレーター、プラットフォーム、アーキテクチャ要件は、互換組み合わせごとにビルドされた variant で管理される
- variant は、特定環境で実行するために必要な要素を組み合わせた形態
- 適切な variant を選べば、クラスタに参加するための追加要素は不要
- Bottlerocket 自体には シェルがない
- システムへのアクセスは、シェルを備えた権限付き host コンテナ を通じて可能
- host コンテナでは、基盤 OS を調査し、API を通じて実行中システムの設定を変更できる
イメージベースの安全な更新
- Bottlerocket は更新可能なように設計されているが、パッケージマネージャー は含まない
- 更新は、特定パーティションにダウンロードされる イメージ として配信される
- 更新時にはオーケストレーターがノードを drain した後、Bottlerocket に更新の適用と再起動を指示する
- Bottlerocket はパーティションを切り替え、新バージョンへアトミックにブートする
- システム設定は API で管理されるため、Bottlerocket がバージョン間の設定マイグレーションを処理できる
- 更新中に問題が発生した場合でも、設定を維持したまま以前に動作していたバージョンへ戻せる
- 更新管理は手動でも、オーケストレーター別ツールでも行える
セキュリティ重視の設計
- 最小構成と更新方式は、Bottlerocket の セキュリティ重視設計 を支えている
- variant がイメージとして配信されるため、システム変更によってセキュリティ問題を引き起こしうる パッケージレジストリやマネージャー は不要
- Bottlerocket 独自の機能は Rust と一部 Golang で書かれている
- これら2つの言語はコンパイル言語であり、メモリ安全性に関する組み込み保護を提供する
- すべてのコードは事前コンパイル済みイメージとして配信されるため、シェルやインタープリターが不要で、未検証コードの実行経路が減る
- ルートファイルシステムは 不変
- dm-verity がルートファイルシステムの透過的な整合性検証を提供する
- 基盤ブロックデバイスの変更が検出されると、カーネルが再起動する
- 変更可能なファイルシステムには、常時有効で強制適用される制限付き SELinux ポリシーが適用される
- コンテナが root で実行されても危険な操作を実行できないよう支援するポリシー
1件のコメント
Hacker Newsのコメント
依然として AWS/Amazonのプロジェクトという性格が強く、独立したプロジェクトになる道筋ははっきり見えない
例えばOSの脆弱性スキャンが必要ならAmazon製品を使えばよく、そうでなければ方法が曖昧 https://bottlerocket.dev/en/faq/#4_2
BottlerocketをAWS上でだけ動かすつもりなら問題ないだろうが、Webサイトで述べているように「クラウドやデータセンターで実行」される製品になるには、こうした点を解決する必要がある
パッチ適用状況を知りたいなら、最新バージョンを動かしているかだけ見ればよく、最新なら利用可能なパッチはすべて適用済みの状態である
ただし規制産業では、コンプライアンスのチェックリストに「脆弱性管理」の項目を埋める必要があり、問題になり得る
従来型OSで脆弱性管理が必要な大きな理由は、構成の幅が非常に広く、ソフトウェア構成が複数の出所やベンダーから任意に混ざり、各バージョンが独立して動くためである
しかしコンテナOSはそのように使うものではない
「latest」から追加で脆弱性を見つけ出す作業は、システム所有者が上流のパッチを適時適用する仕事というより、セキュリティ研究者の仕事に近い
Bottlerocketよりも古いプロジェクトである
SSMで入るかadminコンテナを使ってスキャンを実行する方法があるなら、同じようにできるのではないかという純粋な疑問である
イメージをホストマシンにデプロイする前にやれば済むことだ
Bottlerocketは、ほとんどのエンタープライズ向け*nixディストリビューションと違って FIPSモードを提供していない
業務用ホストOSにFIPS承認済み暗号化を必要とするコンプライアンスプログラムを使っている人は、時間を節約してほしい
このため私たちにとってBottlerocketは選択肢ではなく、関連Issueは2年以上活発に開かれているが、開発チームは重要だと確信していないように見える
AWSの専任担当者を通じて開発チームとも話したが、追加する意志はなさそうだった
2年以上開いているスレッドはこれ: https://github.com/bottlerocket-os/bottlerocket/issues/1667
FIPSサポートは今も顧客からの要望の中で圧倒的な最優先事項である
ただし、過去にFIPS提供実績のない新しいディストリビューションにとっては時期が悪い
新規のFIPS 140-2認証はもう取得できず、新規のFIPS 140-3認証は業界全体が移行中のため、長い待ち行列を通る必要がある
開発チームが押し切って解決できることだったなら、すでにそうしていただろう
重要ではないという印象を与えたなら謝る。実際には重要だが、この場合はスケジュールの助けにはならない
必要なら仕方ないが、認証があるということは個人的には少し悪い兆候だと思う
これは自分だけの考えではなく、Microsoft Windowsチームも同じように見ているようだ: https://techcommunity.microsoft.com/t5/microsoft-security-ba...
FIPS自体が悪でないとしても、悪い人々と悪い環境の中で動いている点は覚えておくべきだ https://threadreaderapp.com/thread/1433451378391883782.html
とても興味深そうだが、他のコメントと同じく自分で実行する経路が曖昧に見える
GitHubページもメインページにだけ載っている
VMware向けの案内はここで見つけた: https://github.com/bottlerocket-os/bottlerocket/blob/develop...
CoreOSの方向性と非常によく似ている https://fedoraproject.org/coreos/
“Get Started”にもFAQにも実行方法が載っていない
良いプロジェクトだが、2020年から存在していたもの: https://aws.amazon.com/about-aws/whats-new/2020/08/announcin...
AWSの外でこれをうまく使っている人がいるのか気になる
AMD SEV-SNPのような用途にはかなり有用に見える
マシンの特定の動作を保証するには、カーネル + initrd + 引数に対する測定値が必要だからだ
理想的には、これをコンテナハイパーバイザーとして使い、実行中のコンテナのハッシュに紐づいた証明を生成できるとよさそう
ただしコンテナ脱出がないことが前提だが、この分野の最新状況が今どうなっているのかはよく分からない
むしろCoreOSを使いたい
彼らがAWS外で広く使われているオープンソースを出したことはあるのだろうか?
WebサイトにはOSにシェルがないと書かれている
少なくともシェルスクリプトが1つもない有用なDockerコンテナは想像しにくい
だとすると、シェルがないというのは、Bottlerocketが一部のニッチなシナリオを除けばおおむね使えないという意味ではないのか?
シェルがないのはホストマシンであり、シェル入りのDockerコンテナを持ってきて権限付きで実行すれば、ホスト上でシェルを使える
ホストマシンのシェルバイナリを、ホスト上で実行中のコンテナに提供する方式は一般的ではない
その代わり、この責任をadminコンテナに委譲し、実際の接続はSSM/SSHでそこに対して行う
ここでルートシェルが必要なら、
sheltieユーティリティを使えばよい例えばdistrolessがある
shells | containers | Bottlerocket | OS kernel