GH GambleHub

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)而不是客户请求。
验证(PEP):

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):
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排序比例。
Logi/Traces:
  • `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管理并在本地验证。添加信任域分离、严格的听力/范围、自动旋转和可观察性-并获得一个可靠、可解释和扩展的轮廓以及平台及其地理位置。

Contact

联系我们

如需任何咨询或支持,请随时联系我们。我们随时准备提供帮助!

Telegram
@Gamble_GC
开始集成

Email — 必填。Telegram 或 WhatsApp — 可选

您的姓名 可选
Email 可选
主题 可选
消息内容 可选
Telegram 可选
@
如果填写 Telegram,我们也会在 Telegram 回复您。
WhatsApp 可选
格式:+国家代码 + 号码(例如:+86XXXXXXXXX)。

点击按钮即表示您同意数据处理。