Envoy Gatewayの高階セキュリティポリシーとOIDC認証の実裝

はじめに

Kubernetes環境におけるAPIゲートウェイの管理を簡素化するためのEnvoy Gatewayは、CNCF(Cloud Native Computing Foundation)のエコシステムにおいて重要な役割を果たしています。この記事では、Envoy Gatewayが提供する高度なセキュリティポリシーの設計と、OIDC(OpenID Connect)認証の実裝方法を深く掘り下げます。特に、OAuthベースの認証・認可メカニズムや、カスタム拡張機能の活用方法に焦點を當て、実際の運用例をもとに説明します。

技術の定義と基本概念

Envoy Gatewayは、Kubernetes Gateway APIの実裝として設計されたツールで、APIゲートウェイのデプロイと管理を自動化します。Envoy Proxyと連攜し、スタンドアロン環境やKubernetesクラスター內のトラフィックを統合的に制御します。セキュリティポリシーは、トラフィックの暗號化、認証、アクセス制御を実現するための基盤であり、OIDCやOAuthなどの認証プロトコルをサポートしています。

重要な特性と機能

二層階層のセキュリティポリシー

Envoy Gatewayのセキュリティポリシーは、ゲートウェイ層ルート層の二層階層構造を持ちます。ゲートウェイ層では、全ルートに適用されるグローバルなセキュリティ設定を定義し、ルート層では特定のルートに特化したポリシーを個別に設定できます。この設計により、柔軟なアクセス制御が可能になります。

認証・認可メカニズム

  • Basic Auth:シンプルなユーザー名とパスワードによる認証
  • JWT Token:カスタムのクレーム(Claim)と署名検証をサポート
  • API Key:ヘッダーからAPIキーを抽出し、シークレットと照合
  • OIDC:Amazon Cognitoや自前のIDプロバイダーと統合

認可では、JWTのクレーム(例:subemail)やクライアントIP、リクエストメソッド、User Agentなどを基に、アクセス制御を実現します。

自訂拡張機能

ポリシーは、ゲートウェイやルートリソースに直接アタッチ可能で、コアリソースの変更を必要としません。これにより、カスタムの認証・認可ロジックを柔軟に実裝できます。

実裝手順と例

OIDC認証の実裝

  1. 管理者は、OIDCプロバイダー(例:Amazon Cognito)を指定したセキュリティポリシーを作成します。
  2. ゲートウェイは、このポリシーをEnvoyの構成に自動的に変換し、プロキシに適用します。
  3. ユーザーがIDトークンを持たない場合、プロキシはOIDCログインページにリダイレクトします。
  4. ユーザーがログイン後、Authorisation Codeを取得し、IDトークンに交換します。
  5. プロキシがIDトークンを検証した後、後端サービスへのアクセスを許可します。

自前のIDプロバイダーの設定

  • 使用例:Klogなどの自前のIDプロバイダーをデプロイ
  • 設定手順
    1. バックエンドリソースを設定し、IDプロバイダーのホスト名とポートを指定
    2. セキュリティポリシーでCSR(クライアントシークレット)をConfigMapから取得
    3. ゲートウェイはCSRを使用してTLS接続を確立し、IDプロバイダーと通信

セキュリティポリシーの例

apiVersion: gateway.envoyproxy.io/v1alpha1
kind: SecurityPolicy
metadata:
  name: oidc-policy
spec:
  provider:
    type: oidc
    clientID: "your-client-id"
    clientSecretRef:
      name: oidc-secret
    issuerURL: "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_123456789"
  rules:
    - match:
        path:
          prefix: "/myapp"
      action:
        authenticate:
          oidc:
            issuer: "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_123456789"
            clientID: "your-client-id"
            clientSecretRef:
              name: oidc-secret
    - match:
        path:
          prefix: "/secure"
      action:
        authorize:
          jwt:
            issuer: "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_123456789"
            audience: "your-audience"

重要な技術ポイント

  • Gateway APIの標準化:Kubernetes Gateway APIを通じてトラフィックルーティングとセキュリティポリシーを統一管理
  • ポリシーの拡張性:コアリソースを変更せずにカスタムロジックを追加可能
  • 動的拡張:認証・認可のロジックを柔軟にカスタマイズ
  • 透明性:アプリケーション層は認証処理を意識せず、ゲートウェイが代理で処理
  • セキュリティ:TLS、JWT署名検証、IPフィルタリングなどのメカニズムをサポート

結論

Envoy Gatewayは、Kubernetes環境におけるセキュアなトラフィック管理を実現するための強力なツールです。OIDC認証の実裝や、カスタム拡張機能の活用により、高度なセキュリティポリシーを柔軟に構築できます。実際の運用では、OIDCプロバイダーとの連攜や、自前のIDプロバイダーの設定が重要です。セキュリティポリシーの設計においては、認証・認可の條件を明確に定義し、トラフィックのセキュリティを確保することが不可欠です。