使用第 4 層安全策略

Istio 的安全策略中的第 4 層 (L4) 功能由 ztunnel 支援,並且在環境模式中可用。如果您的叢集具有支援它們的CNI 外掛程式,則 Kubernetes 網路原則 也會繼續運作,並且可以用於提供深度防禦。

ztunnel 和 航點代理的分層讓您可以選擇是否要為給定的工作負載啟用第 7 層 (L7) 處理。要使用 L7 原則和 Istio 的流量路由功能,您可以為您的工作負載部署航點。由於現在可以在兩個地方強制執行原則,因此需要了解一些考量因素

使用 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

此原則可用於Sidecar 模式和環境模式。

Istio AuthorizationPolicy API 的 L4 (TCP) 功能在環境模式中的功能行為與在 Sidecar 模式中相同。當未佈建授權原則時,預設動作為 ALLOW。一旦佈建原則,以該原則為目標的 Pod 僅允許明確允許的流量。在上面的範例中,標籤為 app: httpbin 的 Pod 僅允許來自具有身分主體 cluster.local/ns/ambient-demo/sa/curl 的來源的流量。來自所有其他來源的流量將被拒絕。

目標策略

Sidecar 模式和環境中的 L4 原則以相同的方式設定目標:它們由原則物件所在的命名空間和 spec 中的可選 selector 設定範圍。如果原則位於 Istio 根命名空間(傳統上為 istio-system),則它將以所有命名空間為目標。如果它位於任何其他命名空間中,則它只會以該命名空間為目標。

環境模式中的 L7 原則由航點強制執行,這些航點透過Kubernetes Gateway API 設定。它們使用 targetRef 欄位附加

允許的原則屬性

授權原則規則可以包含來源 (from)、操作 (to) 和條件 (when) 子句。

此屬性列表決定原則是否被視為僅限 L4

類型 屬性 肯定匹配 否定匹配
來源 對等身分 principals notPrincipals
來源 命名空間 namespaces notNamespaces
來源 IP 區塊 ipBlocks notIpBlocks
操作 目的地連接埠 ports notPorts
條件 來源 IP source.ip 不適用
條件 來源命名空間 source.namespace 不適用
條件 來源身分 source.principal 不適用
條件 遠端 IP destination.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 的身分正確,L7 屬性的存在也會導致 ztunnel 拒絕連線

command terminated with exit code 56

引入航點時選擇強制執行點

當航點代理新增到工作負載時,您現在有兩個可以強制執行 L4 原則的地方。(L7 原則只能在航點代理強制執行。)

僅使用安全疊加時,流量會在目的地 ztunnel 中顯示為來源工作負載的身分。

航點代理不會模擬來源工作負載的身分。一旦您在流量路徑中引入航點,目的地 ztunnel 將會看到具有航點身分的流量,而不是來源身分。

這表示當您安裝了航點時,強制執行原則的理想位置會發生轉變。即使您只想針對 L4 屬性強制執行原則,如果您依賴來源身分,則應將您的原則附加到您的航點代理。第二個原則可以針對您的工作負載,以使其 ztunnel 強制執行類似「網格內流量必須來自我的航點才能到達我的應用程式」的原則。

對等驗證

ztunnel 支援 Istio 的對等驗證原則,這些原則會設定相互 TLS (mTLS) 模式。

環境模式的預設原則為 PERMISSIVE,允許 Pod 接受 mTLS 加密的流量(來自網格內)和純文字流量(來自網格外)。啟用 STRICT 模式表示 Pod 將僅接受 mTLS 加密的流量。

由於 ztunnel 和 HBONE 表示使用 mTLS,因此不可能在原則中使用 DISABLE 模式。這類原則將會被忽略。

此資訊是否實用?
您是否有任何改進建議?

感謝您的回饋!