ページ内ナビ
概要
SPIREは、サーバーやエージェントが実行中のワークロードを検証し、SPIFFE IDとSVIDを発行するワークロードID基盤です。発行されたX.509証明書やJWTを使い、サービス同士のmTLS接続、トークン署名・検証、外部サービスへの認証を組み立てられます。
特徴と向いている用途
公式資料に基づく紹介・実機未検証 · 内容確認日:
主な特徴
実行環境を検証してIDと短命な資格情報を渡す
SPIRE Serverが信頼ドメインと登録情報を管理し、各ノードのSPIRE Agentがプロセスを検証します。条件に一致したワークロードはWorkload APIからSPIFFE IDと自動更新される短命なSVIDを取得でき、資格情報をアプリケーション設定へ直接埋め込まずに済みます。
mTLS、JWT、Envoy連携へ同じIDを使う
X.509-SVIDは相互TLS接続に、JWT-SVIDはトークンによる認証に利用できます。Envoy向けSecret Discovery Serviceや公式のGo・Javaライブラリも案内されており、ワークロードIDを既存の通信経路へ組み込めます。
出典:[1]
向いている用途
導入前の確認
localhostのjoin token構成は評価用として扱う
同梱のサンプル設定は127.0.0.1、join_token、SQLite、メモリ上の鍵管理、example.org信頼ドメインを使います。機能確認には便利ですが、本番では環境に合うノード・ワークロード認証方式、永続的な鍵とデータストア、信頼ドメイン境界、可用性を設計する必要があります。
参考にした公式資料
- [1]SPIRE v1.15.3 README(2026-10-04)
- [2]SPIRE v1.15.3 release(2026-10-04)
- [3]SPIRE architecture overview(2026-10-04)
- [4]SPIRE v1.15.3 localhost server configuration(2026-10-04)
- [5]SPIRE v1.15.3 localhost agent configuration(2026-10-04)
- [6]SPIRE v1.15.3 Go toolchain requirement(2026-10-04)
- [7]SPIRE v1.15.3 server healthcheck implementation(2026-10-04)
- [8]SPIRE v1.15.3 agent healthcheck implementation(2026-10-04)
- [9]SPIRE v1.15.3 scaling and deployment guide(2026-10-04)
- [10]SPIRE comparison with adjacent systems(2026-10-04)
編集部からの補足
固定した長期資格情報を各サービスへ配る運用から、実行環境の検証に基づくSPIFFE IDと短命なSVID資格情報へ移行したいチームに注目してほしい基盤です。評価時はデモ用のjoin tokenやメモリ鍵管理を本番設計と混同せず、信頼ドメイン、ノード認証、永続化、高可用性を別途設計してください。
3ステップで試す
- 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
固有の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
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" )
成長
成長の推移 · 直近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で投稿できます。管理者が承認した後に公開されます。
あわせて探訪
- Passbolt6,147 Stars
共通タグ 2件 · 共通カテゴリ 1件
user-owned keyとend-to-end encryptionでteam credentialを安全に共有・監査する
PHP - Defguard2,856 Stars
共通タグ 2件 · 共通カテゴリ 1件
WireGuard・ID・MFA・Firewallを一体化するself-host zero-trust access基盤
Rust - FreeIPA1,288 Stars
共通タグ 2件 · 共通カテゴリ 1件
LDAP・Kerberos・PKI・DNS・sudo/access rulesを統合しLinux identityとaccessを中央管理する
Python - ZITADEL15,189 Stars
共通タグ 1件 · 共通カテゴリ 2件 · 同じ言語
SSO・MFA・Passkey・B2BマルチテナントをAPI中心で管理する
Go - Trivy38,215 Stars
共通タグ 1件 · 共通カテゴリ 1件 · 同じ言語
image・filesystem・repository・VM・KubernetesをCVE・secret・IaC・licenseで横断scanする
Go - HashiCorp Vault36,337 Stars
共通タグ 1件 · 共通カテゴリ 1件 · 同じ言語
secretの保管・発行・暗号化・失効を一つのpolicyとauditで管理する
Go
情報の誤りを報告
掲載内容に誤りや古い情報があればお知らせください。