
Go製のゼロトラストリバースプロキシおよびABAC認可ゲートウェイ。OPAポリシー評価を組み込み、分散トークン失効に対応。
Go で構築された高性能・ゼロトラストのリバースプロキシ兼認可ゲートウェイ。組み込みの Open Policy Agent (OPA) エンジン、5ms 未満の判定レイテンシ、Redis Pub/Sub によるリアルタイム分散トークン失効、および暗号学的に改ざん検知可能な監査ログを備えています。
現代のクラウドネイティブかつマルチテナントなプラットフォームでは、静的なロールベースアクセス制御 (RBAC) よりもはるかに細粒度な認可パラダイムが求められます。高保証環境では、認可は、リクエスト元が誰であるか (Subject)、実行しようとする操作は何か (Action)、適用されるデータ分類は何か (Resource)、そしてリアルタイムの運用コンテキスト (Environment) を動的に統合して判断する必要があります。
エンタープライズ向け細粒度 ABAC ゲートウェイは、バックエンドのマイクロサービスを前面で保護する集中型のポリシー適用ポイント (PEP) およびポリシー決定ポイント (PDP) として機能します。NIST SP 800-162 (ABAC)、NIST SP 800-207 (ゼロトラストアーキテクチャ)、および RFC 7519 (JSON Web Tokens) に準拠するよう設計されており、Rego ポリシーを Go プロセスのメモリ空間に直接コンパイルすることで、プロセス外へのネットワークホップを回避しつつ、クラスタインスタンス間の分散整合性を維持し、認可レイテンシを排除します。
ALLOW / DENY) は、追記専用の SHA-256 ハッシュチェーン ($\text{Hash}n = \text{SHA-256}(\text{Hash}{n-1} + \text{Snapshot}_n)$) に記録され、SOC 2 Type II および ISO 27001 の監査証跡のために PostgreSQL へ非同期で永続化されます。ゲートウェイは、超低レイテンシのデータプレーン(HTTPリバースプロキシおよびインメモリPDP)、分離されたコントロールプレーン(ポリシーと失効管理のための管理API)、および耐障害性を備えたステート&パーシステンス層(Redis 7およびPostgreSQL 16)に分割されています。

