Autenticação S2S
A autenticação S2S prova que tipo de serviço/worcload faz a solicitação e dá-lhe os direitos mínimos necessários por um tempo limitado. Ao contrário dos fluxos do usuário, não há pessoas aqui - por isso, a vida curta das credenciais, a ligação criptográfica ao voorcload/canal e a observabilidade clara são críticas.
1) Objetivos e princípios
Zero Trust padrão: Desconfiar da rede, apenas a avaliação de worcload e criptografia.
Empréstimos curtos, minutos, não dias/meses.
Referência ao contexto: tenant/region/licence/audiência/scopes.
Emissão centralizada, verificação descentralizada: STS/IdP + verificação local.
Os privilégios mínimos e a delegação explícita são apenas os escopos e auditorias desejados.
Rotação «sem dor»: dual-key/dual-cert janela e automação.
2) Modelo de ameaça (mínimo)
Roubo de segredos duráveis (API-keys, long-lived RT).
Troca de serviço dentro do VPC/cluster.
Ataques interregionais com segmentação quebrada.
Replay/troca de tráfego para proxy.
Suply-chain/troca de imagem do contêiner.
Erros de configuração (amplas regras firewall/mesh, JWKS compartilhado para todos).
3) Pattern S2S básico
3. 1 mTLS (certificados mútuos)
Quem você é, prova o canal.
Certificados de curta duração (hora/dia) do PKI interno; O lançamento/rotação controla mesh/sidecar ou agente SPIRE.
Bom para «vizinhos» em um domínio trust e para binding tokens.
3. 2 JWT de serviço (STS)
Quem você é, prova com uma mensagem.
O Acess JWT curto (2-5 min) com 'aud', 'scp', 'tenant', 'region'.
Assina KMS/HSM, chaves públicas com JWKS com 'kid' e rotação.
Verificação local (sem chamada de rede IdP).
3. 3 SPIFFE/SPIRE (SVID)
A identidade universal dos worcloades é 'spiffe ://trust-domain/ns/< ns >/sa/< sa>'.
Issuance automático/rotation X.509/JWT-SVID, integração com Istio/Linkerd.
3. 4 OAuth 2. 1 Client Credentials / Token Exchange (RFC 8693)
Os clientes de máquinas recebem o token do STS; para ações «em nome» do usuário - OBO (token exchange).
Combinamos mTLS para canal, JWT para mensagem, SPIFFE para identidades sustentáveis.
4) Arquitetura de arbitragem
[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): lança JWT/CVID de serviço curto e publica JWKS.
Gateway (PEP): termo de rede, valida mTLS/JWT, enriquece contexto, pede PDP.
Serviços (PEP): reexaminação (defense in depth), dinheiro de soluções PDP.
SPIRE/mesh: certificados automáticos e SVID para mTLS.
5) Formato de JWT de serviço (exemplo)
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" }
}
Assinado por ES256/EdDSA, 'kid' indica a chave ativa.
Binding opcional para o canal: bandeira, hash cert, SVID.
6) Políticas de emissão (STS) e verificação
Emissão:- O subject é extraído de SVID/certificado de cliente/registro do cliente.
- Tempo de vida de 2-5 min, refresh não - em vez disso, pedir novamente STS.
- Os escopos/plateia são obtidos da Policy Store (GitOps) e não do pedido do cliente.
1. Verificar mTLS (opcional) e validade da cadeia.
2. Verificar a assinatura JWT em JWKS ('kid').
3. Cruze 'exp/nbf/iss/aud', tenant/region/licence.
4. Enriquecer o contexto e perguntar PDP (RBAC/ABAC/ReBAC).
5. Armazenar solução PDP (TTL 30-120 c) com deficiência de evento.
7) Multi-tenante e regiões (trust domins)
Divida o trust-domain's: 'spiffe ://eu. core`, `spiffe://latam. core`.
JWKS/PKI separados por região; A interregião é apenas através de passarelas de confiança.
Inclua a marca 'tenant/region/licence' e verifique se o recurso está em conformidade.
O logi/auditoria segmenta por tenentes e regiões.
8) Mesh/sidecar e modo sem-mesh
Istio/Linkerd: mTLS «de caixa», policy-enforcement em L4/L7, integração com SPIRE.
Sem mesh: biblioteca-cliente + mutual TLS no aplicativo; mais difícil de gerenciar - automatize através do agente.
9) Chaves, JWKS e rotação
Chaves privadas apenas em KMS/HSM; a assinatura é uma chamada remota/máquina.
Rotation a cada N dias; dual-key: antigo + novo aceito, issuer assina novo após aquecimento de cajas.
Monitoramento: proporção de consumo por 'kid', clientes dependentes na chave antiga.
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) Vinculação ao canal (DPoP/mTLS-bound)
mTLS-bound tocens: no JWT, adicionar um certificado de cliente hash; na recepção para fazer a verificação.
DPoP: para clientes HTTP sem mTLS - assinar cada solicitação de chave DPoP, no AT colocar thumbprint DPoP.
11) Erros e políticas de retorno
Normalize os códigos:- `401 INVALID_TOKEN`/`EXPIRED_TOKEN`/`AUD_MISMATCH`.
- `401 MTLS_REQUIRED`/`MTLS_CERT_INVALID`.
- `403 INSUFFICIENT_SCOPE`/`POLICY_DENY`.
- `429 RATE_LIMITED`.
A resposta contém machine-readable 'error _ código' e 'as _ of' (versão da chave/política).
12) Observação e auditoria
Métricas:- `s2s_auth_p95_ms`, `verify_jwt_p95_ms`, `jwks_skew_ms`,
- `invalid_token_rate`, `aud_mismatch_rate`, `insufficient_scope_rate`,
- consumo por 'kid', proporção de solicitações mTLS-bound.
- `subject`, `aud`, `tenant`, `region`, `scp`, `kid`, `sid/svid`, `decision`, `policy_version`, `trace_id`.
- Emissão de tokens, rotação de chaves, alterações de políticas, pedidos rejeitados.
13) Desempenho
A verificação do JWT é local, JWKS cate (TTL 30-60 s) com atualização de fundo.
Cadeias X.509 - pinning CA e dinheiro OCSP/CRL.
Leve o validador caro I/O para gateway/sidecar.
Use prefetch tokens/certificados (10 a 20 c antes de expirar).
14) Testes
Contract/interop: Diferentes IP/bibliotecas, clock skew £300 s.
Negative: token vencido/falso, errado 'aud', região/tenante errado, cert-chain quebrado.
Chaos: rotação repentina 'kid', indisponibilidade JWKS, exportação em massa, penhasco mTLS.
Load: pico de emissão para STS, sobe verify para gateway.
E2E: mTLS-only, JWT-only, modo combinado, Token Exchange (OBO).
15) Playbooks (runbooks)
1. Comprometer chave de assinatura
Revoke 'kid' imediato, lançamento novo, TTL TTen reduzido, auditoria, pesquisa de clientes «dependentes», deny forçado para o antigo 'kid'.
2. Massa 'INVALID _ TOKYO'
Verificar JWKS kesh, Rashinhron relógio, origens de tokens (TTL é muito curto), expandir temporariamente a tolerância skew, aquecer JWKS.
3. falhas mTLS
Verificar a cadeia CA, o prazo SVID, o tempo do hóspede; emergency-transfer através do SPIRE/Istio, incluir rotas fallback apenas dentro da região.
4. Crescimento de 'AUD _ MISMATCH'
Política de audiência à deriva: comparar STS-policy com chamadas reais, adicionar temporariamente o 'aud' desejado, programar a correção da arquitetura de chamadas.
5. O STS não está disponível/lento
Aumentar TTL (grace) já emitidos, ativar prefetch/refresh-mais cedo, scale-out STS.
16) Erros típicos
Chaves API/segredos de longa duração em end/código.
JWKS/PKI compartilhado «para todas as regiões e todos os tempos».
A falta de binding (mTLS/DPoP) → é fácil de afastar.
Amplo 'aud =' e 'Admin' scopes padrão.
Rotação sem período dual-key → 401 em massa.
Verificar os tokens apenas em gateway (sem defense in depth).
Não «mudo» (sem «error _ código» e «reason») - É difícil debelar e treinar comandos.
17) Mini-modelos de configuração
PEP (gateway) - regras: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 Policy (fatia):
yaml subjects:
- id: "svc. catalog"
spiffe: "spiffe://core/ns/prod/sa/catalog"
audiences: ["svc. search","svc. wallet"]
scopes: ["catalog:read:"]
ttl: "5m"
18) Folha de cheque antes de vender
- JWT de serviço curto (≤5 min), verificação local, dinheiro JWKS.
- mTLS (ou DPoP) está incluído; prioridade - mTLS-bound tocens.
- SPIFFE/SPIRE ou o equivalente para a emissão/rotação automática de certificados.
- STS com políticas de audiência/scope; a extradição é apenas por identidade de confiança.
- Divisão de trust-domins e JWKS por região; as marcas de tenant/region/licence são verificadas.
- PDP/PEP estão integrados, o dinheiro de soluções + deficiência por evento.
- Janela dual-key, monitoramento do consumo 'kid', alertas para invalid/aud mismatch.
- Logs completos/auditoria S2S, incluídas métricas de desempenho/erro.
- Playbooks de comprometimento de chave, queda de STS, falha de mTLS.
- O conjunto de testes contracto/negativo/chaos/load/E2E foi concluído.
Conclusão
A autenticação S2S é uma combinação de canal de confiança (mTLS), mensagem de confiança (JWT curtos) e identidade de voorcload sustentável (SPIFE), controlada por STS centralizado e verificável localmente. Adicione a divisão de domínios trust, audiências rigorosas/scopes, rotação automática e observabilidade - e obtenha um circuito que seja confiável, explicado e escalado com a plataforma e sua geografia.