在 GKE 上的 Envoy Sidecar 服务网格上设置服务安全
本页介绍了如何在 GKE 上的 Envoy Sidecar 服务网格上设置安全功能。
前提条件
首先,本指南假定您已完成以下操作:
在 GKE 上的边车上设置授权政策
本部分介绍如何在 GKE 上的 Cloud Service Mesh 边车上设置不同类型的授权政策。
您必须先安装 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 请求。
请按以下步骤创建并应用拒绝授权政策:
通过创建名为
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
应用政策:
kubectl apply -f deny-all-authz-policy.yaml
用于允许请求的授权政策
您还可以配置允许政策,仅允许与特定条件匹配的请求,同时拒绝其余请求。以下示例在 whereami
上配置了授权政策,其中仅允许请求中包含 http 标头 x-user-role:admin
的 GET
请求。
请按以下步骤创建并应用允许授权政策,删除之前创建的拒绝政策,然后再添加此政策以查看结果:
通过创建名为
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
应用政策:
kubectl apply -f allow-authz-policy.yaml
用于根据规则拒绝请求的授权政策
以下示例会在工作负载 whereami
位于路径 /admin
时,拒绝对其发出的传入 HTTP GET
请求。
请按以下步骤创建并应用拒绝授权政策:
通过创建名为
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
应用政策:
kubectl apply -f deny-path-authz-policy.yaml