Skip to content

ワークロードアイデンティティの移行: SPIFFEからIAMへ ​

対象範囲: VPC Latticeのサービス/リソースAPIとAWS Gateway API Controller。選択したリリースとインストール済みCRDを確認してください。 最終更新日: September 13, 2026

このドキュメントで扱うこと ​

  • SPIFFE/SPIREがワークロードアイデンティティの問題を解決した方法。特にアテステーションが初期設定時の信頼問題を解決する仕組み
  • SPIFFEベースのmTLSとLattice IAM Authの類似点(短期間の認証情報とプラットフォームによるアテステーション)と、結論を左右する2つの違い
  • 金融業界のセキュリティレビューで、それらの違いが中心的な論点となる理由

出発点となる問題: ワークロードはどう自分を証明するか ​

サービスAがサービスBを呼び出すとき、Bは「この要求は本当にAから来たのか」を知る必要があります。難しいのは、証明に必要な秘密情報をどうやって最初に渡すかです。

ワークロードへ証明書やAPIキーなどの秘密情報を渡すには、そのワークロードが本物かを知る必要があります。それを知るには秘密情報が必要です。これがブートストラップ問題であり、従来の回避策はいずれも問題を別の場所へ移すだけです。

回避策問題の移動先
証明書をイメージに焼き込むイメージの漏えいがアイデンティティの漏えいになる。更新には再ビルドが必要
SecretとしてマウントするSecretを読める人なら誰でも、そのアイデンティティを偽装できる
デプロイ時に注入するCI/CDシステムがすべてのアイデンティティのマスターキーを保持する

SPIFFE/SPIREとLattice IAM Authは、プラットフォームがワークロードの正当性を保証することで、この問題を解決します。それゆえに構造がよく似ています。そして類似しているからこそ、レビューではどこが異なるかが焦点になります。

SPIFFEを構成する3つの要素 ​

SPIFFE(Secure Production Identity Framework For Everyone)は、ワークロードアイデンティティの標準仕様であり、実装そのものではありません。

① SPIFFE ID: アイデンティティの名前 ​

ワークロードをURIとして識別します。

text
spiffe://<trust-domain>/<workload-path>

e.g.: spiffe://finance.example.com/ns/prodcatalog/sa/prodcatalog-sa

trust-domainは、信頼境界の名前です。同じtrust domain内のワークロードは、同じCAという共通の信頼の起点を共有します。パスの部分は組織が自由に設計でき、Kubernetes環境ではnamespaceとServiceAccountを表すのが一般的です。

注目すべきなのは、名前にネットワーク情報が含まれないことです。IP、ホスト名、ポートはいずれもありません。ワークロードがどこに配置され、IPがどう変わっても、アイデンティティは同じままです。 ドキュメント04で扱う「IPベースの制御からアイデンティティベースの制御へ」という転換はここから始まります。

② SVID: アイデンティティを証明する認証情報 ​

SPIFFE Verifiable Identity Document(SPIFFE検証可能アイデンティティ文書)です。SPIFFE IDを検証可能な文書に含め、次のいずれかの形式で提供します。

形式内容主な用途
X.509-SVIDSAN URIにSPIFFE IDを含むX.509証明書と秘密鍵mTLSによる相互認証
JWT-SVIDsubクレームにSPIFFE IDを含むJWTHTTPヘッダーでのアイデンティティ伝達、L7認可

重要な性質は、有効期間が短いことです。 SVIDは通常、数十分から数時間の有効期間で発行され、自動更新されます。有効期間が短いと、失効処理の問題を回避できます。 CRLとOCSPは運用上扱いづらく、いずれにしても認証情報の有効期限がすぐ切れるなら、失効機構がなくても侵害が役立つ時間を制限できます。

③ Workload API: アイデンティティを渡す経路 ​

ワークロードがSVIDを取得するためのインターフェースです。重要なのは、Unix Domain Socket(UDS)経由で公開されることです。

