本頁面說明如何在周邊網路建立授權政策。
必要條件
您必須符合下列條件,才能完成本文件中的步驟:
- 執行中的 GKE 叢集,已啟用 Cloud Service Mesh 周邊網路。
- 已註冊周邊網路的命名空間 (例如
ambient-test),並已部署範例用戶端和伺服器工作負載。 - 使用
GCPServerTLSPolicy(搭配mtlsMode: Strict) 和GCPClientTLSPolicy,在用戶端和伺服器工作負載之間啟用相互傳輸層安全標準 (mTLS)。與CLIENT_CERT_URI_SAN相符的身分型GCPAuthzPolicy規則需要啟用 mTLS,才能擷取用戶端的 SPIFFE 身分。
如需詳細的環境設定,請參閱「準備 GKE 周邊網路」。
預設為拒絕政策
根據預設,GKE Ambient Authorization Policy API 會允許所有流量,除非受到政策限制,這與標準 Kubernetes NetworkPolicy 行為一致。
DENY_BY_DEFAULT 動作可讓您變更這項預設行為。套用至命名空間時,這項政策會封鎖所有傳送至該命名空間中工作負載的流量,除非 ALLOW 政策明確允許。
本頁面說明如何在 Cloud Service Mesh 中設定及使用 DENY_BY_DEFAULT,為工作負載建立預設採用安全設定。
限制
套用 DENY_BY_DEFAULT 政策前,請注意下列限制:
- 每個命名空間只能建立一個
DENY_BY_DEFAULT政策。 - 具有
DENY_BY_DEFAULT動作的政策無法定義任何規則。 - 使用這項動作,即可設定命名空間層級的基準
matchLabels: {},指定所有 Pod。您無法使用DENY_BY_DEFAULT設定個別廣告連播限制。
設定預設拒絕授權政策
如要在命名空間中建立預設拒絕基準,並選擇性允許存取特定工作負載,請按照下列步驟操作:
建立
GCPAuthzPolicy並套用至命名空間,並將動作設為DENY_BY_DEFAULT。cat <<EOF > deny-by-default-policy.yaml && kubectl apply -f deny-by-default-policy.yaml apiVersion: networking.gke.io/v1 kind: GCPAuthzPolicy metadata: name: deny-by-default-authz namespace: ambient-test spec: action: DENY_BY_DEFAULT enforcementLevel: L4 targetRefs: - group: "" kind: Pod selector: matchLabels: {} EOF輸出內容大致如下:
gcpauthzpolicy.networking.gke.io/deny-by-default-authz created根據預設,這項政策會封鎖傳入
ambient-test命名空間中工作負載的所有輸入流量 (東西向和輸入)。不會限制命名空間中工作負載傳出的流量。如要選擇性允許流量,請建立並套用
ALLOW政策:cat <<EOF > allow-policy.yaml && kubectl apply -f allow-policy.yaml apiVersion: networking.gke.io/v1 kind: GCPAuthzPolicy metadata: name: allow-client-to-server namespace: ambient-test spec: action: ALLOW enforcementLevel: L4 targetRefs: - group: "" kind: Pod selector: matchLabels: app: server rules: - from: sources: - principals: - principalSelector: CLIENT_CERT_URI_SAN principal: type: Exact value: spiffe://PROJECT_ID.s3ns.svc.id.goog/ns/ambient-test/sa/client EOF將 PROJECT_ID 替換為專案 ID。
控制器接受後,政策傳播最多可能需要三分鐘。請等待三分鐘,再繼續操作。
測試用戶端與伺服器之間的連線。這項作業應會成功,因為符合
ALLOW政策。kubectl exec -it deploy/client -n ambient-test -- /bin/curl -fsLS server.ambient-test.svc.cluster.local測試伺服器與自身 (或任何其他未明確允許政策的工作負載) 之間的連線。由於
DENY_BY_DEFAULT政策,測試應會失敗。kubectl exec -it deploy/server -n ambient-test -- /bin/curl -fsLS server.ambient-test.svc.cluster.local輸出內容大致如下:
curl: (52) Empty reply from server.
記錄
如果要求遭授權政策拒絕,節點 Proxy 會在 Cloud Logging 中,以 gke-ambient-node-proxy-accesslog 記錄名稱寫入存取記錄項目。該項目在 JSON 酬載中包含下列欄位:
jsonPayload.error_details:- rbac_access_denied_matched_policy[none]
您可以使用 Cloud de Confiance 控制台中的 Logs Explorer,查看遭拒連線的存取記錄項目:
resource.type="k8s_container"
logName="projects/PROJECT_ID/logs/gke-ambient-node-proxy-accesslog"
jsonPayload.error_details=~"rbac_access_denied"
詳情請參閱「確認流量已通過驗證和授權」。
輸出安全性政策
如要檢查及控管從周邊網路工作負載傳出至外部端點或網際網路的流量,可以透過 Secure Web Proxy (SWP) 轉送輸出流量。
如要瞭解如何設定 GCPBackend 和 GCPEgressPolicy 資源,請參閱「透過 Secure Web Proxy 轉送環境輸出流量」。