Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Challenging_Secure_Introduction_With_SPIFFE.pdf

Tomoya Usami
July 23, 2019
2.3k

 Challenging_Secure_Introduction_With_SPIFFE.pdf

Tomoya Usami

July 23, 2019
Tweet

Transcript

  1. アジェンダ 1. Can You Keep A Secret Secret? 2. Secure

    Introduction 3. SPIFFE 4. Our Challenges 5. More Challenges
  2. Generally, If you can protect the first secret, you can

    protect any secret. https://bit.ly/2YlUyLe
  3. IP Address ? Firewall ? ▶ 柔軟性の問題 + Workloadを配置する物理的な場所に縛られる ▶

    動的なポリシー更新の問題 + 実装は難しく、短命なワークロードの環境ではさらに困難 ▶ Cloud Native環境ではIPアドレスはあまり意味をもたない + k8sのようなWorkloadが同⼀IPアドレス空間に配置されて、頻繁に作り直しさ れる環境ではIPアドレスでの制御は難しい
  4. Kubernetesの場合はSA Tokenが使える? ▶ 確かに同じようなアプローチで、PodがSA Tokenを使ってSecret Storeにログイ ンし、シークレットを取得することができます。 ▶ (今の) SA

    Tokenの問題 + 有効期限が設定されていない + Pod単位での認証が難しい ※これらは現在進められている新しい仕様のSA Tokenに置き換わることによって 将来的に解決する⾒込みはあると思います。
  5. SPIFFEプロジェクトについて ▶ 2018年に Sandbox プロジェクトとして CNCF の仲間⼊り ▶ すでに有名な企業で導⼊されている +

    Uber + Pinterest + Square, + さらに多くの企業も興味を持っている(Cisco, VMware, Rancher, Twilio )
  6. ジェイソン・ボーン モデル ▶ ボーンアイデンティティの冒頭のシーン + 主⼈公は何も知らない状態から始まる + 第三者から情報を与えられる + それを使って必要な情報を取得、⾏動を起こしていく

    SPIFFEではジェイソン・ボーン モデルに従って、何も知らない状態のホストやア プリケーションに対して、⾏動を起こすための情報を与える。 https://www.amazon.co.jp/dp/B00007G0LR
  7. SPIFFE 現在SPIFFE が標準化するものは3つ ▶ 統⼀された識別⼦ + SPIFFE ID ▶ SPIFFE

    IDを含む検証可能なデータフォーマット + SVID (SPIFFE Verification Identity Document) ▶ SVIDを発⾏・取得するためのプラットフォームに依存しないAPI + Workload API, Federation API
  8. SVID ▶ 3つのコンポーネントから構成されるデータフォーマット + A SPIFFE ID + A Valid

    Signature + An Optional Public Key ▶ 現在仕様が固まっているフォーマットは2つ + X.509 SVID + JWT SVID
  9. X.509 SVID Data: Version: 3 (0x2) Serial Number: 4 (0x4)

    Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, O=SPIFFE X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Key Encipherment, Key Agreement X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Subject Alternative Name: URI:spiffe://example.org/host/workload
  10. JWT SVID { "aud":"sidecar", "exp":1551170058, "iat":1551169758, "sub": "spiffe://prod.acme.com/payments/web" } Issuer

    Web API JWT SVIDください JWT SVID JWT Auth iss
 (issuer) sub (subject) aud (audience) payload
  11. Workload API ▶ gRPCのストリーミングにより接続 ▶ エンドポイントで直接的な認証は実装しない + カーネルやオーケストレータに問い合わせて呼び出し元のプロセスを特定 ▶ SPIFFE

    IDとSVIDおよびSVIDを検証するための証明書や鍵ペアを取得できる + X.509 SVID + SPIFFE ID, Certificate and Private-Key, Trust CA Bundles + JWT SVID + SPIFFE ID, JWT, Trust Public-Key Bundles
  12. Workload API Workload API workload
 (src) workload
 (dst) JWT SVID

    X.509 SVID 私は誰ですか? 信頼できる送信元? gRPC gRPC あなたのIDです 検証⽤データ
  13. Federation API Workload API workload
 (src) workload
 (dst) JWT SVID

    X.509 SVID Workload API Federation API Federation API Federationによりお互いのTrust Bundleを交換
  14. SPIREの構成 •SPIRE Server •SPIRE Agent(ノード毎) SPIRE Component SPIRE Agent SPIRE

    Server SPIRE Agent SPIRE Agent Workload Workload Workload Workload Workload Workload
  15. Node Attestation (OpenStack) Agent Attest Node Fetch Node information Fetch

    Node data Signed Node Identifier Sign Identifier Node Attestor Node Attestor Server MetaData Service Nova API Attestation Request w/ Node information
  16. Workload Attestation Workload Provider SPIRE Agent Fetch Identifier Kernel /

    Orchestrator SPIRE Server Fetch Workload data Attest Attested Node
  17. Workload Attestation(e.g., K8S) Client Agent Fetch workload identifier Fetch workload

    information Attest workload 
 (compare entry) Signed workload Identifier Workload Attestor Server kubelet sync entries related to Node Attested Instance Kernel
  18. Authenticate with JWT SVID workload Authentication Request Verify JWT sync

    public keys Verify 
 subject, audience claims Fetch Secrets Token /auth/jwt/login /secret/data/:path
  19. Authenticate with JWT SVID workload Authentication Request Verify JWT sync

    public keys Verify 
 subject, audience claims Fetch Secrets Token /auth/jwt/login /secret/data/:path JWK未サポート ※次バージョンでは 解消されそう
  20. Authenticate with X.509 SVID workload Authentication Request Verify TLS Cert

    sync CA cert Verify 
 SAN field Fetch Secrets Token /auth/cert/login /secret/data/:path
  21. Authenticate with X.509 SVID workload Authentication Request Verify TLS Cert

    sync CA cert Verify 
 SAN field Fetch Secrets Token /auth/cert/login /secret/data/:path 1個しかセット
 できなさそう CNフィールド必須
  22. OpenStack Metadata { "uuid": "d8e02d56-2648-49a3-bf97-6be8f1204f38", "availability_zone": "nova", "hostname": "test.novalocal", "launch_index":

    0, "meta": { "priority": "low", "role": "webserver" }, "project_id": "f7ac731cc11f40efbc03a9f9e1d1d21f", "public_keys": “…”, "name": "test" }
  23. OpenStack Metadata $ curl http://169.254.169.254/2009-04-04/meta-data/ ami-id local-hostname ami-launch-index local-ipv4 ami-manifest-path

    placement/ block-device-mapping/ public-hostname hostname public-ipv4 instance-action public-keys/ instance-id ramdisk-id instance-type reservation-id kernel-id security-groups
  24. OpenStack IIDの例 { "iid": { "data": “eyJhbGciOiJFUzM4NCIsImtpZCI6IjgxOW…vQ_uXMNiTwhCuJkqnpKAui6XKiM0… CTQwkbA5ePfwO9MjzcMFzPL-VUMZo77VjXBu” }, "iid_keys":

    { "keys": [ { "use": "sig", "crv": "P-384", "kty": "EC", "alg": "ES384", "y": "izVeFkEF7HxFlhWL69wN46bSh_Fb-FhfeuouxgSqdjR39GczxhXvztq0AukORw48", "x": "nY6zWiORxfRX0aEGB9ykiycUCTgVfWC_6mEF5xQW1dGdlD7u2bjAUrzj3Yuga8BE", "kid": "e225f0db90671819000576ec37fd34f787edb303" } ] } }
  25. Node Attestation (with IID) Node Agent Attestation Request w/ IID

    Attest Instance Fetch verification keys Fetch instance data Signed Instance Identifier Sign Identifier MetaData Service Metadata Service Instance Identity Documents(IID) public keys verify signature Server
  26. ▶ SPIFFE Meetup Tokyo 主催しています! ▶ https://spiffe-jp.connpass.com/ ▶ 2019/5 に第⼀回を開催

    + Youtube にSPIFFE Meetup Tokyo チャンネルあります + 前回の動画も公開しています! ▶ 第⼆回の開催を秋頃に予定していますのでぜひご参加ください! SPIFFE Meetup Tokyoについて