通用数据库审计是日志服务提供的一种轻量级、低成本数据库安全方案,支持通过抓包方式上报数据库的操作行为流量到日志服务。当您将数据库部署在Kubernetes集群中时,可在容器中部署抓包程序。本文介绍如何在容器中部署抓包程序。
前提条件
已创建通用数据库审计任务。具体操作,请参见配置通用数据库审计。
说明 只需完成配置向导中的任务配置步骤,其余步骤可直接跳过,直至完成。
部署方式
Kubernetes包括Sidecar和Daemonset两种部署方式。
- Sidecar方式
采用Sidecar方式时,sidecar容器与业务容器是部署在同一个Pod下的,共享网络命名空间。您可以将抓包程序部署在sidecar容器中,用于上报业务容器中的数据库的操作行为流量。
- Daemonset方式
采用Daemonset方式时,需在每个节点上运行一个Daemonset Pod。您需要让Daemonset Pod拥有网络监听能力,使得部署在Daemonset Pod中的抓包程序可以通过节点中veth-pair接口的一端对业务容器中的数据库的操作行为流量进行抓包。
Daemonset模式
- 登录Kubernetes集群。
- 创建ConfigMap。
- 执行如下命令创建一个名为packetbeat.yml的YAML文件。
vim packetbeat.yml
- 在packetbeat.yml文件中添加如下脚本,并根据实际情况设置其中的参数。
说明 packetbeat.flows用于抓取网络设备的所有流量。如果不需要,可添加enabled:false,以减少数据的传输。packetbeat.interfaces.device: any # Set `enabled: false` or comment out all options to disable flows reporting. packetbeat.flows: timeout: 30s period: 10s packetbeat.protocols: - type: mysql ports: [3306,3307] output.kafka: hosts: ["test-project.cn-hangzhou.log.aliyuncs.com:10012"] username: "test-project" password: "{ak}#{sk}" ssl.certificate_authorities: topic: 'general-db-logstore' partition.round_robin: reachable_only: false required_acks: 1 compression: gzip max_message_bytes: 1000000
重要参数说明如下,其他参数说明请参见Configure Packetbeat。
参数 说明 hosts 设置连接地址,格式为{Project名称}.{Endpoint}:Port,请根据Project的访问域名进行设置。更多信息,请参见服务入口。 - 阿里云内网:端口号为10011,例如test-project.cn-hangzhou-intranet.log.aliyuncs.com:10011。
- 公网:端口号为10012,例如test-project.cn-hangzhou.log.aliyuncs.com:10012。
username 设置为您在创建通用数据库审计任务时所选择的日志服务Project名称。 password 设置为阿里云账号的AccessKey,格式为{ak}#{sk}。请根据实际情况,将{ak}替换为您的AccessKey ID,将{sk}替换为您的AccessKey Secret。如何获取AccessKey,请参见访问密钥。 建议使用RAM用户的AccessKey。更多信息,请参见授权。
topic 设置为日志服务Logstore名称,固定为general-db-logstore。 该Logstore是您在创建通用数据库审计任务后,自动生成。
- 执行如下命令,使配置生效。
kubectl create configmap packetbeat-config --from-file=packetbeat.yml=packetbeat.yml
- 执行如下命令创建一个名为packetbeat.yml的YAML文件。
- 部署抓包工具。
- 执行如下命令创建一个名为packetbeat-daemonset.yaml的YAML文件。
vim packetbeat-daemonset.yaml
- 在packetbeat-daemonset.yaml文件中添加如下脚本。其中:
- hostNetwork: true表示开启hostNetwork,使得Daemonset Pod可以感知到Host机器上的网络设备。
- – NET_ADMIN表示增加NET_ADMIN能力,用于监听网络设备的流量。
apiVersion: apps/v1 kind: DaemonSet metadata: name: packetbeat-daemonset namespace: default spec: selector: matchLabels: app: packetbeat-daemonset template: metadata: name: packetbeat-daemonset labels: app: packetbeat-daemonset spec: restartPolicy: Always hostNetwork: true containers: - name: packetbeat image: docker.elastic.co/beats/packetbeat:8.1.0 resources: limits: cpu: 500m memory: 200Mi requests: cpu: 100m memory: 200Mi command: ["/bin/sh", "-c"] args: ["/usr/share/packetbeat/packetbeat --strict.perms=false --path.config=/etc/packetbeat/config"] securityContext: capabilities: add: - NET_ADMIN volumeMounts: - name: packetbeat-config mountPath: /etc/packetbeat/config terminationGracePeriodSeconds: 30 volumes: - name: packetbeat-config configMap: name: packetbeat-config items: - key: packetbeat.yml path: packetbeat.yml
- 执行如下命令,使配置生效。
kubectl apply -f packetbeat-daemonset.yaml
- 执行如下命令创建一个名为packetbeat-daemonset.yaml的YAML文件。
Sidecar模式
- 登录Kubernetes集群。
- 创建ConfigMap。
- 执行如下命令创建一个名为packetbeat.yml的YAML文件。
vim packetbeat.yml
- 在packetbeat.yml文件中添加如下脚本,并根据实际情况设置其中的参数。
说明 packetbeat.flows用于抓取网络设备的所有流量。如果不需要,可添加enabled:false,以减少数据的传输。packetbeat.interfaces.device: any # Set `enabled: false` or comment out all options to disable flows reporting. packetbeat.flows: timeout: 30s period: 10s packetbeat.protocols: - type: mysql ports: [3306,3307] output.kafka: hosts: ["test-project.cn-hangzhou.log.aliyuncs.com:10012"] username: "test-project" password: "{ak}#{sk}" ssl.certificate_authorities: topic: 'general-db-logstore' partition.round_robin: reachable_only: false required_acks: 1 compression: gzip max_message_bytes: 1000000
重要参数说明如下,其他参数说明请参见Configure Packetbeat。
参数 说明 hosts 设置连接地址,格式为{Project名称}.{Endpoint}:Port,请根据Project的访问域名进行设置。更多信息,请参见服务入口。 - 阿里云内网:端口号为10011,例如test-project.cn-hangzhou-intranet.log.aliyuncs.com:10011。
- 公网:端口号为10012,例如test-project.cn-hangzhou.log.aliyuncs.com:10012。
username 设置为您在创建通用数据库审计任务时所选择的日志服务Project名称。 password 设置为阿里云账号的AccessKey,格式为{ak}#{sk}。请根据实际情况,将{ak}替换为您的AccessKey ID,将{sk}替换为您的AccessKey Secret。如何获取AccessKey,请参见访问密钥。 建议使用RAM用户的AccessKey。更多信息,请参见授权。
topic 设置为日志服务Logstore名称,固定为general-db-logstore。 该Logstore是您在创建通用数据库审计任务后,自动生成。
- 执行如下命令,使配置生效。
kubectl create configmap packetbeat-config --from-file=packetbeat.yml=packetbeat.yml
- 执行如下命令创建一个名为packetbeat.yml的YAML文件。
- 部署抓包工具。
- 执行如下命令创建一个名为packetbeat-sidecar.yaml的YAML文件。
vim packetbeat-sidecar.yaml
- 在packetbeat-sidecar.yaml文件中添加如下脚本。
其中mysql-test为业务容器名称,请根据实际情况替换。
apiVersion: apps/v1 kind: Deployment metadata: name: packetbeat-sidecar namespace: default spec: selector: matchLabels: app: packetbeat-sidecar template: metadata: name: packetbeat-sidecar labels: app: packetbeat-sidecar spec: restartPolicy: Always containers: - name: mysql-test image: imega/mysql-client command: ["/bin/sh", "-c"] args: ["mysql --host='xxx' --user=xxx --password='xxx' --database=mysql --execute='show tables;'; sleep 6000"] - name: packetbeat-sidecar image: docker.elastic.co/beats/packetbeat:8.1.0 command: ["/bin/sh", "-c"] args: ["/usr/share/packetbeat/packetbeat --strict.perms=false --path.config=/etc/packetbeat/config"] securityContext: capabilities: add: - NET_ADMIN volumeMounts: - name: packetbeat-config mountPath: /etc/packetbeat/config volumes: - name: packetbeat-config configMap: name: packetbeat-config items: - key: packetbeat.yml path: packetbeat.yml
- 执行如下命令,使配置生效。
kubectl apply -f packetbeat-sidecar.yaml
- 执行如下命令创建一个名为packetbeat-sidecar.yaml的YAML文件。
后续步骤
在目标通用数据库审计任务中,查看已上报的数据。具体操作,请参见数据报表。
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/163583.html