メインコンテンツまでスキップ

責任共有モデル

Takumi Images を安全に使い続けることは、弊社だけでは完結しません。 責任共有モデル(shared responsibility model)は、上流プロジェクト、弊社、利用者という3者が、それぞれの立場でどこまでを引き受けるかを整理した枠組みです。 このモデルが対象にする次元は、リリース、パッチ適用、テストの3つです。

リリース: 何が「サポート対象」かを決めること

上流プロジェクトは、リリースを切り、そのサポートポリシーを公表する責任を持ちます。 どのバージョンをいつまで保守するか、どんな基準で互換性やリリース間隔を保つかを決めるのは、上流の役割です。 弊社は、上流がサポートするバージョンのビルドを提供する責任を持ちます。 そして利用者は、上流がサポートするバージョンの範囲に留まる責任を持ちます。

この3者のうち、運用上問題になりやすいのは利用者側の責任です。 上流がサポートを終えた、いわゆる EOL のバージョンを使い続けることは、脆弱性対応が滞る主要な原因になります。 上流の修正が止まった時点で、そのバージョンは公開された脆弱性を蓄積する一方になるためです。 EOL に達したバージョンをどう扱うかは、上流 EOL への対応 にまとめています。

パッチ適用: 誰が何を直すか

パッチ適用の責任は、上流、弊社、利用者のあいだで明確に分かれます。 上流プロジェクトは、自らが依存しているソフトウェアを更新する責任を持ちます。 弊社は、パッチ済みの上流ソースからイメージを組み立てる責任を持ちます。 利用者の責任範囲は、パッチ済みイメージの上に自分が足したものに限られますが、その中身はイメージの使い方によって変わります。

利用のしかた利用者が負うパッチ責任
Dockerfile などでベースイメージとして拡張する追加したアプリケーションと、その依存関係のパッチ
イメージをそのまま実行する自分の設定やシークレットなど、イメージの外側の運用

ベースイメージとして拡張する場合、追加したレイヤーの中身は弊社の管理下にはありません。 そのレイヤーに含めたパッケージやライブラリのパッチを利用者自身が追わない限り、弊社がイメージ本体をどれだけ最新に保っても、そのイメージ全体の安全性は保てません。 一方、イメージをそのまま実行するだけであれば、追加するレイヤーがない分、利用者の責任は運用面に絞られます。

テスト: 検証の役割分担

上流プロジェクトは、互換性基準を定める責任を持ちます。 プロジェクトごとに適合基準やベンチマークがあれば、それに沿って「何をもって互換とするか」を決めるのは上流の役割です。 弊社は、その基準を満たす配布物を提供し、機能を検証する責任を持ちます。 利用者は、自分の環境や用途で検証し、段階的にロールアウトする責任を持ちます。

段階的なロールアウトを支えるには、digest 固定と、Renovate や dependabot のような自動更新ツールを組み合わせ、更新のたびに CI で検証することを推奨します。 固定した digest を長期間更新しないと更新の恩恵を受けられず、一方で :latest を無検証で追随すると自分の環境での回帰に気づけません。 自動更新ツールが作成する更新提案を CI に通すことで、この両立ができます。

3者×3次元の一覧

次元上流プロジェクト弊社利用者
リリースリリースとサポートポリシーの公表サポート対象バージョンのビルド提供サポート対象バージョンへの追従
パッチ適用自らの依存関係の更新パッチ済みソースからのイメージ組み立て自分が足したものへのパッチ
テスト互換性基準の策定基準を満たす配布物の提供と機能検証自分の環境や用途での検証と段階的ロールアウト