レイヤー4セキュリティポリシーの使用

Istio のセキュリティポリシーのレイヤー 4 (L4) 機能は、ztunnelによってサポートされており、

アンビエントモードで利用できます。Kubernetes ネットワークポリシーも、クラスターにCNIプラグインがサポートされていれば引き続き機能し、多層防御を提供するために使用できます。

ztunnel とウェイポイントプロキシの階層構造により、特定のワークロードに対してレイヤー 7 (L7) 処理を有効にするかどうかを選択できます。L7 ポリシーと Istio のトラフィックルーティング機能を使用するには、ワークロード用に

ウェイポイントをデプロイできます。ポリシーが 2 つの場所で適用できるようになったため、理解する必要がある考慮事項があります。

ztunnelを使用したポリシーの適用

ztunnel プロキシは、ワークロードがセキュアオーバーレイモードに登録されている場合、承認ポリシーの適用を実行できます。適用ポイントは、接続のパスにある受信側(サーバー側)の ztunnel プロキシです。

基本的な L4 承認ポリシーは次のようになります

apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
 name: allow-curl-to-httpbin
spec:
 selector:
   matchLabels:
     app: httpbin
 action: ALLOW
 rules:
 - from:
   - source:
       principals:
       - cluster.local/ns/ambient-demo/sa/curl

このポリシーは、サイドカーモードとアンビエントモードの両方で使用できます。

Istio の AuthorizationPolicy API の L4 (TCP) 機能は、アンビエントモードでもサイドカーモードと同じ機能動作をします。承認ポリシーがプロビジョニングされていない場合、デフォルトのアクションは ALLOW です。ポリシーがプロビジョニングされると、ポリシーの対象となる Pod は、明示的に許可されたトラフィックのみを許可します。上記の例では、ラベル app: httpbin が付いた Pod は、cluster.local/ns/ambient-demo/sa/curl の ID プリンシパルを持つソースからのトラフィックのみを許可します。他のすべてのソースからのトラフィックは拒否されます。

ポリシーのターゲット設定

サイドカーモードとアンビエントの L4 ポリシーは、同じ方法でターゲット設定されます。つまり、ポリシーオブジェクトが存在する名前空間と、spec のオプションの selector によってスコープが設定されます。ポリシーが Istio のルート名前空間(従来は istio-system)にある場合、すべての名前空間をターゲットにします。他の名前空間にある場合は、その名前空間のみをターゲットにします。

アンビエントモードの L7 ポリシーは、Kubernetes Gateway APIで構成されたウェイポイントによって適用されます。それらは、

targetRef フィールドを使用してアタッチされます。

許可されるポリシー属性

承認ポリシールールには、ソース (from)、オペレーション (to)、および条件 (when) 句を含めることができます。

属性のこのリストは、ポリシーが L4 のみと見なされるかどうかを決定します

タイプ属性肯定一致否定一致
ソースピア IDprincipalsnotPrincipals
ソース名前空間namespacesnotNamespaces
ソースIP ブロックipBlocksnotIpBlocks
オペレーション宛先ポートportsnotPorts
条件ソース IPsource.ip該当なし
条件ソース名前空間source.namespace該当なし
条件ソース IDsource.principal該当なし
条件リモート IPdestination.ip該当なし
条件リモートポートdestination.port該当なし

レイヤー7条件付きポリシー

ztunnel は L7 ポリシーを適用できません。L7 属性(つまり、上記の表にリストされていない属性)と一致するルールを持つポリシーが、受信側の ztunnel によって適用されるようにターゲット設定されている場合、DENY ポリシーとしてフェイルセーフになります。

この例では、HTTP GET メソッドのチェックを追加します

apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
 name: allow-curl-to-httpbin
spec:
 selector:
   matchLabels:
     app: httpbin
 action: ALLOW
 rules:
 - from:
   - source:
       principals:
       - cluster.local/ns/ambient-demo/sa/curl
   to:
   - operation:
       methods: ["GET"]
EOF

クライアント Pod の ID が正しい場合でも、L7 属性が存在すると、ztunnel は接続を拒否します

command terminated with exit code 56

ウェイポイント導入時の適用ポイントの選択

ウェイポイントプロキシがワークロードに追加されると、L4 ポリシーを適用できる場所が 2 つになります。(L7 ポリシーは、ウェイポイントプロキシでのみ適用できます。)

セキュアオーバーレイのみを使用すると、トラフィックはソースワークロードの ID を持つ宛先 ztunnel に表示されます。

ウェイポイントプロキシは、ソースワークロードの ID を偽装しません。トラフィックパスにウェイポイントを導入すると、宛先 ztunnel はソース ID ではなく、ウェイポイントの ID を持つトラフィックを表示します。

これは、ウェイポイントがインストールされている場合、**ポリシーを適用する理想的な場所が移行する**ことを意味します。L4 属性に対してのみポリシーを適用したい場合でも、ソース ID に依存している場合は、ポリシーをウェイポイントプロキシにアタッチする必要があります。2 つ目のポリシーは、ワークロードをターゲットにして、「メッシュ内トラフィックは、アプリケーションに到達するためにウェイポイントから来る必要がある」などのポリシーを ztunnel に適用させることができます。

ピア認証

相互 TLS (mTLS) モードを構成する Istio のピア認証ポリシーは、ztunnel によってサポートされています。

アンビエントモードのデフォルトポリシーは PERMISSIVE であり、Pod は mTLS で暗号化されたトラフィック(メッシュ内から)とプレーンテキストトラフィック(メッシュ外から)の両方を受け入れることができます。STRICT モードを有効にすると、Pod は mTLS で暗号化されたトラフィックのみを受け入れるようになります。

ztunnel とHBONEは mTLS の使用を意味するため、ポリシーで

DISABLE モードを使用することはできません。このようなポリシーは無視されます。

この情報は役に立ちましたか?
改善のための提案はありますか?

フィードバックありがとうございます!