在 GKE 的無 Proxy gRPC 服務網格上設定服務安全性

本頁面說明如何在 GKE 上設定無 Proxy gRPC 服務網格的安全功能。

必要條件

本指南假設您已具備以下條件:

在無 Proxy gRPC 服務上設定授權政策。

本節說明如何在 GKE 的 Cloud Service Mesh 無 Proxy gRPC 服務上,設定不同類型的授權政策

您必須先安裝 GCPAuthzPolicy CustomResourceDefinition (CRD),才能建立授權政策:

curl https://github.com/GoogleCloudPlatform/gke-networking-recipes/blob/main/gateway-api/config/mesh/crd/experimental/gcpauthzpolicy.yaml \
| kubectl apply -f -

授權政策可對進入無 Proxy gRPC 服務的流量強制執行存取權控管。政策可套用至 Kubernetes 部署項目。部署作業應與授權政策位於相同命名空間。

授權政策,拒絕所有要求

如果工作負載只會發出外呼,例如 Cron 工作,您可以設定授權政策,拒絕工作負載的所有傳入 HTTP 要求。下列範例會拒絕傳送至 gRPC 服務 psm-grpc-server 的 HTTP 要求。

請按照下列步驟建立及套用拒絕授權政策:

  1. 建立名為 deny-all-authz-policy.yaml 的檔案,藉此建立拒絕政策:

    cat >deny-all-authz-policy.yaml <<EOF
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: myworkload-authz
      namespace: default
    spec:
    targetRefs:
    - kind: Deployment
      name: psm-grpc-server
    httpRules:
    - to:
        operations:
        - paths:
          - type: Prefix
            value: "/"
    action: DENY
    EOF
    
  2. 套用政策:

    kubectl apply -f deny-all-authz-policy.yaml
    

允許要求的授權政策

您也可以設定允許政策,只允許符合特定條件的要求,其餘一律拒絕。下列範例會在 psm-grpc-server 上設定授權政策,只允許要求中含有 HTTP 標頭 x-user-role:adminPOST 要求。

請按照下列步驟建立並套用允許授權政策,並在新增這項政策前刪除先前建立的拒絕政策,以查看結果:

  1. 建立名為 allow-authz-policy.yaml 的檔案,即可建立自訂政策:

    cat >allow-authz-policy.yaml <<EOF
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: myworkload-authz
      namespace: default
    spec:
    targetRefs:
    - kind: Deployment
      name: psm-grpc-server
    httpRules:
    - to:
        operations:
        - methods: ["POST"]
      when: "request.headers['x-user-role'] == 'admin'
    action: ALLOW
    EOF
    
  2. 套用政策:

    kubectl apply -f allow-authz-policy.yaml
    

授權政策,可根據規則拒絕要求

以下範例會拒絕傳送至路徑 /admin 的工作負載 psm-grpc-server 的 HTTP POST 要求。

請按照下列步驟建立及套用拒絕授權政策:

  1. 建立名為 deny-path-authz-policy.yaml 的檔案,藉此建立拒絕政策:

    cat >deny-path-authz-policy.yaml <<EOF
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: myworkload-authz
      namespace: default
    spec:
    targetRefs:
    - kind: Deployment
      name: psm-grpc-server
    httpRules:
    - to:
        operations:
        - paths:
          - type: Prefix
            value: "/admin"
          methods: ["GET"]
    action: DENY
    EOF
    
  2. 套用政策:

    kubectl apply -f deny-path-authz-policy.yaml