为服务配置审核政策
注意:本指南仅支持使用 Istio API 的 Cloud Service Mesh,不支持 Google Cloud API。如需了解详情,请参阅 Cloud Service Mesh 概览。本教程仅支持集群内控制平面实现。
审核政策使您可以审核对 Cloud Service Mesh 中服务的数据访问。审核服务可帮助您了解谁在何时执行了什么操作,以及可能的原因。通过审核政策,您可以指定审核日志的创建时间以及日志内容。本指南介绍如何安装 Cloud Service Mesh,以便使用审核政策。
您在 Google Cloud 控制台的 Cloud Logging Logs Explorer 中查看审核日志,因此只有以下平台支持审核政策:
- GKE on Google Cloud
- Google Distributed Cloud for VMware(纯软件)
- 适用于裸金属的 Google Distributed Cloud(纯软件)
审核政策通过添加 AUDIT 操作扩展 AuthorizationPolicy。此设置仅在其目标政策范围(可以是工作负载、命名空间或整个网格)内生效。这些政策 ORed 通过 OR 运算组合,也就是说,只要有政策要求记录请求,请求就会被记录。如果没有适用于给定工作负载的审核政策,则不会为该工作负载生成审核日志。
以下是一项示例审核政策,它审核对 myapi 中 /user/profile/* 路径的所有写入权限:
  apiVersion: security.istio.io/v1beta1
  kind: AuthorizationPolicy
  metadata:
    namespace: ns1
    name: anyname
  spec:
    selector:
      matchLabels:
        app: myapi
    action: AUDIT
    rules:
    - to:
      - operation:
          methods: ["POST", "UPDATE", "DELETE"]
          paths: ["/user/profile/*"]
限制
- 入站流量网关没有审核日志。
- 无法配置审核内容。
- 目前,Cloud Service Mesh 审核日志与常规访问日志具有相同的可靠性属性。例如,如果某个工作负载 Pod 重启,该工作负载的一些审核日志可能会丢失(如果没有持久保留)。
准备工作
按照安装依赖工具并验证集群中的步骤操作:准备网关配置
Cloud Service Mesh 允许您将网关部署和管理为服务网格的一部分。网关描述了在网格边缘运行的负载均衡器,用于接收传入或传出 HTTP/TCP 连接。网关是 Envoy 代理,可让您精确控制进出网格的流量。
asmcli 不会安装 istio-ingressgateway。我们建议您单独部署和管理控制平面和网关。如需了解详情,请参阅安装和升级网关。
自定义 Cloud Service Mesh 安装
如需使用审核政策,请自定义 Cloud Service Mesh 安装:
安装次数
- 按照安装 Cloud Service Mesh 中的步骤操作。 运行 - asmcli install时,请包括以下选项:- --option audit-authorizationpolicy- 例如: - ./asmcli install \ --project_id PROJECT_ID \ --cluster_name CLUSTER_NAME \ --cluster_location CLUSTER_LOCATION \ --ca mesh_ca \ --output_dir DIR_PATH \ --enable_all \ --option audit-authorizationpolicy- 请务必指定配置 Cloud Service Mesh 所需的任何其他叠加文件。 
- 完成 Cloud Service Mesh 安装,以在工作负载上启用自动边车代理注入。请参阅部署和重新部署工作负载。 
升级
- 按照升级 Cloud Service Mesh 中的步骤操作。运行 - asmcli install时,请包括以下选项:- --option audit-authorizationpolicy- 例如: - ./asmcli install \ --project_id PROJECT_ID \ --cluster_name CLUSTER_NAME \ --cluster_location CLUSTER_LOCATION \ --ca mesh_ca \ --output_dir DIR_PATH \ --enable_all \ --option audit-authorizationpolicy- 请务必指定配置 Cloud Service Mesh 所需的任何其他叠加文件。 
- 完成 Cloud Service Mesh 安装,以在工作负载上启用自动边车代理注入。如需了解详情,请参阅切换到新的控制平面 
使用审核日志记录
本部分通过图书信息示例演示如何使用审核日志记录。
- 将图书信息示例应用部署到默认命名空间。 
- 获取入站流量网关的外部 IP 地址,并向示例应用发送请求以生成一些流量。 
- 在 Google Cloud 控制台中,前往导航菜单 ,选择 Logging > Logs Explorer: 
- 选择一个 Google Cloud 项目。 
- 您尚未部署审核政策,因此您不会看到任何审核日志。请注意,审核日志与访问日志不同。如需查看 - stackdriver访问日志,请在查询构建器字段中输入以下查询,然后点击运行查询:- logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"- 如需详细了解如何使用日志浏览器,请参阅日志浏览器概览。 
配置审核政策并查看审核日志
本部分提供了多个审核图书信息应用的选项。部署审核政策后,您可以发送一些请求,然后在 Logs Explorer 中查看审核日志。
- 输入以下命令以获取用于与集群交互的身份验证凭据。此命令还会将 - kubectl的当前上下文设置为该集群。- gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
- 应用以下审核政策来审核对 - /productpage路径的- GET请求:- kubectl apply -f - << EOF apiVersion: "security.istio.io/v1beta1" kind: "AuthorizationPolicy" metadata: name: "audit-productpage" namespace: default spec: action: AUDIT rules: - to: - operation: methods: ["GET"] paths: ["/productpage"] EOF
- 向图书信息发送一些请求。 
- 在日志浏览器的查询构建器字段中输入以下查询,然后点击运行查询: - logName="projects/PROJECT_ID/logs/server-istio-audit-log"- 该查询会返回如下所示的日志:  
- 应用以下政策以审核对 - bookinfo-ratings服务的请求。审核政策是叠加的。应用以下政策后,您会看到对 ProductPage 和 Ratings 的请求的审核日志。- kubectl apply -f - << EOF apiVersion: "security.istio.io/v1beta1" kind: "AuthorizationPolicy" metadata: name: "audit-ratings" namespace: default spec: action: AUDIT rules: - from: - source: principals: ["cluster.local/ns/default/sa/bookinfo-ratings"] to: - operation: methods: ["GET"] EOF- 新审核政策必须先传播,然后才能生效。 
- 向图书信息发送 10 个或更多请求,以确保请求到达评分服务,然后在日志浏览器中查看审核日志。审核日志类似以下内容:  
- 应用以下政策以审核默认命名空间中的所有服务。 - kubectl apply -f - << EOF apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: namespace: default name: "audit-all" spec: action: AUDIT rules: - {} EOF
- 向图书信息发送更多请求,然后在日志浏览器中查看审核日志。现在,审核日志记录所有请求:  
- 如果要再次将审核政策限制为 ProductPage 和 Ratings,可以删除 - audit-all政策:- kubectl delete authorizationpolicy audit-all -n default
问题排查
如果在启用审核政策后没有看到任何审核日志,请检查以下内容:
- 确保日志浏览器中指定的时间段内有流量。如果您是使用图书信息进行测试,可以通过多次运行以下命令来发送请求: - curl -s http://EXTERNAL_IP/productpage | grep Bookstore
- 检查入站流量网关上是否有 - AuthorizationPolicy阻止请求发送到已审核服务。
- 在日志浏览器中使用以下过滤条件查看 - stackdriver访问日志,验证您的请求是否已到达应用:- logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver" 
- 如需确认是否已配置 Stackdriver 并启用审核日志,请转储当前 - istiod状态的配置。在- config_dump中搜索- enable_audit_log以及您的审核政策的名称。- istioctl dashboard envoy POD_NAME.NAMESPACE     
- 如需确保请求与审核政策规则匹配,您可以查看基于角色的访问控制 (RBAC) 调试日志。使用以下命令开启 RBAC 调试日志记录: - kubectl exec POD_NAME -n NAMESPACE -c istio-proxy -- pilot-agent request POST 'logging?rbac=debug'
- 发送一些请求,然后使用 - kubectl logs命令查看 pod 的日志:- kubectl logs POD_NAME -n NAMESPACE -c istio-proxy