この設計の本質はUDSにあります。ワークロードは認証情報を一切提示せずにソケットへ接続します。代わりにカーネルがピアプロセスの情報(PID、UID、GID)を確実に提供し、SPIRE Agentがその情報から、相手が誰なのかを直接調査します。

つまり、これは「アイデンティティを証明するため秘密情報を提示する」のではなく、「プラットフォームがアイデンティティを観測して判定する」仕組みです。そこでブートストラップ問題が解決されます。

SPIREのコンポーネント ​

SPIREはSPIFFEの参照実装です。

コンポーネント役割
SPIRE Server信頼の起点。CAを保持し、SVIDに署名/発行します。どのセレクターにどのSPIFFE IDを割り当てるかをRegistration Entryで管理します
SPIRE Agent(DaemonSet)各ノードで稼働します。まず自身のノードのアイデンティティをServerに証明し、次にノード上のワークロードを調査して、代わりにSVIDを取得、配布、更新します
アテステーションアイデンティティを判定する手順。Node AttestationとWorkload Attestationの2段階があります
Envoy SDS統合EnvoyはSecret Discovery ServiceプロトコルでAgentから証明書を受け取ります。アプリケーションコードはmTLSを意識しません

アテステーションでブートストラップ問題を解決する ​

ここがSPIREの核心であり、IAMとの比較の基準点です。

Node Attestation: AgentはServerに対して「自分はこのノードです」と証明します。その証拠はあらかじめ配置した秘密情報ではなく、プラットフォームが発行したアテステーションです。AWSではEC2インスタンスの署名付きIMDS文書またはインスタンスID文書を使います。ServerはAWSを通じてその証拠を検証できるため、ノードに事前共有秘密を置く必要がありません。

Workload Attestation: Agentはノード上のワークロードを調査します。

  1. ワークロードは認証情報なしでUDSに接続する
  2. AgentはカーネルからピアプロセスのPIDを取得する(偽造できない)。カーネルが報告する事実である
  3. PIDからcgroupを読み取り、どのコンテナかを特定する
  4. kubelet/kube-apiserverに問い合わせ、そのコンテナのPod、namespace、ServiceAccount、ラベルを確認する
  5. 属性をセレクターにまとめ、Serverへ送信する
  6. ServerはRegistration Entryから一致するSPIFFE IDを見つけ、SVIDを発行する

手順2でブートストラップ問題が解消されます。ワークロードは自分が誰かを主張しません。その必要もありません。カーネルが事実を報告し、それをプラットフォーム(Kubernetes)の記録と照合します。これを偽造するにはカーネルまたはKubernetes APIサーバーを侵害しなければならず、そのレベルで侵害されていれば、ほかのものもすでにすべて失われています。

一言で言えば、アイデンティティは提示されるのではなく、観測され判定されます。

IAM Authとの比較 ​

Lattice IAM Authの手順はドキュメント03で説明しています。項目ごとに比較します。

