为服务配置审核政策

本教程仅支持集群内控制平面实现

通过审核政策,您可以审核对 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 安装:

安装次数

  1. 按照 安装 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 所需的任何其他叠加层文件。

  2. 完成 Cloud Service Mesh 安装,以在工作负载上启用自动 Sidecar 代理注入。请参阅部署和重新部署工作负载

升级

  1. 按照 升级 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 所需的任何其他叠加层文件。

  2. 完成 Cloud Service Mesh 安装以启用自动 工作负载的边车代理注入。如需了解详情,请参阅切换到新的控制平面

使用审核日志记录

本部分通过图书信息示例演示如何使用审核日志记录。

  1. 图书信息示例应用部署到默认命名空间。

  2. 获取入站流量网关的外部 IP 地址,并向示例应用发送请求以生成一些流量。

  3. 在 Google Cloud 控制台中,转到导航菜单 ,然后选择 Logging > 日志浏览器

    转到日志浏览器

  4. 选择 Google Cloud 项目。

  5. 您尚未部署审核政策,因此您不会看到任何审核日志。请注意,审核日志与访问日志不同。如需查看 stackdriver 访问日志,请在查询构建器字段中输入以下查询,然后点击运行查询

    logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"
    

    如需详细了解如何使用日志浏览器,请参阅日志浏览器概览

配置审核政策并查看审核日志

本部分提供了多个审核图书信息应用的选项。部署审核政策后,您可以发送一些请求,然后在日志浏览器中查看审核日志。

  1. 输入以下命令以获取用于与集群交互的身份验证凭据。此命令还会将 kubectl 的当前上下文设置为该集群。

    gcloud container clusters get-credentials CLUSTER_NAME \
        --project=PROJECT_ID \
        --zone=CLUSTER_LOCATION
    
  2. 应用以下审核政策来审核对 /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
    
  3. 向图书信息发送一些请求。

  4. 在日志浏览器的查询构建器字段中输入以下查询,然后点击运行查询

    logName="projects/PROJECT_ID/logs/server-istio-audit-log"
    

    该查询会返回如下所示的日志:

    图片

  5. 应用以下政策以审核对 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
    

    新审核政策必须先传播,然后才能生效。

  6. 向图书信息发送 10 个或更多请求,以确保请求到达评分服务,然后在日志浏览器中查看审核日志。审核日志类似以下内容:

    图片

  7. 应用以下政策以审核默认命名空间中的所有服务。

    kubectl apply -f - << EOF
    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      namespace: default
      name: "audit-all"
    spec:
      action: AUDIT
      rules:
        - {}
    EOF
    
  8. 向图书信息发送更多请求,然后在日志浏览器中查看审核日志。现在,审核日志记录所有请求:

    图片

  9. 如果要再次将审核政策限制为 ProductPage 和 Ratings,可以删除 audit-all 政策:

    kubectl delete authorizationpolicy audit-all -n default
    

问题排查

如果在启用审核政策后没有看到任何审核日志,请检查以下内容:

  1. 确保日志浏览器中指定的时间段内有流量。如果您是使用图书信息进行测试,可以通过多次运行以下命令来发送请求:

    curl -s http://EXTERNAL_IP/productpage | grep Bookstore
    
  2. 检查入站流量网关上是否有 AuthorizationPolicy 阻止请求发送到已审核服务。

  3. 在日志浏览器中使用以下过滤条件查看 stackdriver 访问日志,验证您的请求是否已到达应用:

    logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"
    

    图片

  4. 如需确认是否已配置 Stackdriver 并启用审核日志,请转储当前 istiod 状态的配置。在 config_dump 中搜索 enable_audit_log 以及您的审核政策的名称。

    istioctl dashboard envoy POD_NAME.NAMESPACE
    

    图片 图片 图片

  5. 如需确保请求与审核政策规则匹配,您可以查看基于角色的访问权限控制 (RBAC) 调试日志。使用以下命令开启 RBAC 调试日志记录:

    kubectl exec POD_NAME -n NAMESPACE -c istio-proxy -- pilot-agent request POST 'logging?rbac=debug'
    
  6. 发送一些请求,然后使用 kubectl logs 命令查看 pod 的日志:

    kubectl logs POD_NAME -n NAMESPACE -c istio-proxy
    

后续步骤