図1:Archifyで生成された高レベルシステムアーキテクチャ図。
👉 🔍 ここをクリックしてインタラクティブなArchify図を開く (ダーク/ライトテーマ、クリック可能なノード、詳細なコンポーネント検査に対応)
graph TD
subgraph Clients["Perimeter & External Consumers"]
ClientApp["Client Applications (SPA / Mobile / Microservices)"]
SecOps["SecOps & Admin Console"]
end
subgraph DataPlane["Enterprise Zero-Trust Gateway (:8080)"]
direction TB
AuthMid["Auth Middleware (JWT, JTI, Leeway)"]
PEP["ABAC Interceptor (PEP Gate)"]
Resolver["Attribute Resolver (S, A, R, E)"]
OPA["Embedded OPA Engine (Rego Runtime)"]
Proxy["Reverse Proxy (httputil)"]
PubSubLis["PubSub Invalidation Listener"]
AuditLog["Non-Blocking Audit Logger"]
HashChain["SHA-256 Cryptographic Chainer"]
end
subgraph ControlPlane["Control Plane (:8082)"]
AdminAPI["Admin API (Revocations & Health)"]
end
subgraph StateTier["Distributed State & Persistence"]
Redis["Redis 7 (Vector Cache & Blacklist :6380)"]
Postgres["PostgreSQL 16 (Ledger & Tenant DB :5433)"]
end
subgraph UpstreamTier["Target Services"]
Upstream["Protected Upstream API (:8081)"]
end
ClientApp -->|"HTTPS + Bearer JWT"| AuthMid
SecOps -->|"Admin Key Auth"| AdminAPI
AdminAPI -->|"Publish JTI Revocation"| Redis
Redis -.->|"Pub/Sub Channel (<=100ms)"| PubSubLis
PubSubLis -->|"Invalidate Local LRU"| AuthMid
AuthMid -->|"Verified Identity Claims"| PEP
PEP -->|"Build Evaluation Context"| Resolver
Resolver -.->|"Query Vectors"| Redis
Resolver -->|"Vector (S, A, R, E)"| OPA
OPA -->|"ALLOW / DENY (<5ms SLA)"| PEP
PEP -->|"Authorized Traffic"| Proxy
Proxy -->|"Reverse Proxy Forward"| Upstream
PEP -.->|"Async Decision Record"| AuditLog
AuditLog -->|"Hash Chain Generation"| HashChain
HashChain -->|"Append-Only Immutable Write"| Postgres
| コンポーネント | レイヤー | 説明 | セキュリティと信頼性の保証 |
|---|---|---|---|
認証ミドルウェア (proxy/auth_middleware.go) | 境界イングレス | HMAC署名付きJWTトークンを検証し、発行者/対象者を確認し、クロックスキュー許容範囲($\pm 30\text{s}$)を適用し、ローカルJTIブラックリストをチェックします。 | ポリシー実行が始まる前に、境界で期限切れ、改ざん、またはブラックリスト登録されたトークンを拒否します。 |
ABACインターセプター (proxy/abac_interceptor.go) | 強制 (PEP) | HTTPリクエストをインターセプトし、属性解決とポリシー評価を調整し、転送するかフェイルクローズするかを決定します。 | デフォルト拒否のセマンティクスを強制します。すべての拒否理由を捕捉してログに記録し、セキュリティ監査を可能にします。 |
属性リゾルバー (engine/resolver.go) | コンテキスト拡充 | JWTクレーム、URIパラメータ、キャッシュされたテナントメタデータを組み合わせて、4つの評価ベクトル($S, A, R, E$)を合成します。 | インメモリルックアップにより、認可のホットパス上でSQLクエリのブロッキングを回避します。 |
組み込みOPAエンジン (engine/opa.go) | 決定 (PDP) | 事前コンパイルされたRegoポリシー(rbac_fallback.rego と abac_enterprise.rego)を実行するインプロセスOpen Policy Agent評価器です。 | 複雑なマルチ属性ルールをメモリ内で評価し、厳格な $\le 5.0\text{ms}$ p99レイテンシSLAを満たします。 |
リバースプロキシ (proxy/reverse_proxy.go) | データプレーン転送 | 認可されたリクエストをターゲットのバックエンドマイクロサービスに転送する高スループットのGoリバースプロキシです。 | 上流ヘッダーを保持し、認証済みサブジェクトコンテキストを注入し、レスポンスをストリーミングします。 |
PubSubリスナー (cache/pubsub_listener.go) | 無効化同期 | Redisの abac:v1:invalidate チャネルを購読し、トークンとポリシーの変更をインメモリキャッシュに伝播します。 | すべてのゲートウェイレプリカ間で分散キャッシュの無効化を $\le 100\text{ms}$ 以内に保証します。 |
監査ロガーとチェイナー (audit/logger.go) | 監査パイプライン | すべての決定に対して連続的なSHA-256ハッシュチェーンを計算する、上限付きの非同期ワーカープールです。 | ノンブロッキングのリングバッファにより、監査書き込みがプロキシトラフィックを抑制することはなく、通常負荷下でイベントの取りこぼしがゼロであることを保証します。 |
管理API (cmd/admin_api) | コントロールプレーン | 緊急トークン失効(POST /admin/revoke)とヘルス監視のための、ポート8082上の専用管理サービスです。 | 厳格な静的管理者資格情報(ABAC_ADMIN_KEY)で認証され、パブリックデータプレーントラフィックから分離されています。 |
すべての受信リクエストは、イングレスとトークン検証、インメモリ属性解決とポリシー決定、認可されたプロキシ処理と暗号学的監査ログ記録という3フェーズのパイプラインを通過します。

図2: Archify で生成されたエンドツーエンドのリクエストライフサイクルとポリシー決定パイプライン。
👉 🔍 ここをクリックしてインタラクティブなArchifyワークフローを開く
sequenceDiagram
autonumber
actor Client as Client App
participant PEP as Gateway PEP (:8080)
participant Auth as Auth Middleware
participant Cache as Redis 7 Cache
participant Resolver as Attribute Resolver
participant OPA as Embedded OPA
participant Upstream as Target Upstream (:8081)
participant Audit as Async Audit Logger
participant DB as PostgreSQL 16