$30 off During Our Annual Pro Sale. View Details »

Docker の Tag を信じないでください #cloudnativejp / Cloud Native Meetup Tokyo 4th

y_taka_23
September 11, 2018

Docker の Tag を信じないでください #cloudnativejp / Cloud Native Meetup Tokyo 4th

Cloud Native Meetup Tokyo #4 で使用したスライドです。CNCF プロジェクトのひとつ、Notary についてその役割とアーキテクチャを解説しています。Notary は何らかのデータを安全に配信するためのフレームワークで、同じく CNCF プロジェクトの The Update Framework (TUF) に基づいています。特に Docker の Tag と Digest を結びつけることで Docker image が改竄されていないことを保証でき、Docker Hub でも利用可能です。

イベント概要:https://cloudnative.connpass.com/event/97281/

y_taka_23

September 11, 2018
Tweet

More Decks by y_taka_23

Other Decks in Technology

Transcript

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

    View Slide

  2. nginx:latest
    #cloudnativejp

    View Slide

  3. nginx:1.15.3
    #cloudnativejp

    View Slide

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

    View Slide

  5. nginx:1.15.3
    #cloudnativejp

    View Slide

  6. nginx@sha256:24a0c4b4a4c0eb97a1aabb8e2
    9f18e917d05abfe1b7a7c07857230879ce7d3d3
    #cloudnativejp

    View Slide

  7. 長い
    #cloudnativejp

    View Slide

  8. 中身がわからん
    #cloudnativejp

    View Slide

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

    View Slide

  10. #cloudnativejp

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide