OSS探訪GitHubでログイン

実行中のワークロードを検証し、SPIFFE IDに結び付く短命なSVID資格情報を発行する

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
2,569
主要言語
Go
ライセンス
Apache-2.0
リポジトリ最終更新
2026/10/02
ページ内ナビ

概要

SPIREは、サーバーやエージェントが実行中のワークロードを検証し、SPIFFE IDとSVIDを発行するワークロードID基盤です。発行されたX.509証明書やJWTを使い、サービス同士のmTLS接続、トークン署名・検証、外部サービスへの認証を組み立てられます。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

実行環境を検証してIDと短命な資格情報を渡す

SPIRE Serverが信頼ドメインと登録情報を管理し、各ノードのSPIRE Agentがプロセスを検証します。条件に一致したワークロードはWorkload APIからSPIFFE IDと自動更新される短命なSVIDを取得でき、資格情報をアプリケーション設定へ直接埋め込まずに済みます。

出典:[1][3]

mTLS、JWT、Envoy連携へ同じIDを使う

X.509-SVIDは相互TLS接続に、JWT-SVIDはトークンによる認証に利用できます。Envoy向けSecret Discovery Serviceや公式のGo・Javaライブラリも案内されており、ワークロードIDを既存の通信経路へ組み込めます。

出典:[1]

向いている用途

動的に増減するサービスの認証を統一したい環境に向く

Kubernetes、仮想マシン、物理ホストなどにまたがるサービスへ、実行場所を検証して一貫したIDを付けたい場合に適します。証明書ファイルや固定APIキーの配布・更新を個々のアプリケーションから切り離したいチームにも有用です。

出典:[1][3]

導入前の確認

localhostのjoin token構成は評価用として扱う

同梱のサンプル設定は127.0.0.1、join_token、SQLite、メモリ上の鍵管理、example.org信頼ドメインを使います。機能確認には便利ですが、本番では環境に合うノード・ワークロード認証方式、永続的な鍵とデータストア、信頼ドメイン境界、可用性を設計する必要があります。

出典:[4][5][9]

SPIREは秘密管理や認可を単独で置き換えない

SPIREが担う中心機能はワークロードIDの検証と資格情報の発行です。秘密の保管、利用者ID、サービス間の許可判断を含む全機能を一つで提供する製品ではないため、既存の秘密管理、認可ポリシー、サービスメッシュとの責任分担を決めてください。

出典:[1][10]

参考にした公式資料

  1. [1]SPIRE v1.15.3 README(2026-10-04)
  2. [2]SPIRE v1.15.3 release(2026-10-04)
  3. [3]SPIRE architecture overview(2026-10-04)
  4. [4]SPIRE v1.15.3 localhost server configuration(2026-10-04)
  5. [5]SPIRE v1.15.3 localhost agent configuration(2026-10-04)
  6. [6]SPIRE v1.15.3 Go toolchain requirement(2026-10-04)
  7. [7]SPIRE v1.15.3 server healthcheck implementation(2026-10-04)
  8. [8]SPIRE v1.15.3 agent healthcheck implementation(2026-10-04)
  9. [9]SPIRE v1.15.3 scaling and deployment guide(2026-10-04)
  10. [10]SPIRE comparison with adjacent systems(2026-10-04)
編集部からの補足

固定した長期資格情報を各サービスへ配る運用から、実行環境の検証に基づくSPIFFE IDと短命なSVID資格情報へ移行したいチームに注目してほしい基盤です。評価時はデモ用のjoin tokenやメモリ鍵管理を本番設計と混同せず、信頼ドメイン、ノード認証、永続化、高可用性を別途設計してください。

