在 GKE 上的 Envoy Sidecar 服务网格上设置服务安全

本页介绍了如何在 GKE 上的 Envoy Sidecar 服务网格上设置安全功能。

前提条件

首先,本指南假定您已完成以下操作:

在 GKE 上为 Sidecar 设置授权政策

本部分介绍了如何设置不同类型的 授权政策

在创建授权政策之前,您必须先将 GCPAuthzPolicy CustomResourceDefinition (CRD):

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

授权政策可对进入 Envoy 边车的流量强制执行访问权限控制。您可以对 Kubernetes 部署应用政策。部署应与授权政策位于同一命名空间。

用于拒绝所有请求的授权政策

如果您的工作负载仅应向外拨打电话, Cron 作业,您可以配置授权政策以拒绝任何传入 HTTP 向工作负载发出广告请求以下示例会拒绝向工作负载 whereami 发送传入 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: sidecar-example
    spec:
    targetRefs:
    - kind: Deployment
      name: wherami
    httpRules:
    - to:
        operations:
        - paths:
          - type: Prefix
            value: "/"
    action: DENY
    EOF
    
  2. 应用政策:

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

用于允许请求的授权政策

您还可以配置一项允许政策,仅允许与 同时拒绝其余的过滤条件以下示例在 whereami 上配置了授权政策,其中仅允许请求中包含 http 标头 x-user-role:adminGET 请求。

请按以下步骤创建并应用允许授权政策,删除之前创建的拒绝政策,然后再添加此政策以查看结果:

  1. 通过创建名为 allow-authz-policy.yaml 的文件创建自定义政策:

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

    kubectl apply -f allow-authz-policy.yaml
    

用于根据规则拒绝请求的授权政策

以下示例会在工作负载 whereami 位于路径 /admin 时,拒绝对其发出的传入 HTTP GET 请求。

请按以下步骤创建并应用拒绝授权政策:

  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: sidecar-example
    spec:
    targetRefs:
    - kind: Deployment
      name: whereami
    httpRules:
    - to:
        operations:
        - paths:
          - type: Prefix
            value: "/admin"
          methods: ["GET"]
    action: DENY
    EOF
    
  2. 应用政策:

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