SPIFFE in Action

SPIFFE in Action

SPIFFE Meetup Tokyo #1 - connpass https://spiffe-jp.connpass.com/event/126507/

E32fe793290d1e72b0a78648da9c687b?s=128

Naoki Ainoya

May 14, 2019
Tweet

Transcript

  1. 2.

    Naoki Ainoya / @naokiainoya ▶ 基盤研究開発エンジニア@ZLab ▶ “Kubernetes as a

    Service”に必要なインフラの開発に従事 + SPIFFE/SPIREへの取り組みはその仕事のひとつ
  2. 3.

    本⽇お話したいこと ▶ SPIREͷ֓ཁ ▶ SPIREͷߏ੒ཁૉ ▶ SPIREͰSVIDΛൃߦ͢Δ·Ͱͷϑϩʔ ▶ ZLabͰͷऔΓ૊Έ +

    SPIFFE/SPIREΛ࢖༻ͨ͠OpenStackͰͷSecure Introduction ͷ࣮૷ ▶ Further Challenges
  3. 5.

    SPIREとは ▶ SPIFFEの参照実装 + https://github.com/spiffe/spire + golangで書かれている ▶ SPIFFE Workload

    APIを実装 + workloadを検証(attest)し、
 SPIFFE IDとSVIDを発⾏する機能を持つ
 workload: コンテナやプロセスなどのソ フトウェアシステムの実⾏単位
  4. 6.

    SPIREの構成概略 ▶ SPIRE ServerとAgentで構成 + Agentはworkloadが動作するNode毎に動作 ▶ SPIRE Server +

    Registration API + workloadの情報管理 + Node API + SVIDへの署名 ▶ SPIRE Agent + Workload API + WorkloadへSPIFFE ID/SVIDを供給 https://spiffe.io/spire/overview/
  5. 8.

    SPIREの主要機能 ▶ Node Attestation + Nodeのアイデンティティ検証 ▶ Workload Registration +

    Node上で動作するWorkloadのデータ登録 ▶ Workload Attestation + Workloadのアイデンティティ検証 1.Node Attestation 2.Workload Registration 3.Workload Attestation
  6. 9.

    SPIREの主要機能 ▶ Node Attestation + Nodeのアイデンティティ検証 ▶ Workload Registration +

    Node上で動作するWorkloadのデータ登録 ▶ Workload Attestation + Workloadのアイデンティティ検証 1.Node Attestation 2.Workload Registration 3.Workload Attestation
  7. 11.

    Node Attestation on AWS 1. Agent(インスタンス)がインスタンスのアイ デンティティを取得 + インスタンスアイデンティティ: AWSが署

    名したインスタンスのメタデータ
 https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/instance- identity-documents.html https://spiffe.io/spire/overview/
  8. 15.

    SPIREの主要機能 1.Node Attestation 2.Workload Registration 3.Workload Attestation ▶ Node Attestation

    + Nodeのアイデンティティ検証 ▶ Workload Registration + Node上で動作するWorkloadのデータ登録 ▶ Workload Attestation + Workloadのアイデンティティ検証
  9. 17.

    Registration Entryの中⾝ ▶ Workloadの識別情報をRegistration Entryとして登録 ▶ SPIRE Serverがworkloadのアイデンティティを検証する際に利⽤ Registration Entryʹؚ·ΕΔ߲໨

    エントリ名 概要 例 SPIFFE ID Workload⾃⾝のSPIFFE ID spiffe://example.org/workload Selector Workloadのメタ情報(複数可) unix:user:nginx unix:path:/usr/bin/nginx Parent ID 親として紐付けたいエントリのSPIFFE ID Selectorの値が継承される spiffe://example.org/my-cluster
  10. 18.

    Registration Entryの中⾝ ▶ Selectorはworkloadのメタ情報 ▶ Agentから送られてきたworkloadのselector情報と登録済み情報を照合し、 SVIDの発⾏可否を判断 Registration Entryʹؚ·ΕΔ߲໨ エントリ名

    概要 例 SPIFFE ID Workload⾃⾝のSPIFFE ID spiffe://example.org/workload Selector Workloadのメタ情報(複数可) unix:user:nginx unix:path:/usr/bin/nginx Parent ID 親として紐付けたいエントリのSPIFFE ID Selectorの値が継承される spiffe://example.org/my-cluster
  11. 19.

    SPIREの主要機能 1.Node Attestation 2.Workload Registration 3.Workload Attestation ▶ Node Attestation

    + Nodeのアイデンティティ検証 ▶ Workload Registration + Node上で動作するWorkloadのデータ登録 ▶ Workload Attestation + Workloadのアイデンティティ検証
  12. 26.

    K8sのWorkload Attestation 1. cgroupから得られるpod idと呼び出し元 のpod idを照合 2. Pod idをキーにしてkubeletにpodの情報

    を取得 3. podの情報をworkloadのselector情報と して格納
 https://github.com/spiffe/spire/blob/master/doc/ plugin_agent_workloadattestor_k8s.md https://spiffe.io/spire/overview/ Workload Attestationのフロー
  13. 29.

    SPIRE Serverを構成するプラグイン ▶ Datastore + Selectorのデータなどを永続化 ▶ KeyManager + SVID署名時に利⽤する鍵ペアの管理

    ▶ Upstream CA + SVIDのCAを外部のPKI配下にする場合に
 利⽤ https://spiffe.io/spire/overview/
  14. 30.

    SPIRE Serverを構成するプラグイン ▶ NodeAttestor + Nodeの⾝元を検証する + 例)GCPインスタンス⽤のプラグイン + インスタンスIDトークンを検証し


    インスタンスのアイデンティティを
 確認
 https://github.com/spiffe/spire/blob/master/doc/ plugin_agent_nodeattestor_gcp_iit.md https://spiffe.io/spire/overview/
  15. 31.

    SPIRE Serverを構成するプラグイン ▶ NodeResolver + Nodeに紐づくメタデータを取得して
 Selectorとして格納する + 例)AWS⽤のプラグイン +

    インスタンスの各情報を取得 + セキュリティグループ名/ID + タグ情報etc..
 https://github.com/spiffe/spire/blob/master/doc/ plugin_server_noderesolver_aws_iid.md
 https://spiffe.io/spire/overview/
  16. 38.
  17. 59.

    VaultとSPIREの連携 ▶ Spire-vault-plugin + Upstream CA Plugin ▶ Svid-verification-key-sync +

    SPIREとVault間で認証情報を同 期する仕組み ▶ Secret-agent + workloadの代⾏でVaultから secretを取得する仕組み
  18. 60.

    Spire-vault-plugin ▶ https://github.com/zlabjp/spire- vault-plugin ▶ Upstream CA Plugin + VaultのPKI

    Secret Engineを利⽤ + https://www.vaultproject.io/docs/secrets/pki/index.html + SPIRE Serverが⾃⾝のCA証明書の CSRを作成し、Vaultに署名しても らう機構
  19. 61.

    Svid-verification-key-sync ▶ (ソースコード⾮公開) ▶ VaultのJWT Auth MethodとSPIREのJWT SVIDの 認証⽤公開鍵を同期する機構 +

    x.509 SVIDとVaultのTLS Auth Methodを利⽤ しないのは、x.509 SVIDのCommon Nameが 設定されていない仕様だったためVault側の 要求と噛み合わなかった + (注)現在はx.509 SVIDのCommon Nameに値 を設定できるようになっている
 https://github.com/spiffe/spire/pull/798 SPIRE Server ①JWT SVIDの 公開鍵を
 JWT Auth Methodに
 同期 Workload ②JWT SVIDで
 Vault認証できる
  20. 62.

    Svid-verification-key-sync ▶ VaultのJWT Auth Methodに新しい拡張が⼊り、 JSON Web Key Set (JWKS)を外部サーバに問い

    合わせできるようになった
 https://github.com/hashicorp/vault-plugin- auth-jwt/pull/43 + 今後は、この仕組みを使うように修正予定 SPIRE Server+JWKS ①JWT Auth Method 認証時、公開鍵リス トを照合 Workload ②JWT SVIDで
 Vault認証できる
  21. 66.

    Node Attestationのプロセスをより厳格に ▶ VendordataのDynamicJSONを使うと良さそ う + インスタンスのメタデータ作成時、外部 サーバに問い合わせて動的にデータを作 成する機能 +

    インスタンス情報への署名データを埋め 込み、検証するサーバを⽤意すればよい 署名Server 2. インスタンスIDへの
 署名を要求 1. metadataサーバに
 情報を要求 VM 3. 署名された
 アイデンティティ
 が⼊ったメタデータ
 を返却
  22. 67.

    SPIRE Server冗⻑化のためのDataStore探し ▶ DataStoreプラグイン + SQLite.PostgreSQL サポートがある ▶ PostgreSQLを選択したとして、そのDBインス タンスのアイデンティティ検証ができない

    + AWS,GCP..ならマネージドを使えばよいが… ▶ DataStoreプラグインの⾃作を予定 + バックエンド案)Openstack Swift, etcd, Vault.. SPIRE Server Trusted DataStore?
  23. 68.
  24. 69.

    まとめ ▶ SPIFFEの参照実装としてSPIREというものがある ▶ インスタンスのアイデンティティの活⽤範囲は広い + Z Labでの取り組みとして、Vaultと組み合わせたSecure Introductionを紹介 +

    SPIFFE ID/SVIDというユニバーサルな仕様の恩恵 ▶ エコシステムは発展途上 + プラグイン開発などを通じて積極的にSPIFFEコミュニティへ貢献していく
  25. 70.
  26. 71.

    参考⽂献 ▶ SPIFFE ‒ Secure Production Identity Framework for Everyone


    https://spiffe.io/spire/overview/ + SPIREの概要が⼀通り書かれている。このスライドのほとんどは本資料から引 ⽤ ▶ spire/SPIRE101.md at master · spiffe/spire
 https://github.com/spiffe/spire/blob/master/doc/SPIRE101.md ▶ spire/doc at master · spiffe/spire
 https://github.com/spiffe/spire/tree/master/doc + SPIREのプラグイン含めた実装に関するドキュメント群
  27. 72.

    参考⽂献 ▶ scytale.io
 https://blog.scytale.io/ + SPIFFE/SPIREプロジェクトに⼒を注いでいるscytale.io社のブログ ▶ SPIFFE Community Day

    May 2019: Recap and Videos ‒ scytale.io
 https://blog.scytale.io/spiffe-community-day-may-2019-recap-and- videos-61a672e0c728 + SPIFFEのイベントが定期的に開催されている。プロジェクトの動向を知りた い場合におすすめ。ネット中継あり