Skip to content

Pomerium Edge 요구사항

모든 직원용 솔루션의 단일 인증 경계. 거의 모든 스택의 session_trust_adapterpomerium 또는 pomerium_edge_gate다.

  • 모든 직원용 솔루션 접근의 단일 인증 경계 제공.
  • 서비스별 이중 로그인 최소화.

session_trust.pomerium (토폴로지 SSOT):

session_trust:
enabled: true
adapter: pomerium
mode: protected-domain
pomerium:
runtime: kubernetes
namespace: pomerium-system
workload: deployment/pomerium
public_url: https://auth.yamon.io
authenticate_service_url: https://auth.yamon.io
issuer: portal.yamon.io
jwks_url: http://pomerium.pomerium-system.svc.cluster.local:7443/.well-known/pomerium/jwks.json
audience: portal.yamon.io
cookie_domain: .yamon.io
edge_origin_url: http://10.10.10.47:17443
trusted_proxy_cidrs:
- 10.42.0.0/16
- 10.43.0.0/16

edge bridge는 10.10.10.47:17443에서 JWKS를 노출한다(leased_endpoint 검증: curl -fsS http://10.10.10.47:17443/.well-known/pomerium/jwks.json).

session_trust.pomerium.protected_hosts에 등록된 호스트만 edge 인증을 강제한다. 현재 등록 (요약): portal.yamon.io, portal-preview-{a,b,c}.yamon.io, portal-test.yamon.io, keycloak.yamon.io, keycloak-admin.yamon.io, daytona.yamon.io, nexus.yamon.io, penpot.yamon.io, datahub.yamon.io, dokploy.yamon.io, windmill.yamon.io, redpanda.yamon.io, novu.yamon.io, pve.yamon.io, armory.yamon.io, temporal.yamon.io, pwmcp.yamon.io, cliproxy.yamon.io, searxnggrid.yamon.io, agent-memory-archive.yamon.io, glitchtip.yamon.io, fractalops-live-realtime.yamon.io, argocd.yamon.io, k3s.yamon.io.

edge sign-in/sign-out URL은 코드(session_trust.pyPomeriumTrustAdapter)에서 다음 형태로 생성된다.

sign_in : {auth_base}/.pomerium/sign_in?pomerium_redirect_uri=<encoded target>
sign_out: {origin}/.pomerium/sign_out?pomerium_redirect_uri=<encoded target>
flowchart LR
  A["보호 호스트 요청"] --> B{Pomerium 세션?}
  B -- 없음 --> C["302 -> auth.yamon.io<br/>/.pomerium/sign_in"]
  C --> D["Keycloak OIDC"]
  D --> E["세션 쿠키 발급<br/>cookie_domain .yamon.io"]
  E --> F["원 호스트로 redirect"]
  B -- 있음 --> G["요청 통과 +<br/>x-pomerium-jwt-assertion<br/>x-pomerium-claim-email/groups"]
  G --> H["FractalOps API<br/>principal 해석"]
  • protected host별 sign-in redirect.
  • sign-out 체인 제공(포털/솔루션 공통).
  • Databroker state는 공유 CloudNativePG의 dedicated pomerium database/role에 저장한다. pomerium-databroker PVC와 /var/lib/pomerium file databroker는 desired state가 아니다.
  • JWT/claim 헤더를 FractalOps edge principal 해석기로 전달.
    • JWT 헤더 기본값: x-pomerium-jwt-assertion (RS256/ES256 검증).
    • claim 헤더: x-pomerium-claim-email, x-pomerium-claim-groups.
    • 검증 시 issuer = portal.yamon.io, audience = portal.yamon.io로 대조한다.
  • JWKS 후보는 jwks_url -> {edge_origin}/.well-known/pomerium/jwks.json -> {authenticate_service}/.well-known/pomerium/jwks.json 순으로 시도한다.
  • Cloudflare Access 의존 로직 제거(no alternate auth path). edge 신뢰는 Pomerium JWKS만 본다.
  • 허용 도메인/리다이렉트 strict 검증.
  • trusted_proxy_cidrs(10.42.0.0/16, 10.43.0.0/16) 안에서 온 요청의 claim 헤더만 신뢰한다 (trusted_claim_headers_only).

일부 스택은 native SSO가 불가능/enterprise 한정이라 edge에서만 인증을 강제하고 앱은 로컬 세션을 쓴다(session_trust_adapter: pomerium_edge_gate): dokploy, novu, redpanda. 이 경우 Pomerium은 “출입문”이고, 앱 안 권한은 앱 로컬/native 메커니즘이 담당한다.

  • 각 서비스 도메인 302 -> auth host 확인.
  • 로그인 후 portal session API principal 식별 확인.
  • JWKS 도달성: curl -fsS http://10.10.10.47:17443/.well-known/pomerium/jwks.json.