テックカリキュラム

SPIFFE / SPIRE実装編 ── Kubernetesで実現するゼロトラストWorkload Identity

SPIFFE / SPIRE実装編 ── Kubernetesで実現するゼロトラストWorkload Identity

はじめに

ゼロトラストアーキテクチャにおいて最も重要なのは、「誰が通信しているか」を正確に識別するIdentity(アイデンティティ)です。

Kubernetesでは従来、ServiceAccountがその役割を担っていましたが、マルチクラスタやService Mesh環境では不十分です。

そこで登場するのが:

  • SPIFFE:Workload Identityの標準仕様
  • SPIRE:SPIFFEを実装するためのOSS

本記事では、SPIFFE/SPIREの実装を体系的に解説します。


1. SPIFFEとは?

SPIFFE(Secure Production Identity Framework for Everyone)は、ワークロードに対して一意なIDを付与するための標準です。

SPIFFE IDの例

spiffe://example.org/ns/default/sa/my-app
  • scheme:spiffe://
  • trust domain:example.org
  • パス:namespace / service account

このIDを使って、サービス間の認証を行います。


2. SPIREとは?

SPIREはSPIFFEを実装するためのリファレンス実装です。

構成要素

コンポーネント役割
SPIRE ServerIDの発行・管理
SPIRE Agent
Workload API

3. アーキテクチャ

 SPIRE Server ↓ SPIRE Agent(Nodeごと) ↓ Workload(Pod) ↓ SPIFFE ID + 証明書発行 

SPIREはX.509証明書としてIDを配布します。


4. Kubernetesへの導入手順

① HelmでSPIREインストール

helm repo add spiffe https://spiffe.github.io/helm-charts helm install spire spiffe/spire

② コンポーネント確認

kubectl get pods -n spire
  • spire-server
  • spire-agent

5. Workload登録(重要)

どのPodにどのSPIFFE IDを割り当てるか定義します。

spire-server entry create \ -spiffeID spiffe://example.org/ns/default/sa/my-app \ -selector k8s:ns:default \ -selector k8s:sa:my-app

selectorでPodを識別します。


6. Pod側でのID取得

WorkloadはSPIRE Agent経由で証明書を取得します。

環境変数

SPIFFE_ENDPOINT_SOCKET=/run/spire/sockets/agent.sock

Goでの取得例

source, _ := workloadapi.NewX509Source(ctx) svid := source.GetX509SVID()

これでSPIFFE IDと証明書が取得できます。


7. mTLS通信の実装

SPIFFE証明書を使って安全な通信を実現します。

tlsConfig := tlsconfig.MTLSClientConfig(source, source, tlsconfig.AuthorizeAny())

これにより、双方のIDを検証します。


8. Istioとの統合

IstioはSPIFFEをネイティブサポートしています。

内部ID

spiffe://cluster.local/ns/default/sa/my-app

連携メリット

  • mTLS自動化
  • 認証・認可ポリシー統合

9. マルチクラスタ対応

Trust Domain設計

cluster-a → spiffe://a.example.org cluster-b → spiffe://b.example.org

Federation設定

異なるTrust Domain間で信頼関係を構築します。


10. 運用ベストプラクティス

  • 証明書は短命(数時間)
  • 自動ローテーション必須
  • Trust Domainを明確に分離
  • 監査ログを収集

11. よくある構成パターン

 SPIRE + Istio + Kubernetes ↓ 完全ゼロトラスト環境 
  • SPIRE → ID発行
  • Istio → 通信制御

まとめ

  • SPIFFEはWorkload Identityの標準
  • SPIREでKubernetesに実装可能
  • 証明書ベースでmTLSを実現
  • Service Meshと組み合わせると強力

SPIFFE/SPIREは、ゼロトラスト時代のID基盤そのものです。