責任共有モデル
Takumi Images を安全に使い続けることは、弊社だけでは完結しません。 責任共有モデル(shared responsibility model)は、上流プロジェクト、弊社、利用者という3者が、それぞれの立場でどこまでを引き受けるかを整理した枠組みです。 このモデルが対象にする次元は、リリース、パッチ適用、テストの3つです。
リリース: 何が「サポート対象」かを決めること
上流プロジェクトは、リリースを切り、そのサポートポリシーを公表する責任を持ちます。 どのバージョンをいつまで保守するか、どんな基準で互換性やリリース間隔を保つかを決めるのは、上流の役割です。 弊社は、上流がサポートするバージョンのビルドを 提供する責任を持ちます。 そして利用者は、上流がサポートするバージョンの範囲に留まる責任を持ちます。
この3者のうち、運用上問題になりやすいのは利用者側の責任です。 上流がサポートを終えた、いわゆる EOL のバージョンを使い続けることは、脆弱性対応が滞る主要な原因になります。 上流の修正が止まった時点で、そのバージョンは公開された脆弱性を蓄積する一方になるためです。 EOL に達したバージョンをどう扱うかは、上流 EOL への対応 にまとめています。
パッチ適用: 誰が何を直すか
パッチ適用の責任は、上流、弊社、利用者のあいだで明確に分かれます。 上流プロジェクトは、自らが依存しているソフトウェアを更新する責任を持ちます。 弊社は、パッチ済みの上流ソースからイメージを組み立てる責任を持ちます。 利用者の責任範囲は、パッチ済みイメージの上に自分が足したものに限られますが、その中身はイメージの使い方によって変わります。
| 利用のしかた | 利用者が負うパッチ責任 |
|---|---|
| Dockerfile などでベースイメージとして拡張する | 追加したアプリケーションと、その依存関係のパッチ |
| イメージをそのまま実行する | 自分の設定やシークレットなど、イメージの外側の運用 |
ベースイメージとして拡張する場合、追加したレイヤーの中身は弊社の管理下にはありません。 そのレイヤーに含めたパ ッケージやライブラリのパッチを利用者自身が追わない限り、弊社がイメージ本体をどれだけ最新に保っても、そのイメージ全体の安全性は保てません。 一方、イメージをそのまま実行するだけであれば、追加するレイヤーがない分、利用者の責任は運用面に絞られます。
テスト: 検証の役割分担
上流プロジェクトは、互換性基準を定める責任を持ちます。 プロジェクトごとに適合基準やベンチマークがあれば、それに沿って「何をもって互換とするか」を決めるのは上流の役割です。 弊社は、その基準を満たす配布物を提供し、機能を検証する責任を持ちます。 利用者は、自分の環境や用途で検証し、段階的にロールアウトする責任を持ちます。
段階的なロールアウトを支えるには、digest 固定と、Renovate や dependabot のような自動更新ツールを組み合わせ、更新のたびに CI で検証することを推奨します。
固定した digest を長期間更新しないと更新の恩恵を受けられず、一方で :latest を無検証で追随すると自分の環境での回帰に気づけません。
自動更新ツールが作成する更新提案を CI に通すことで、この両立ができます。
3者×3次元の一覧
| 次元 | 上流プロジェクト | 弊社 | 利用者 |
|---|---|---|---|
| リリース | リリースとサポートポリシーの公表 | サポート対象バージョンのビルド提供 | サポート対象バージョンへの追従 |
| パッチ適用 | 自らの依存関係の更新 | パッチ済みソースからのイメージ組み立て | 自分が足したものへのパッチ |
| テスト | 互換性基準の策定 | 基準を満たす配布物の提供と機能検証 | 自分の環境や用途での検証と段階的ロールアウト |