S2S認證
S2S身份驗證證明了該請求的確切服務/操作程序,並賦予其最低限度的有限時間權限。與用戶線程不同,這裏沒有人-因此憑據壽命短,密碼綁定到workload/canal以及清晰的可觀察性至關重要。
1)目標和原則
零信托(Zero Trust)默認值:不信任網絡,僅信任網絡認證和密碼。
短壽命的credenschlas:分鐘,不是天/月。
綁定到上下文:tenant/region/licence/audience/scopes。
集中發行,分散驗證:STS/IdP+本地驗證。
最小權限和顯式委派:只有必要的漏洞和審核。
「無痛」輪換:雙鍵/雙證書窗口和自動化。
2)威脅模型(最低)
竊取持久秘密(API-keys, long-lived RT)。
在VPC/群集中替換服務。
分段斷裂時的區域間攻擊。
將Replay/流量替換為代理。
供應鏈/替代容器映像。
配置錯誤(firewall/mesh廣義規則,全部JWKS通用)。
3)基本模式S2S
3.1 mTLS(共同證書)
你是誰:通過渠道證明。
來自內部PKI的證書壽命短(每小時);發布/輪換由mesh/sidecar或SPIRE代理控制。
對一個信任域中的「鄰居」和令牌綁定有好處。
3.2服務JWT (STS)
你們是誰。
短訪問JWT(2-5分鐘)帶有「aud」,「scp」,「tenant」,「region」。
通過「kid」和「輪換」通過JWKS簽名KMS/HSM,公共密鑰。
本地驗證(沒有IdP網絡調用)。
3.3 SPIFFE/SPIRE (SVID)
Worcloads的通用身份:'spiffe ://trust-domain/ns/< ns >/sa/< sa>'。
自動分解/旋轉X.509/JWT-SVID,與Istio/Linkerd集成。
3.4 OAuth 2.1 Client Credentials / Token Exchange (RFC 8693)
機器客戶從STS獲得令牌;要代表OBO (token exchange)操作。
組合:用於通道的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]─────────┴───────┴────────────┘
Issuer(STS/IdP):發布短服務JWT/CVID,由JWKS發布。
網關(PEP):網絡術語,驗證mTLS/JWT,豐富上下文,請求PDP。
服務(PEP):重新驗證(depth defense), 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」指定活動密鑰。
可選地binding到通道:標誌、hash cert、SVID。
6)引渡政策(STS)和驗證
引渡:- 主語取自SVID/客戶端證書/客戶端寄存器。
- 2-5分鐘的壽命,沒有refresh-而是重新要求STS。
- Scoopes/受眾來自 Policy Store(GitOps)而不是客戶請求。
1.檢查mTLS(可選)和鏈的有效性。
2.檢查JWKS上的JWT簽名(通過「kid」)。
3.核對「exp/nbf/iss/aud」, tenant/region/licence。
4.豐富上下文並詢問PDP (RBAC/ABAC/ReBAC)。
5.緩存PDP解決方案(TTL 30-120 c),事件障礙。
7)多重特南特和地區(信任領域)
共享信任域: 'spiffe: //eu。core`, `spiffe://latam.core`.
按地區劃分的JWKS/PKI;區域間-僅通過可信賴的網關。
包含在「tenant/region/licence」標簽中,並檢查資源合規性。
Logi/Audit按性別和地區劃分。
8)Mesh/sidecar和無混合模式
Istio/Linkerd: mTLS開箱即用,在L4/L7級別實施策略,與SPIRE集成。
沒有mesh:應用程序中的客戶端庫+mutual TLS;更難管理輪換-通過代理實現自動化。
9)鑰匙,JWKS和輪換
僅在KMS/HSM中使用私人密鑰;簽名-遠程呼叫/設備。
每N天旋轉一次;雙鍵:舊的+新被接受,issuer在加熱腰果後簽署新的。
監視:「kid」消費比例,「掛起」客戶在舊鑰匙。
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-bound)
mTLS-bound tokens:在JWT中添加客戶端證書的hash;在接待處進行鉆探。
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」(密鑰/策略版本)。
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緩存。
在gateway/sidecar上提供昂貴的驗證I/O。
使用prefetch令牌/證書(10-20從到期前)。
14)測試
合同/interop:不同的YAP/庫,clock skew ± 300 s。
Negative:過期/假令牌,不正確的「aud」,錯誤的區域/tenant,破碎的證書鏈。
混亂:突然旋轉「kid」,JWKS不可用,大量外賣,mTLS懸崖。
下載:STS的發行高峰,網關上的驗證激增。
E2E:mTLS only,JWT only,組合模式,令牌交換(OBO)。
15)花花公子(runbooks)
1.簽名密鑰的損害
立即恢復「kid」,發布新的,縮短的TTL令牌,審計,搜索「掛起」的客戶,強制拒絕舊的「kid」。
2.大眾「INVALID_TOKEN」
檢查JWKS-KESH, RASHINHRON,令牌起源(TTL太短),暫時擴大skew公差,加熱JWKS。
3.mTLS故障
檢查CA鏈,SVID時機,主機時間;通過SPIRE/Istio的緊急重新發布,僅在區域內啟用後退路由。
4.成長'AUD_MISMATCH'
視聽策略漂移:將STS策略與實際呼叫進行比較,臨時添加所需的「aud」並安排調用體系結構的調整。
5.STS不可用/放慢速度
增加已經簽發的令牌(grace)的TTL,包括以前的prefetch/refresh, scale-out STS。
16)典型錯誤
env/代碼中長壽命的 API密鑰/秘密。
通用JWKS/PKI「適用於所有地區和所有時間」。
缺少binding (mTLS/DPoP) →令牌很容易被帶走。
缺省情況下為「aud=」和「admin」 scopes。
無雙鍵周期輪換→質量401。
僅在gateway上檢查令牌(在深處沒有防禦)。
「沈默」拒絕(不是「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)已啟用;優先是mTLS-bound tokens。
- SPIFFE/SPIRE或等效於自動簽發/輪換證書。
- 具有audience/scope策略的STS;僅以可信身份進行發行。
- 按地區劃分信任領域和JWKS;tenant/region/licence標記已驗證。
- PDP/PEP集成,解決方案緩存+事件障礙。
- 雙鍵窗口,監視「kid」消費,Alerta on invalid/aud mismatch。
- 完整的S2S記錄/審核,包括性能/錯誤指標。
- 花花公子對鑰匙的損害,STS的下降,mTLS的失敗。
- contract/negative/chaos/load/E2E測試集已通過。
結論
S2S身份驗證是信道信任(mTLS),消息信任(JWT短)和持續的workload身份(SPIFFE)的組合,由集中式STS管理並在本地驗證。添加信任域分離、嚴格的聽力/範圍、自動旋轉和可觀察性-並獲得一個可靠、可解釋和擴展的輪廓以及平臺及其地理位置。