Slide 1

Slide 1 text

Docker の Tag を 信じないでください チェシャ猫 (@y_taka_23) Cloud Native Meetup Tokyo #4 (2018/09/11) #cloudnativejp

Slide 2

Slide 2 text

nginx:latest #cloudnativejp

Slide 3

Slide 3 text

nginx:1.15.3 #cloudnativejp

Slide 4

Slide 4 text

イメージの Tag と Digest ● Tag は内容の同一性を保証しない ○ 同じ Tag で違うイメージを上書きできる ○ サーバの乗っ取られると中身が詐称される ● Tag の代わりに Digest も使える ○ イメージの Manifest から一意に生成 ○ user/image@digest の形式で指定 ○ docker pull や Dockerfile 内の FROM で使用可 #cloudnativejp

Slide 5

Slide 5 text

nginx:1.15.3 #cloudnativejp

Slide 6

Slide 6 text

nginx@sha256:24a0c4b4a4c0eb97a1aabb8e2 9f18e917d05abfe1b7a7c07857230879ce7d3d3 #cloudnativejp

Slide 7

Slide 7 text

長い #cloudnativejp

Slide 8

Slide 8 text

中身がわからん #cloudnativejp

Slide 9

Slide 9 text

Notary https://github.com/theupdateframework/notary #cloudnativejp

Slide 10

Slide 10 text

#cloudnativejp

Slide 11

Slide 11 text

Notary is 何? ● 検証可能なデータ配信基盤 ○ The Update Framework (TUF) を実装 ○ サーバや鍵の危殆化が考慮されている ● Docker Content Trust ○ Tag と Digest の対応を保証 ○ Docker Client に Notary Client が統合済み ○ 検証されていない Tag が「見えなく」なる #cloudnativejp

Slide 12

Slide 12 text

https://speakerdeck.com/ytaka23/cloud-native-meetup-tokyo-2nd #cloudnativejp

Slide 13

Slide 13 text

Notary のアーキテクチャ Docker Client #cloudnativejp Notary Server Notary Signer Docker Registry TUF DB Key DB

Slide 14

Slide 14 text

Notary 信頼サーバ + メタデータ Docker Client #cloudnativejp Notary Server Notary Signer Docker Registry TUF DB Key DB

Slide 15

Slide 15 text

Notary 署名サーバ + 署名鍵 Docker Client #cloudnativejp Notary Server Notary Signer Docker Registry TUF DB Key DB

Slide 16

Slide 16 text

TUF の実装 ● 4 種類のメタデータを保存 ○ root : 他のメタデータ用の信頼済み鍵リスト ○ targets : Docker レポジトリのハッシュ値 ○ snapshot : 上記ふたつのハッシュ値 ○ timestamp : snapshot のハッシュ値 ● 各メタデータを別々の鍵で署名 ○ ユーザ側と Notary サーバ側に分散して保存 #cloudnativejp

Slide 17

Slide 17 text

署名用の鍵 Docker Client #cloudnativejp Notary Server Notary Signer Docker Registry TUF DB Key DB root targets snapshot timestamp

Slide 18

Slide 18 text

Image の Digest の取得 Docker Client #cloudnativejp Notary Server Notary Signer Docker Registry TUF DB Key DB push

Slide 19

Slide 19 text

Image の Digest の取得 Docker Client #cloudnativejp Notary Server Notary Signer Docker Registry TUF DB Key DB Digest

Slide 20

Slide 20 text

root と target の生成・署名 Docker Client #cloudnativejp Notary Server Notary Signer Docker Registry TUF DB Key DB root.json targets.json

Slide 21

Slide 21 text

TUF の実装(再掲) ● 4 種類のメタデータを保存 ○ root : 他のメタデータ用の信頼済み鍵リスト ○ targets : Docker レポジトリのハッシュ値 ○ snapshot : 上記ふたつのハッシュ値 ○ timestamp : snapshot のハッシュ値 ● 各メタデータを別々の鍵で署名 ○ ユーザ側と Notary サーバ側に分散して保存 #cloudnativejp

Slide 22

Slide 22 text

snapshot と timestamp の生成 Docker Client #cloudnativejp Notary Server Notary Signer Docker Registry TUF DB Key DB root.json targets.json snapshot.json timestamp.json

Slide 23

Slide 23 text

snapshot と timestamp の署名 Docker Client #cloudnativejp Notary Server Notary Signer Docker Registry TUF DB Key DB root.json targets.json snapshot.json timestamp.json

Slide 24

Slide 24 text

署名済メタデータの保存 Docker Client #cloudnativejp Notary Server Notary Signer Docker Registry TUF DB Key DB root.json targets.json snapshot.json timestamp.json

Slide 25

Slide 25 text

署名済メタデータの保存 Docker Client #cloudnativejp Notary Server Notary Signer Docker Registry TUF DB Key DB root.json targets.json snapshot.json timestamp.json

Slide 26

Slide 26 text

安全性のための仕掛け ● 依存関係にある複数のメタデータ ○ それぞれ独立に署名することで危険性を減らす ○ target 署名鍵のみ流出してもイメージ詐称不可 ● 信頼サーバ・署名サーバの分離 ○ 信頼サーバ に侵入されても鍵自体は流出しない ○ 署名サーバを HSM 化するとより安全 ● ただし root 署名鍵が流出するとアウト #cloudnativejp

Slide 27

Slide 27 text

まとめ ● Docker イメージの同一性 ○ Tag だけでは同一性が保証できない ○ Digest をもっとうまく使いたい ● Notary による Content Trust ○ Digest と Tag を紐づけイメージの詐称を阻止 ● TUF を利用した安全性の担保 ○ 複数の署名を使用、さらに署名サーバを隔離 #cloudnativejp

Slide 28

Slide 28 text

What a Notable Notary! Presented by チェシャ猫 (@y_taka_23) #cloudnativejp