S2S-authentication
S2S認証は、どのサービス/ワークフローが要求を行うかを証明し、限られた時間の最小限の必要な権利を与えます。ユーザーストリームとは異なり、ここには人はいません。したがって、資格情報の短い寿命、ワークアウト/チャネルへの暗号化バインディング、明確なオブザビリティが重要です。
1)目標と原則
デフォルトではZero Trust:ネットワークを信頼しないでください。ワークアウトと暗号の認証のみです。
短命クレジット:分、ない日/月。
コンテキストバインディング:テナント/リージョン/ライセンス/オーディエンス/スコープ。
集中発行、分散検証:STS/IdP+ローカル検証。
最小の権限と明示的な委任:必要なスコープと監査のみ。
「痛みのない」回転:デュアルキー/デュアルカートウィンドウとオートメーション。
2)脅威モデル(最小)
長寿の秘密の盗難(APIキー、長寿RT)。
VPC/クラスタ内のサービススプーフィング。
壊れたセグメンテーションの地域間攻撃。
リプレイ/プロキシトラフィック置換。
サプライチェーン/コンテナイメージ置換。
構成エラー(広いファイアウォール/メッシュルール、すべての一般的なJWKS)。
3)基本的なパターンS2S
3.1 mTLS(相互証明書)
あなたは誰ですか:チャンネルによって証明されます。
内部PKIからの短命の証明書(時間日);リリース/回転は、メッシュ/サイドカーまたはSPIREエージェントによって管理されます。
同じトラストドメインの"neighbors'とトークンの結合に適しています。
3.2サービスJWT (STS)
あなたは誰ですか:メッセージで証明します。
ショートアクセスJWT (2-5分)"aud'、" scp"、"テナント"、"region"。
サインKMS/HSM、公開鍵-JWKS経由で「子供」と回転。
ローカルでチェックします(IdPネットワークコールはありません)。
3.3 SPIFFE/SPIRE (SVID)
ワーカーのユニバーサル・アイデンティティ:'spiffe ://trust-domain/ns/< ns >/sa/< sa>'。
自動発行/回転X.509/JWT-SVID、 Istio/Linkerdとの統合。
3.4 OAuth 2。1クライアント資格情報/トークン交換(RFC 8693)
マシンクライアントはSTSからトークンを受け取ります。ユーザーのための「代わりに」アクション-OBO(トークン交換)。
結合:チャネルのmTLS、メッセージのJWT、安定したアイデンティティのSPIFFE。
4)リファレンスアーキテクチャ
[KMS/HSM] [Policy Store / PDP]
[STS/IdP (issuer)] ── JWKS ──[Gateway/PEP] ─────[Services/PEP]
│
SVID/JWT │ │ │ │
(SPIRE/Istio)│ mTLS/DPoP │ mTLS/DPoP
│ │ │ │
[Workload/Sidecar]─────────┴───────┴────────────┘
発行者(STS/IdP):ショートサービスJWT/CVIDをリリースし、JWKSを発行します。
ゲートウェイ(PEP):ネットワーク用語、mTLS/JWTの検証、コンテキストの強化、PDPの要求。
サービス(PEP)-詳細な防衛、PDPソリューションキャッシュ。
SPIRE/mesh: mTLSの自動証明書とSVID。
5) JWTサービス形式(例)
json
{
"iss": "https://sts. core",
"sub": "svc. catalog, "//service identity
"aud": ["svc. search"] ,//target service/domain
"exp": 1730390100, "iat": 1730389800,
"tenant": "brand_eu",
"region": "EE",
"scp": ["catalog:read:public","catalog:read:tenant"],
"mtls": { "bound": true, "spiffe": "spiffe://core/ns/prod/sa/catalog" }
}
署名されたES256/EdDSA、 'kid'はアクティブなキーを示します。
チャネルへの任意結合:フラグ、ハッシュ証明書、SVID。
6)発行方針(STS)と検証
問題:- 件名はSVID/クライアント証明書/クライアントレジスタから取得されます。
- 寿命2-5分、リフレッシュなし-代わりに再びSTSを要求します。
- スコープ/オーディエンスは、顧客からの要求ではなく、ポリシー・ストア(GitOps)から取得されます。
1.mTLS(オプション)とチェーンの有効性を確認します。
2.JWTの署名を確認してください('kid')。
3.'exp/nbf/iss/aud'、テナント/リージョン/ライセンスをチェックします。
4.文脈を豊かにし、PDP (RBAC/ABAC/ReBAC)に尋ねる。
5.キャッシュPDPソリューション(TTL 30-120 s)、イベント障害。
7)マルチテナントと地域(信託ドメイン)
別のtrust-domains's: 'spiffe ://eu。core'、'spiffe ://latam。「コア」
地域別にJWKS/PKIを分離する。interregion-信頼できるゲートウェイを介してのみ。
スタンプに「テナント/リージョン/ライセンス」を含め、リソースのコンプライアンスを確認します。
テナントと地域によるセグメントログ/監査。
8)網/サイドカーおよび網モード無し
Istio/Linkerd: mTLS out of the box、 policy-enforcement at the L4/L7 level、 integration with SPIRE。
メッシュなし:クライアントライブラリ+アプリケーション内の相互TLS;回転を管理することはより困難-代理店によって自動化して下さい。
9)キー、JWKSおよび回転
KMS/HSMのプライベートキーのみ。signature-リモートコール/セットによる。
回転あらゆるN日;デュアルキー:古い+新しいが受け入れられ、発行者はキャッシュをウォームアップした後に新しい署名します。
監視:'子供'による消費の共有は、古いキーの顧客を掛けました。
yaml issuer:
jwks:
alg: ES256 rotation_days: 30 publish_cache_ttl: 60s sts:
access_ttl: 5m audience_policies:
- subject: "svc. catalog"
allow: ["svc. search","svc. wallet"]
scopes: ["catalog:read:"]
tenancy:
claims: ["tenant","region","licence"]
jwks_per_region: true
10)リンク結合(DPoP/mTLS結合)
mTLS-boundトークン:クライアント証明書ハッシュをJWTに追加します。受付で確認してください。
DPoP: mTLSのないHTTPクライアントの場合-DPoPキーで各リクエストに署名し、ATにDPoPサムプリントを配置します。
11)エラーと返品ポリシー
コードの標準化:- '401 INVALID_TOKEN'/'EXPIRED_TOKEN'/'AUD_MISMATCH'。
- '401 MTLS_REQUIRED'/'MTLS_CERT_INVALID'。
- '403 INSUFFICIENT_SCOPE'/'POLICY_DENY'。
- '429 RATE_LIMITED'。
レスポンスには、機械読み取り可能な'error_code'と'as_of' (key/policy version)が含まれています。
12)可視性と監査
メトリクス:- 's2s_auth_p95_ms'、' verify_jwt_p95_ms'、 'jwks_skew_ms'、
- 'invalid_token_rate'、 'aud_mismatch_rate'、 'insufficient_scope_rate'、
- 'kid'による消費、mTLSバインド要求の割合。
- 'subject'、 'aud'、 'tenant'、 'region'、 'scp'、 'kid'、 'sid/svid'、 'decision'、 'policy_version'、 'trace_id'。
- トークン発行、キーローテーション、ポリシー変更、拒否リクエスト。
13)パフォーマンス
JWT検証-ローカルでは、バックグラウンドアップデートでJWKS (TTL 30-60 s)をキャッシュします。
X。509チェーン-CAピン留めとOCSP/CRLキャッシュ。
ゲートウェイ/サイドカーに高価な検証I/Oをもたらします。
プリフェッチトークン/証明書(有効期限の10〜20秒前)を使用します。
14)テスト
Contract/Interop:異なるNP/ライブラリ、クロックスキュー± 300秒。
負:期限切れ/偽トークン、間違った'aud'、間違った領域/テナント、壊れたcert-chain。
カオス:突然の回転「キッド」、JWKSの利用不可、満了、mTLS破損。
ロード:STSのピーク問題、ゲートウェイのスパイクを確認します。
E2E: mTLSのみ、JWTのみ、結合モード、トークン交換(OBO)。
15)プレイブック(ランブック)
1.シグネチャーキーの妥協
すぐに「子供」を取り消し、新しい、短縮されたTTLトークンのリリース、監査、「ハング」クライアントの検索、古い「子供」の拒否を強制。
2.マス'INVALID_TOKEN'
JWKSキャッシュ、クロックのずれ、トークンの起源(TTLが短すぎる)をチェックし、一時的にスキュー公差を拡大し、JWKSをウォームアップします。
3.mTLS拒否
CAチェーン、SVID日付、ホスト時間を確認します。SPIRE/Istio経由で緊急再発行し、地域内でのみフォールバックルートを有効にします。
4.'AUD_MISMATCH'の生成
オーディエンスポリシーのドリフト:STSポリシーと実際のコールを比較し、一時的に目的の"aud'を追加し、コールアーキテクチャの調整をスケジュールします。
5.STS利用不可/遅い
すでに発行されているトークン(grace)のTTLを増やし、prefetch/refresh-areast、 scale-out STSを有効にします。
16)典型的なエラー
env/codeの長寿命のAPIキー/シークレット。
一般的なJWKS/PKI「すべての地域と常に」。
結合の欠如(mTLS/DPoP)→トークンは簡単に取り除くことができます。
デフォルトでは'aud='と「admin」スコープが広い。
デュアルキー周期のない回転→質量401。
ゲートウェイでのみトークンをチェックします(詳細な防御はありません)。
「ダム」失敗('error_code'と'reason'はありません)-チームのデバッグとトレーニングは困難です。
17)ミニコンフィギュレーションテンプレート
PEP(ゲートウェイ)-ルール:yaml auth:
require_mtls: true jwks:
url: https://sts. core/.well-known/jwks. json cache_ttl: 60s claims:
required: ["iss","sub","aud","exp","tenant","region"]
tenant_in_header: "x-tenant"
pdp:
endpoint: "opa:8181/v1/data/policy/allow"
decision_cache_ttl: 60s
STSポリシー(フラグメント):
yaml subjects:
- id: "svc. catalog"
spiffe: "spiffe://core/ns/prod/sa/catalog"
audiences: ["svc. search","svc. wallet"]
scopes: ["catalog:read:"]
ttl: "5m"
18)売り上げ前のチェックリスト
- ショートサービスJWT (≤ 5分)、ローカル検証、JWKSキャッシュ。
- mTLS(またはDPoP)有効;priority-mTLSバインドトークン。
- SPIFFE/SPIREまたは証明書の自動発行/回転のための同等。
- オーディエンス/スコープポリシーを持つSTS;信頼されたアイデンティティによる発行のみ。
- 地域別のトラストドメインとJWKSの分離;テナント/リージョン/ライセンススタンプがチェックされています。
- PDP/PEP統合、ソリューションキャッシュ+イベントによる障害。
- デュアルキーウィンドウ、監視消費'kid'、 無効/audミスマッチへのアラート。
- 完全なログ/監査S2S、パフォーマンス/エラーメトリックが有効になっています。
- 主な妥協プレイブック、STSドロップ、mTLS障害。
- テストスイートcontract/negative/chaos/load/E2E合格しました。
結論
S2S認証は、channel-trust (mTLS)、 message-trust (short JWT)、 persistent worker identity (SPIFE)を組み合わせたもので、集中型STSによって管理され、ローカルで検証されます。信頼ドメインの分離、厳格なオーディエンス/スコープ、自動回転とオブザビリティを追加し、プラットフォームとその地理とともに信頼性が高く、説明可能でスケーラブルなアウトラインを備えています。