3ステップで試す

  1. 1

    専用領域へv1.15.3を取得してビルド

    Go 1.26.6以上、make、Python 3、GNU timeout(macOSではcoreutilsのgtimeout)を用意し、権限を絞った固有の一時領域で固定タグをビルドします。

    umask 077 && spire_demo_dir=$(mktemp -d "${TMPDIR:-/tmp}/spire-demo.XXXXXX") && cd "$spire_demo_dir" && git clone --branch v1.15.3 --depth 1 https://github.com/spiffe/spire.git && cd spire && go_version=$(go env GOVERSION) && awk -v v="${go_version#go}" 'BEGIN{split(v,a,".");exit !((a[1]>1)||(a[1]==1&&a[2]>26)||(a[1]==1&&a[2]==26&&a[3]>=6))}' && timeout_bin=$(command -v timeout || command -v gtimeout) && test -n "$timeout_bin" && make bin/spire-server bin/spire-agent
  2. 2

    固有のlocalhost設定を準備

    共有PID・token・socketファイルを使わず、固有のデータ領域、socket、空きlocalhostポートを参照する評価用設定を作ります。

    spire_port=$(python3 -c 'import socket;s=socket.socket();s.bind(("127.0.0.1",0));print(s.getsockname()[1]);s.close()') && run_dir="$spire_demo_dir/run" && server_conf="$spire_demo_dir/server.conf" && agent_conf="$spire_demo_dir/agent.conf" && mkdir -p "$run_dir" "$spire_demo_dir/server-data" "$spire_demo_dir/agent-data" && cp conf/server/server.conf "$server_conf" && cp conf/agent/agent.conf "$agent_conf" && sed -i.bak -e "s#bind_port = \"8081\"#bind_port = \"$spire_port\"#" -e "s#/tmp/spire-server/private/api.sock#$run_dir/server.sock#" -e "s#data_dir = \"./.data\"#data_dir = \"$spire_demo_dir/server-data\"#" "$server_conf" && sed -i.bak -e "s#server_port = \"8081\"#server_port = \"$spire_port\"#" -e "s#/tmp/spire-agent/public/api.sock#$run_dir/agent.sock#" -e "s#data_dir = \"./.data\"#data_dir = \"$spire_demo_dir/agent-data\"#" "$agent_conf"
  3. 3

    SVIDを取得し、所有プロセスを必ず回収

    一つのsubshell内でサーバーとエージェントを起動し、各問い合わせをGNU timeoutで制限してX.509-SVIDを取得します。成功・失敗のどちらでも、この手順が所有するPIDだけをkillしてwaitし、呼び出し元のtrapは変更しません。

    ( set -e; s= a=; cleanup(){ for p in "$a" "$s"; do test -z "$p" || kill "$p" 2>/dev/null || true; done; for p in "$a" "$s"; do test -z "$p" || wait "$p" 2>/dev/null || true; done; }; ready(){ for i in 1 2 3 4 5 6 7 8 9 10; do "$timeout_bin" 2s "$@" >/dev/null 2>&1 && return; sleep 1; done; return 1; }; trap cleanup EXIT INT TERM; ./bin/spire-server run -config "$server_conf" >"$spire_demo_dir/server.log" 2>&1 & s=$!; ready ./bin/spire-server healthcheck -socketPath "$run_dir/server.sock"; token=$("$timeout_bin" 5s ./bin/spire-server token generate -socketPath "$run_dir/server.sock" -spiffeID spiffe://example.org/myagent | awk '/Token:/{print $2}'); test -n "$token"; ./bin/spire-agent run -config "$agent_conf" -joinToken "$token" >"$spire_demo_dir/agent.log" 2>&1 & a=$!; ready ./bin/spire-agent healthcheck -socketPath "$run_dir/agent.sock"; "$timeout_bin" 5s ./bin/spire-server entry create -socketPath "$run_dir/server.sock" -parentID spiffe://example.org/myagent -spiffeID spiffe://example.org/demo -selector "unix:uid:$(id -u)"; "$timeout_bin" 10s ./bin/spire-agent api fetch x509 -socketPath "$run_dir/agent.sock" )
公式READMEで確認

成長

成長の推移 · 直近30日

2,569 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
37
Open PR
25

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

GitHubデータ

GitHubのデータGitHubの詳細データを見る
Stars
2,569
Forks
671
Watchers
79
Open Issues
92
Contributors
289
所有者種別
Organization
主要言語
Go
ライセンス
Apache-2.0
リポジトリ最終更新
2026/10/02

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?