Skip to content

SPIFFE

SPIFFE は、秘密の事前配布なしに、ワークロードへ短命で暗号学的に検証可能な ID を与えるための標準群である。

  • カテゴリ: Identity & Policy
  • CNCF 成熟度: Graduated
  • 言語: Go
  • ライセンス: Apache-2.0
  • リポジトリ: spiffe/go-spiffe
  • ドキュメント基準コミット: e9973f6 (v2.8.1)

何をするものか

SPIFFE (Secure Production Identity Framework For Everyone) は、ワークロード ID のためのベンダ中立な標準群である。定義するのは 3 つ。SPIFFE ID (ワークロードを名付ける spiffe:// URI)、SVID (検証可能な ID ドキュメントである X509-SVID または JWT-SVID)、Workload API (SVID を発行・ローテーションする gRPC API) である。これらの標準を実装するリファレンスのサーバ/エージェントは別プロジェクトの SPIRE にある。

このディープダイブは、アプリケーションが SPIFFE を利用するための正準 Go クライアントライブラリ spiffe/go-spiffe を読む。Workload API をラップし、ワークロード間の相互認証 TLS、X509-SVID と JWT-SVID の取得・検証、トラストバンドル管理を提供する (README.md:5-9)。

ワークロードは長命なクレデンシャルを一切見ない。ローカルの Workload API エンドポイント (Unix ソケット越しの SPIRE Agent) に接続し、エージェントがワークロードをアテステーションし、go-spiffe が新規発行された SVID をアプリの TLS 設定へ流し込む。ID は証明書中の URI であり、認可はその URI を許可集合と照合することである。

いつ使うか

  • クラスタ・クラウド・VM をまたいでサービスを動かし、プラットフォームごとの IAM ではなく単一の ID モデルを使いたいとき。
  • ピアの ID がホスト名や共有トークンではなく spiffe:// URI であるような、サービス間 mTLS が欲しいとき。
  • 別々のトラストドメイン間で信頼を連携させ、一方のワークロードが他方のワークロードを認証できるようにしたいとき。
  • 人間やエンドユーザの認証だけが必要な場合は不向き。SPIFFE は人ではなくワークロードを識別する。
  • 単一プラットフォームのネイティブなワークロード ID (例: クラウド IAM) で要件が満たせるなら、運用負荷が増えるだけになる。

このディープダイブの構成

出典

  1. spiffe/go-spiffe リポジトリ (pinned v2.8.1)。
  2. SPIFFE and SPIRE Projects Graduate from CNCF
  3. SPIFFE project page (CNCF)
  4. SPIFFE standards (SPIFFE-ID / SVID / Workload API)
  5. spiffe.io and SPIRE case studies
  6. Uber: Our Journey Adopting SPIFFE/SPIRE at Scale
  7. spiffe/spire ADOPTERS.md
  8. go-spiffe v2 Go package reference