Istio

Zero Trust アーキテクチャと Istio 実装手順 – mTLS・認可・外部認証の全体像

ⓘ本ページはプロモーションが含まれています

スポンサードリンク

1. Zero Trust の基本概念と Istio での対応

Zero Trust の核は以下の 3 原則です。

  • 最小特権 (Least Privilege) – 必要最低限のアクセスだけを許可する。
  • 常時検証 (Continuous Verification) – リクエスト毎に認証・認可と通信暗号化を行う。
  • 可視化 (Visibility) – 全トラフィックとポリシー評価結果を監査ログとして残す。
NIST SP 800‑204 要素 Istio が提供する機能 主な CRD
認証 (Authentication) 相互 TLS (mTLS) PeerAuthentication
認可 (Authorization) RBAC / 属性ベース認可 AuthorizationPolicy
アイデンティティ管理 外部 OIDC プロバイダー連携 RequestAuthentication
監査・可視化 テレメトリ、ログ、サービスマップ Telemetry v2、Kiali、Grafana

ポイント:このマッピングをベースに「認証 → 認可 → 外部 IdP」の順でポリシーを構築すれば、Zero Trust が Kubernetes クラスタ全体に浸透します。


2. mTLS の有効化と自動証明書ローテーション(Istio 1.21+)

2‑1. 全トラフィックへの mTLS 適用

Istio 1.21 以降では Citadel が廃止され、組み込みの内部 CA がデフォルトで有効になります。PeerAuthenticationSTRICT モードを設定すれば、クラスタ全体で即座に相互 TLS が強制されます。

2‑2. 証明書の自動ローテーション

  • デフォルト有効期間90 日defaultCertificateValidityDuration の既定値)です。
  • ローテーションは内部 CA が証明書残存期限の 30 日前に新しい証明書を発行し、Envoy がシームレスに切り替えます。
  • カスタマイズが必要な場合は MeshConfigdefaultCertificateAuthority セクションで validityDuration を上書きできます。

根拠:公式リファレンス「Istio Security – Certificate Management」(2024‑03) に記載されています。


3. AuthorizationPolicy と PeerAuthentication による RBAC 設計

3‑1. デフォルト deny の適用と例外許可

Zero Trust の「最小特権」を実装する基本戦略は Namespace 単位でデフォルト deny を設定し、必要な通信だけを明示的に許可することです。

許可ルール例:frontend → backend

JWT クレームベースの認可例

ポイントPeerAuthenticationSTRICT の場合、上記ポリシーは認証済みのリクエストだけが対象になるため、攻撃面が大幅に削減されます。


4. OPA Gatekeeper / Open Policy Agent と Istio ポリシーの自動適用

手作業で AuthorizationPolicy を管理するとヒューマンエラーが起きやすくなります。Gatekeeper は Kubernetes の Admission Control にフックし、Rego で記述したポリシー違反をデプロイ時に検出できます。

4‑1. ConstraintTemplate(MeshPolicy)例

4‑2. Constraint(必須ポリシー適用)

CI/CD パイプラインに kubectl apply -f constrainttemplate.yamlconstraint.yaml を組み込めば、プルリクエスト時に自動で検証が走り、違反があればマージを阻止できます。

効果:組織全体で「必ず mTLS(STRICT)」「AuthorizationPolicy が存在する」などのベースラインをコード化し、継続的に適用できるようになります。


5. 外部認証プロバイダー統合と GKE における PSA の活用

5‑1. OIDC / Keycloak 連携手順

Istio の RequestAuthentication が外部 IdP の JWKs を自動取得・キャッシュするため、トークンローテーションや鍵のロールオーバーが発生しても設定変更は不要です。

続いて、JWT クレームに基づく RBAC を設定します。

5‑2. PodSecurityAdmission (PSA) の正しい設定例

古くなった PodSecurityPolicy は非推奨です。GKE では PodSecurityAdmission が標準で提供され、enforce, warn, audit の3段階でポッドのセキュリティコンテキストを制御します。

上記設定をクラスター全体で有効化するには、GKE の --enable-pod-security-policy フラグは不要です。代わりに次のコマンドで PSA を適用します。

5‑3. NetworkPolicy と PSA の二層防御

NetworkPolicy がレイヤ 3/4 のトラフィック制御、PSA がポッドのランタイム属性を保証することで、Istio サイドカー以外のコンテナが不必要に外部へ通信したり、特権モードで実行されたりするリスクを排除できます。

まとめ:OIDC によるユーザー認証、PSA と NetworkPolicy による Pod レベルの防御を組み合わせれば、Zero Trust がネットワーク層から実行環境まで一貫して適用されます。


6. 監査ログ・テレメトリの収集と可視化、サイドカー自動インジェクション

6‑1. メトリクスとログの可視化基盤

Istio が出力する主要メトリクス(例:istio_requests_total, istio_authentication_policy_allow/deny)は Prometheus にスクレイプし、Grafana ダッシュボードKiali のサービスマップ で可視化します。

Prometheus 設定抜粋

Grafana ダッシュボード例

公式ダッシュボード ID 7639(Istio Mesh Overview)をインポートし、istio_requests_total の成功率や istio_authentication_policy_deny をリアルタイムで監視します。

Kiali デプロイ

Kiali UI の Policies タブで現在有効な AuthorizationPolicy と対象ワークロードを一目で確認できます。

6‑2. 安全なサイドカー自動インジェクション

Istio の自動インジェクションは Namespace ラベルSidecar カスタムリソース によって制御します。誤ってテスト環境に注入しないよう、対象 Namespace だけにラベルを付与しましょう。

Sidecar CRD で通信範囲を限定

この構成により、prod-team-a のみが自動的に Envoy を持ち、かつアウトバウンドは backend に限定されます。

最終ポイント:Prometheus + Grafana + Kiali でリアルタイム監視し、Namespace ラベルと Sidecar CRD でサイドカーの範囲を厳格に管理すれば、Zero Trust の「可視化」+「最小特権」が実装完了です。


まとめ

  1. 認証PeerAuthentication(STRICT)で全サービス間の mTLS を自動ローテーション(90 日)と共に有効化。
  2. 認可 – Namespace デフォルト deny と属性ベース AuthorizationPolicy による最小特権実装。
  3. 外部 IdP 連携 – OIDC (RequestAuthentication) と JWT クレームで細粒度のアクセス制御。
  4. ポリシー自動化 – Gatekeeper の ConstraintTemplate/Constraint で組織全体のベースラインをコード化。
  5. Pod セキュリティ – PodSecurityAdmission (PSA) と NetworkPolicy による二層防御。
  6. 可視化・運用 – Prometheus‑Grafana‑Kiali の統合と Sidecar カスタムリソースで安全かつ監査可能な環境を構築。

この手順に沿って Istio を設定すれば、Zero Trust がクラスタ全体に浸透し、攻撃面の縮小と運用可視性が同時に実現できます。

スポンサードリンク

-Istio