使用第 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
模式。這類原則將會被忽略。