为服务配置审核政策
本教程仅支持集群内控制平面实现。
通过审核政策,您可以审核对 Google Cloud 控制台中服务的数据访问, Cloud Service Mesh。审核您的服务有助于解答您的疑问 “谁做了什么,何时做过,原因可能是什么?”通过审核政策,您可以指定审核日志的创建时间以及日志内容。本指南介绍如何安装 Cloud Service Mesh,以便使用审核政策。
您在 Google Cloud 控制台的 Cloud Logging 日志浏览器中查看审核日志,因此只有以下平台支持审核政策:
- GKE on Google Cloud
- Google Distributed Cloud for VMware(纯软件)
- Google Distributed Cloud for Bare Metal(纯软件)
审核政策通过添加 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 安装,以在工作负载上启用自动 Sidecar 代理注入。请参阅部署和重新部署工作负载。
升级
按照 升级 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 > 日志浏览器:选择 Google Cloud 项目。
您尚未部署审核政策,因此您不会看到任何审核日志。请注意,审核日志与访问日志不同。如需查看
stackdriver
访问日志,请在查询构建器字段中输入以下查询,然后点击运行查询:logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"
如需详细了解如何使用日志浏览器,请参阅日志浏览器概览。
配置审核政策并查看审核日志
本部分提供了多个审核图书信息应用的选项。部署审核政策后,您可以发送一些请求,然后在日志浏览器中查看审核日志。
输入以下命令以获取用于与集群交互的身份验证凭据。此命令还会将
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