項目SPIFFE/SPIRE(現状)Lattice IAM Auth(移行後)
アイデンティティの名前SPIFFE ID(spiffe://<trust-domain>/ns/<ns>/sa/<sa>)IAM Role ARN/AssumeRoleセッションARN
認証情報の形式X.509-SVIDまたはJWT-SVIDSTS一時認証情報(アクセスキー+シークレット+セッショントークン)
証明方法証明書秘密鍵の所持を証明(TLSハンドシェイク)SigV4リクエスト署名(秘密鍵の所持を証明)
証明の範囲接続(確立時に1回)リクエスト(毎回)
アテステーションを行う主体SPIRE Agent(ノード)+SPIRE ServerEKS Pod Identity Agent+EKS Auth API
アテステーションの証拠カーネルPID → cgroup → Pod/ServiceAccountの照会ServiceAccountとRoleの関連付け(EKS Auth API)、またはOIDCトークン(IRSA)
検証方法ピアのEnvoyが信頼バンドルを使ってSVIDチェーンを検証Latticeが署名を再計算/比較し、その後3つのポリシーを評価
信頼の起点顧客が運用するSPIRE ServerのCAAWS IAM/STS
認証情報の有効期間数十分から数時間、自動更新STS一時認証情報、自動更新
認可の表現方法Envoy認可フィルター(SPIFFE IDベース)3つのIAMポリシー(アイデンティティベース+サービスネットワーク+サービス)
可観測性Envoyメトリクス/ログ(SPIFFE ID単位)Latticeアクセスログ(プリンシパル単位。トレーススパンはなし)
運用負荷高い: SPIRE ServerのHA、CA鍵管理、CAローテーション、Registration Entry管理、Agentのデプロイ/アップグレード、信頼バンドル配布低い: Pod Identity AgentアドオンとServiceAccount/Roleの関連付け。CAや鍵管理は不要
マルチクラスターtrust domainの設計とフェデレーションが必要Pod IdentityでRoleを再利用でき、クラスターごとの設定は最小限
AWS外のワークロード適切なSPIREアテスターがあれば可能適切なIAM認証情報プロバイダーと、サポートされるLattice接続が必要。IAM自体の制約ではない

類似点: 移行が可能な理由 ​

比較表ではまったく別のシステムに見えますが、構造上は同じパターンです。そのため、移行に一貫性があります。

① どちらも有効期間の短い認証情報を使う ​

SVIDとSTS一時認証情報はどちらも有効期間が短く、自動更新されます。どちらも同じ理由でこの方式を採用しています。つまり、失効機構を使わずに、侵害された認証情報が使われる期間を制限するためです。

両方式ともアプリケーションに長期間有効な秘密情報を配布せずに済みますが、レビューでは認証情報の有効期間、更新、侵害時の対応、認可を確認する必要があります。有効期間を短くしても、失効や緊急拒否の要件がなくなるわけではありません。

② どちらもプラットフォームによるアテステーションに基づく ​

ワークロードが事前に秘密情報を持つのではなく、プラットフォームが正当性を保証します。

段階SPIREEKS Pod Identity
ノードのアイデンティティNode Attestation(EC2 ID文書など)ノードRoleのAssumeRoleForPodIdentity権限
ワークロードの判定カーネルPID → cgroup → Pod/SAPodのServiceAccountとRoleの関連付け
認証情報の配布Workload API(UDS)Pod Identity Agent(リンクローカルアドレス)
認証情報の更新AgentがSVIDを更新SDKが認証情報を更新

どちらもプラットフォームの証拠を使いますが、セレクター、トークン検証、認証情報の露出、信頼境界は異なります。両者を同等だと宣言せず、実際のアテスターまたは認証情報プロバイダーを検証してください。

事前に長期有効な秘密を用意しなくてよいことと、実行時に秘密が存在しないことは同じではありません。 X.509-SVIDの配布には秘密鍵が含まれ、一時IAM認証情報にはシークレットアクセスキー/セッショントークンが含まれます。Agentのソケット/エンドポイント、メモリ、ログ、認証情報キャッシュを保護してください。アテステーションの強さは、設定された信頼前提の範囲を超えません。

結論を左右する2つの違い ​

類似点が多いため、レビューで実際に議論になるのは異なる点です。次の2つは構造的な違いであり、運用上の利便性だけでは解決しません。

違い(a): 双方向の相互認証から、片方向の認証+リクエスト認証へ ​

現状は双方向です。

mTLSハンドシェイクでは、クライアントとサーバーがお互いのSVIDを検証します。クライアントはSPIFFE IDを使って「接続先のピアは本当にpaymentsサービスか」を確認し、サーバーは「接続してくるピアは本当にordersサービスか」を確認します。ワークロードアイデンティティシステムの中で、双方が自分を証明します。

移行後は非対称です。

方向現状移行後
クライアント → サーバー(クライアントが証明)SVIDによる相互認証SigV4リクエスト署名(毎回のリクエストで、より細粒度)
サーバー → クライアント(サーバーが証明)SVIDによる相互認証TLSサーバー証明書(通常のTLSレベル)

SigV4は各リクエストの署名対象フィールドを認証し、mTLSはTLSピアを認証します。また、どちらの設計でもリクエスト単位の認可を追加できます。どちらかが普遍的に強いとは言えません。LatticeはUNSIGNED-PAYLOADを要求するため、TLSでペイロードを保護し、リプレイや認証情報窃取のリスクを明示的に考慮してください。

問題はサーバー側の証明です。 クライアントが確認できるのは「このTLS証明書が有効で、ドメインが一致している」ことだけです。ワークロードアイデンティティシステム内で「これは本当に担当チームが運用しているサービスか」を確認する手順はありません。

レビューで実際に問われるのは次の点です。

DNS、証明書、サービス関連付け、ターゲット登録が不正に変更された場合、このワークロードのトラフィックは別の宛先へ誘導されるか。エンドポイント認証とともに、それらのコントロールプレーン権限もレビューしてください。表示名が一致していても、既存の自動生成サービスDNSアイデンティティが引き継がれるわけではありません。

正直な答えは、「ワークロードアイデンティティシステムの範囲内では防げないため、サービスネットワークとLatticeリソースへのIAM制御によって防ぐ必要がある」です。つまり、防御の軸がワークロード間の相互認証から、リソース作成権限の制御へ移ります。

これは悪い答えではありません。Lattice Serviceを作成できる主体をIAMで厳しく制限し、サービスネットワークとの関連付けを制御し、CloudTrailでリソース作成を監視すれば、実際的なリスクを管理できます。しかし、レビュー資料に「相互認証」と書かれている場合は、その記述を書き換え、別の層で制御する根拠を示す必要があります。移行の終盤でこの点に気付くと、スケジュールに大きな遅れが生じます。

違い(b): 信頼の起点を誰が所有するか ​

金融業界のレビューでは、こちらの方が重い論点です。

項目現状移行後
信頼の起点顧客が運用するSPIRE ServerのCAAWS IAM/STS
CA秘密鍵の所有者顧客または設定済みの上流CA顧客がLattice用CAを持つ必要はない。一時IAM秘密認証情報は引き続き存在
アイデンティティの発行者顧客定義のRegistration Entryに基づく顧客のCAAWS STS
発行ルールを決める主体顧客が全面的に制御顧客がIAMで制御し、AWSが実行
監査証跡顧客が保持するSPIRE ServerログCloudTrail(AWSサービス)
CAローテーションの決定者顧客該当なし
AWS外での利用アテスターと接続性による適切な認証情報プロバイダーとサポート対象のプライベート接続があれば可能。Pod Identityだけで提供されるものではない
運用負荷顧客が負担AWSが負担

トレードオフは明確です。信頼の起点の所有権を渡す代わりに、運用負荷をAWSへ移します。

この点が金融業界で重要なのは、規制とレビュー慣行によるものです。多くの組織のセキュリティ基準には、「認証システムの信頼の起点は自社で管理しなければならない」という明示的な要件、またはそのように読める条項があります。自社CAを運用するのがその要件を満たすもっとも直接的な方法であり、SPIRE採用もまさにそのレビューを通過した結果かもしれません。

Lattice IAM Authへ移行するには、その根拠を組み立て直す必要があります。利用できる根拠の例:

論点内容
責任共有モデルIAM/STSは、AWSが複数の認定規制フレームワークの下で運用する既存の制御である
ポリシー権限を維持誰が何を呼び出せるかは、引き続き顧客のIAMポリシーで全面的に定義する
監査証跡を保護CloudTrailで認証情報発行とAPI呼び出しの履歴を記録し、Latticeアクセスログでデータ経路の履歴を記録する
CA運用を軽減AWSがサービスのPKIを処理する一方、顧客は一時認証情報、Role、トークン、エンドポイント鍵を引き続き保護する
有効期間とアテステーションを維持上記の類似点2つは引き続き満たされる

ただし、これは「制御を別の方法で行う」という主張であり、「同等である」という主張ではありません。前者をレビュー担当者が受け入れるかは組織の基準によります。技術だけで解決できる問題ではありません。

金融業界のレビュー項目としての位置付け ​

レビュー上の論点をまとめます。

項目レビュー状況根拠
長期有効な秘密情報の焼き込みを避ける設定を検証どちらも自動更新する短期認証情報を使える
実行時の秘密情報の露出レビューが必要短期間有効な秘密鍵/トークンも保護が必要
リクエスト単位の認可設定済みポリシーを比較mTLSのアイデンティティもリクエスト単位の認可に利用可能。SigV4だけが方法ではない
クライアントのアイデンティティ証明方式が変更TLSピアの証明とリクエスト署名では対象範囲と脅威前提が異なる
サーバーのアイデンティティ証明⚠️ 弱くなる: 代替制御が必要ワークロードアイデンティティシステムからTLSサーバー証明書のレベルに下がる。防御の軸はリソース作成へのIAM制御に移る
信頼の起点の所有権⚠️ 移転する: 根拠を書き換える必要あり顧客CAからAWS IAM/STSへ
エンドツーエンド暗号化信頼境界を選択HTTPSはLatticeで終端。passthroughはエンドポイントTLSを維持するが、認証済みHTTP SigV4アイデンティティは維持しない
可観測性(トレーシング)⚠️ 弱くなるEnvoyのスパンがなくなる。アプリケーションへの計装が必要(ドキュメント01)
AWS外のワークロード別途設計不可能と決めつけず、認証情報とサポート対象のネットワークアクセスを評価する

変更される信頼境界と運用境界を、責任を持つセキュリティチームとレビューしてください。エンドポイントmTLS、Latticeの認証済みHTTP、匿名のネットワークコンテキストポリシーは異なる制御です。1つの設定が組織のすべてのレビュー基準を満たすと断定せず、実際の要件に基づいて選択してください。

SPIREを残す選択肢 ​

移行しても、SPIREを必ず廃止する必要はありません。

  • AWS外のワークロードでは、ほかの認証情報/アイデンティティ方式を評価しながらSPIREを使い続ける選択肢があります。
  • TLS Passthrough構成を選ぶ場合は、エンドポイントが自らmTLSを実行する必要があり、SPIREはそれらの証明書を引き続き提供できます。
  • この場合はApp Meshを廃止してSPIREを残す構成になります。App Meshのサポート終了への対応と、SPIREを維持するかどうかは別の判断です。

移行目的の1つがSPIREの運用負荷をなくすことである場合、上記の条件がその目的と矛盾しないか先に確認してください。

まとめ ​

  • SPIFFEの3要素は、SPIFFE ID(URI形式の名前)、SVID(有効期間の短いX.509/JWT)、Workload API(UDS経由)です。
  • SPIREのアテステーションは、アイデンティティを提示するのではなく、観測して判定することでブートストラップ問題を解決します。カーネルが報告するPIDは偽造できません。
  • どちらの方式も短期認証情報とプラットフォームの証拠を利用できますが、実行時の秘密情報とポリシーの違いはレビューが必要です。
  • 決定的な違いは2つです。(a) 双方向の相互認証が、片方向の認証+リクエスト認証に変わり、サーバーのアイデンティティ証明が弱くなること、(b) 信頼の起点が顧客CAからAWS IAM/STSへ移ることです。
  • どちらも技術だけでは解決せず、組織として判断する必要があります。アーキテクチャが変わるため、開始前にセキュリティレビュー担当者と検討してください。

次は制約と判断点で、設計を最終決定する前に確定すべき内容をまとめます。

参考資料 ​

ドキュメントに質問する

Enter で送信、Shift+Enter で改行します。