卡巴斯基容器安全

连接到外部数据存储资源

除了分发包中包含的卡巴斯基容器安全组件外,该解决方案还可以与以下外部数据存储资源配合使用:

  • PostgreSQL 数据库
  • ClickHouse DBMS
  • 兼容 S3 的 MinIO 文件存储

通过 values.yaml 配置文件来配置与外部数据存储资源连接的设置。

本节内容

为外部 PostgreSQL 数据库创建用户

使用外部 ClickHouse DBMS

配置 MinIO 外部存储设置

页首
[Topic 298985]

为外部 PostgreSQL 数据库创建用户

对于卡巴斯基容器安全,您可以使用解决方案中包含的 PostgreSQL 数据库或您自己的 PostgreSQL 数据库。要安装不适用于卡巴斯基容器安全模式的外部 PostgreSQL 数据库,您必须创建单独的用户。您可以通过安装带有为外部 PostgreSQL 数据库指定的模式参数的 Helm Chart 包来执行此操作。

要为外部 PostgreSQL 数据库创建具有自定义模式的用户:

  1. 运行以下命令为外部 PostgreSQL 数据库创建单独的命名空间:

    kubectl create ns kcspg

    其中kcspg是外部 PostgreSQL 数据库的命名空间。

  2. 要部署外部 PostgreSQL 数据库:
    1. 在 pg.yaml 配置文件中指定部署外部 PostgreSQL 数据库的参数。

      用于部署外部 PostgreSQL 数据库的参数

      apiVersion: apps/v1

      kind: Deployment

      metadata:

      annotations:

      deployment.kubernetes.io/revision: "1"

      labels:

      app: postgres

      component: postgres

      name: postgres

      namespace: kcspg

      spec:

      replicas: 1

      selector:

      matchLabels:

      app: postgres

      component: postgres

      strategy:

      type: Recreate

      template:

      metadata:

      creationTimestamp: null

      labels:

      app: postgres

      component: postgres

      spec:

      containers:

      - name: postgres

      image: postgres:13-alpine

      ports:

      - containerPort: 5432

      env:

      - name: POSTGRES_DB

      value: api

      - name: POSTGRES_USER

      value: postgres

      - name: POSTGRES_PASSWORD

      value: postgres

      volumeMounts:

      - mountPath: "/var/lib/postgresql/data"

      name: "pgdata"

      imagePullSecrets:

      - name: ci-creds

      volumes:

      - hostPath:

      path: "/home/docker/pgdata"

      name: pgdata

      该参数指定数据库的密码。然后,您必须在 values.yaml 配置文件的infraconfig部分中指定此密码,该文件是解决方案分发套件中包含的Helm Chart 包的一部分。

    2. 运行以下命令:

      kubectl apply -f pg.yaml -n kcspg

    该外部数据库的名称格式如下:

    pod_name >.命名空间名称>.服务>.cluster.local

    例如,postgres.kcspg.svc.cluster.local

  3. 要在集群中部署服务对象:
    1. 在 svc.yaml 配置文件中指定服务对象部署参数。

      用于在集群中部署服务对象的参数

      apiVersion: v1

      kind: Service

      metadata:

      name: postgres

      spec:

      type: ClusterIP

      selector:

      component: postgres

      ports:

      - port: 5432

      targetPort: 5432

    2. 运行以下命令:

      kubectl apply -f svc.yaml -n kcspg

  4. 要创建用户、模式和用户-模式关系:
    1. 使用步骤 2b 中展开的 postgres 元素,登录到Pod。
    2. 启动 psql 交互式终端:

      psql -h localhost -U postgres -d api

    3. 运行以下命令:

      CREATE ROLE kks LOGIN PASSWORD 'kks' NOINHERIT CREATEDB;

      CREATE SCHEMA kks AUTHORIZATION kks;

      GRANT USAGE ON SCHEMA kks TO PUBLIC;

  5. 在 values.yaml 配置文件中,指定使用外部 PostgreSQL 数据库所需的参数。

    values.yaml 文件中的参数

    default:

    postgresql:

    external: true

    configmap:

    infraconfig:

    type: fromEnvs

    envs:

    POSTGRES_HOST: postgres.kcspg.svc.cluster.local

    POSTGRES_PORT: 5432

    POSTGRES_DB_NAME: api

    secret:

    infracreds:

    type: fromEnvs

    envs:

    POSTGRES_USER: kks

    POSTGRES_PASSWORD: kks

    values.yaml中指定的参数值必须与 pg.yaml 和svc.yaml 配置文件中对应参数的值匹配。

  6. 开始解决方案更新

    使用外部 PostgreSQL 数据库创建用户的命令示例

    export KUBECONFIG=/root/.kube/config

    export CHART_URL=repo.kcs.kaspersky.com

    export CHART_USERNAME=<CHART_USERNAME>

    export CHART_PASSWORD=<CHART_PASSWORD>

    export VERSION=2.0.0

    export KCS_HOSTNAME=kcs.apps.aws.ext.company.com

    export IMAGE_URL=company.gitlab.examplecloud.com:5050

    export IMAGE_USERNAME=<repo_user>

    export IMAGE_PASSWORD=<repo_pass>

    cd /tmp

    helm registry login --username $IMAGE_USERNAME --password $IMAGE_PASSWORD company.gitlab.examplecloud.com:5050/company/kcs/chart

    helm pull oci://company.gitlab.examplecloud.com:5050/company/kcs/chart/kcs --version $VERSION

    tar -xf kcs*.tgz -C /tmp

    cp -rf /tmp/values.yaml /tmp/kcs

    cd /tmp/kcs

    helm upgrade --install kcs-release --create-namespace --namespace kcs --values values.yaml --version $VERSION --timeout 30m --wait --debug .

页首
[Topic 292954]

使用外部 ClickHouse DBMS

除了作为卡巴斯基容器安全组件并包含在分发包中的 ClickHouse DBMS 之外,该解决方案还可以使用外部 ClickHouse DBMS 的资源。为此,您必须执行以下操作:

卡巴斯基容器安全与 ClickHouse 22.6 或更高版本兼容。

页首
[Topic 298717]

为卡巴斯基容器安全创建数据库

要为卡巴斯基容器安全创建数据库:

在工作站上的 ClickHouse 中,运行以下命令:

CREATE DATABASE IF NOT EXISTS kcs

其中 kcs 是卡巴斯基容器安全数据库的名称。

要配置为卡巴斯基容器安全所创建的数据库的设置:

  1. 添加用户并定义他们的授权方法。为此,您必须执行以下操作:
    1. 添加以下用户:
      • 有权读取卡巴斯基容器安全核心所接收数据的用户(读取者)。

        <roles>

        <kcs_reader_role>

        <grants>

        <query>GRANT SELECT ON kcs.*</query>

        </grants>

        </kcs_reader_role>

      • 有权写入来自外部代理请求的数据的用户(写入者)。

        <roles>

        <kcs_writer_role>

        <grants>

        <query>GRANT CREATE TABLE, INSERT, ALTER, UPDATE ON kcs.*</query>

        <query>GRANT SELECT (source_ip, source_port, source_alias, dest_ip, dest_port, dest_alias, protocol, severity, action, event_time, count, type) ON kcs.node_agent_events</query>

        </grants>

        </kcs_writer_role>

    2. 指定用户授权方法:使用密码或证书。

      配置密码认证用户的示例

      <clickhouse>

      ...

      <kcsuser-write>

      <password>*********</password>

      <networks>

      <ip>::/0</ip>

      </networks>

      ...

      <grants>

      <query>GRANT kcs_writer_role</query>

      </grants>

      </kcsuser-write>

      <kcsuser-read>

      <password>*********</password>

      <networks>

      <ip>::/0</ip>

      </networks>

      ...

      <grants>

      <query>GRANT kcs_reader_role</query>

      </grants>

      </kcsuser-read>

      ...

      <roles>

      <kcs_reader_role>

      <grants>

      <query>GRANT SELECT ON kcs.*</query>

      </grants>

      </kcs_reader_role>

      <kcs_writer_role>

      <grants>

      <query>GRANT CREATE TABLE, INSERT, ALTER, UPDATE ON kcs.*</query>

      <query>GRANT SELECT (source_ip, source_port, source_alias, dest_ip, dest_port, dest_alias, protocol, severity, action, event_time, count, type) ON kcs.node_agent_events</query>

      </grants>

      </kcs_writer_role>

      ...

      </roles>

      ...

      </clickhouse>

      配置证书认证用户的示例

      <clickhouse>

      ...

      <kcsuser-write>

      <ssl_certificates>

      <common_name>kcsuser-write</common_name>

      </ssl_certificates>

      <networks>

      <ip>::/0</ip>

      </networks>

      ...

      <grants>

      <query>GRANT kcs_writer_role</query>

      </grants>

      </kcsuser-write>

      <kcsuser-read>

      <ssl_certificates>

      <common_name>kcsuser-read</common_name>

      </ssl_certificates>

      <networks>

      <ip>::/0</ip>

      </networks>

      ...

      <grants>

      <query>GRANT kcs_reader_role</query>

      </grants>

      </kcsuser-read>

      ...

      <roles>

      <kcs_reader_role>

      <grants>

      <query>GRANT SELECT ON kcs.*</query>

      </grants>

      </kcs_reader_role>

      <kcs_writer_role>

      <grants>

      <query>GRANT CREATE TABLE, INSERT, ALTER, UPDATE ON kcs.*</query>

      <query>GRANT SELECT (source_ip, source_port, source_alias, dest_ip, dest_port, dest_alias, protocol, severity, action, event_time, count, type) ON kcs.node_agent_events</query>

      </grants>

      </kcs_writer_role>

      ...

      </roles>

      ...

      </clickhouse>

  2. 指定用于短期和长期数据存储的磁盘。与 ClickHouse 配合使用时,卡巴斯基容器安全可以存储具备不同保留期的大量数据。默认情况下,事件的主要部分最多存储 30 分钟,而事故相关信息最多存储 90 天。由于事件记录需要大量资源来确保较高的记录速度和足够的磁盘空间,因此推荐使用不同的磁盘来分别进行短期和长期数据存储。

    配置数据存储设置的示例

    <clickhouse>

    ...

    <storage_configuration>

    <disks>

    <kcs_disk_hot>

    <path>/etc/clickhouse/hot/</path>

    </kcs_disk_hot>

    <kcs_disk_cold>

    <path>/etc/clickhouse/cold/</path>

    </kcs_disk_cold>

    </disks>

    <policies>

    <kcs_default>

    <volumes>

    <default>

    <disk>kcs_disk_hot</disk>

    </default>

    <cold>

    <disk>kcs_disk_cold</disk>

    </cold>

    </volumes>

    </kcs_default>

    </policies>

    </storage_configuration>

    ...

    </clickhouse>

页首
[Topic 298742]

配置外部 ClickHouse DBMS 设置

要配置卡巴斯基容器安全设置以使用外部 ClickHouse DBMS:

  1. 在 values.yaml 配置文件中,指定该解决方案使用外部 ClickHouse DBMS:

    default:

    kcs-clickhouse:

    external: true

  2. 指定使用外部 ClickHouse DBMS 所需的变量:

    configmap:

    infraconfig:

    type: fromEnvs

    envs:

    ...<使用外部 ClickHouse DBMS 所需的变量>

    在本部分中,您必须指定以下变量:

    • EXT_CLICKHOUSE_PROTOCOL 是用于连接外部 ClickHouse DBMS 的协议。
    • EXT_CLICKHOUSE_HOST 是用于连接外部 ClickHouse DBMS 的主机。
    • EXT_CLICKHOUSE_PORT 是用于连接外部 ClickHouse DBMS 的端口。
    • EXT_CLICKHOUSE_DB_NAME 是准备与卡巴斯基容器安全配合使用的数据库的名称。
    • EXT_CLICKHOUSE_COLD_STORAGE_NAME 是磁盘的名称,ClickHouse 将在该磁盘上长期存储事故相关数据。
    • EXT_CLICKHOUSE_STORAGE_POLICY_NAME 是数据存储策略的名称,ClickHouse 将根据该策略将事故相关数据传输到磁盘进行长期存储。

      如果您使用同一个磁盘进行短期和长期数据存储,则无需指定 EXT_CLICKHOUSE_COLD_STORAGE_NAMEEXT_CLICKHOUSE_STORAGE_POLICY_NAME 的值。

    • EXT_CLICKHOUSE_SSL_AUTH 是 ClickHouse 用户进行 SSL 授权所需的变量。如果指定值为“true”,则使用客户端证书无需密码即可进行授权。

      如果 TLS_INTERNAL 为“false”,则 EXT_CLICKHOUSE_SSL_AUTH 也必须为“false”。

    • EXT_CLICKHOUSE_ROOT_CA_PATH 是 CA 证书的路径,如果使用 https 协议连接 ClickHouse (EXT_CLICKHOUSE_PROTOCOL: https),则需要指定该路径。您可以通过下列其中一种方式指定路径:
      • 将 ClickHouse CA 证书放置在路径所指定的目录中。在这种情况下,您必须取消 secret.cert-kcs-clickhouse-ca 块的注释。
      • 使用 Vault 以存储证书数据。在这种情况下,您必须取消 vault.certificate 部分中 cert-kcs-clickhouse-ca 块的注释。
  3. 指定使用外部 ClickHouse DBMS 所需的 secret 值:

    configmap:

    secret:

    infracreds:

    type: fromEnvs

    envs:

    ...<使用外部 ClickHouse DBMS 所需的 secret>

    在本部分中,您必须指定以下变量:

    • EXT_CLICKHOUSE_WRITE_USER 是为与卡巴斯基容器安全配合使用而创建的具有写入权限的用户的名称。
    • CLICKHOUSE_WRITE_PASSWORD 是为与卡巴斯基容器安全配合使用而创建的具有写入权限的用户的密码。
    • EXT_CLICKHOUSE_READ_USER 是为与卡巴斯基容器安全配合使用而准备的具有读取权限的用户的名称。
    • CLICKHOUSE_READ_PASSWORD 是为与卡巴斯基容器安全配合使用而创建的具有读取权限的用户的密码。

      如果 EXT_CLICKHOUSE_SSL_AUTH 设置为“true”,则不使用 CLICKHOUSE_READ_PASSWORDCLICKHOUSE_WRITE_PASSWORD

    还可以使用 Vault secret 存储来指定用户名和密码。

    配置外部 ClickHouse DBMS 设置的示例

    kcs-clickhouse:

    external: true

    persistent: true

    ...

    configmap:

    infraconfig:

    type: fromEnvs

    envs:

    ...

    EXT_CLICKHOUSE_PROTOCOL: https

    EXT_CLICKHOUSE_HOST: clickhouse.ns.svc.cluster.local

    EXT_CLICKHOUSE_PORT: 8443

    EXT_CLICKHOUSE_DB_NAME: kcs

    EXT_CLICKHOUSE_COLD_STORAGE_NAME: cold

    EXT_CLICKHOUSE_STORAGE_POLICY_NAME: kcs_default

    EXT_CLICKHOUSE_SSL_AUTH: false

    EXT_CLICKHOUSE_ROOT_CA_PATH: /etc/ssl/certs/kcs-clickhouse-ca.crt

    ...

    secret:

    ...

    infracreds:

    type: fromEnvs

    envs:

    ...

    EXT_CLICKHOUSE_WRITE_USER: kcsuser-write

    EXT_CLICKHOUSE_READ_USER: kcsuser-read

    CLICKHOUSE_WRITE_PASSWORD: **************

    CLICKHOUSE_READ_PASSWORD: ***********

    ...

    使用 Vault 时:

    vault:

    ...

    secret:

    type: managedByVault

    ...

    EXT_CLICKHOUSE_WRITE_USER: kv/secret/kcs/clickhouse@EXT_CLICKHOUSE_WRITE_USER

    EXT_CLICKHOUSE_READ_USER: kv/secret/kcs/clickhouse@EXT_CLICKHOUSE_READ_USER

    CLICKHOUSE_WRITE_PASSWORD: kv/secret/kcs/clickhouse@CLICKHOUSE_WRITE_PASSWORD

    CLICKHOUSE_READ_PASSWORD: kv/secret/kcs/clickhouse@CLICKHOUSE_READ_PASSWORD

    ...

页首
[Topic 298743]

配置 MinIO 外部存储设置

要配置卡巴斯基容器安全设置以使用外部兼容 S3 的 MinIO 文件存储:

  1. 在 values.yaml 配置文件中,指定该解决方案使用外部 MinIO 文件存储:

    default:

    kcs-s3:

    external: true

  2. 指定使用 MinIO 所需的变量值:

    configmap:

    infraconfig:

    type: fromEnvs

    envs:

    ... 使用外部 MinIO 文件存储所需的变量 >

    在本部分中,您必须指定以下变量:

    • MINIO_HOST 是连接 MinIO 的主机。
    • MINIO_PORT 是连接 MinIO 的端口。
    • MINIO_BUCKET_NAME 是 MinIO 中为卡巴斯基容器安全数据分配的存储容器的名称。
    • MINIO_SSL 是用于与 MinIO 建立 ssl 连接所需的变量(包括使用 https 协议)。

      如果 TLS_INTERNAL 为“false”,则 MINIO_SSL 必须也为“false”。

    • MINIO_ROOT_CA_PATH 是 CA 证书的路径,如果使用 https 协议连接 MinIO (MINIO_SSL: true),则需要指定该路径。您可以通过下列其中一种方式指定路径:
      • 将 MinIO CA 证书放置在路径所指定的目录中。在这种情况下,您必须取消 secret.cert-minio-ca 块的注释。
      • 使用 Vault 以存储证书数据。在这种情况下,您必须取消 vault.certificate 部分中 cert-minio-ca 块的注释。
  3. 指定使用外部 MinIO 文件存储所需的 secret 值:

    configmap:

    secret:

    infracreds:

    type: fromEnvs

    envs:

    ...<使用外部 MinIO 文件存储所需的 secret>

    在本部分中,您必须指定以下变量:

    • MINIO_ROOT_USER 是为卡巴斯基容器安全指定的 MinIO 用户的名称。
    • MINIO_ROOT_PASSWORD 是为卡巴斯基容器安全指定的 MinIO 用户的密码。

    还可以使用 Vault secret 存储服务来指定用户名和密码。

    配置外部 MinIO 文件存储设置的示例

    kcs-s3:

    enabled: true

    external: true

    ...

    configmap:

    infraconfig:

    type: fromEnvs

    envs:

    ...

    MINIO_HOST: kcs-s3

    MINIO_PORT: 9000

    MINIO_BUCKET_NAME: reports

    MINIO_SSL: true

    MINIO_ROOT_CA_PATH: /etc/ssl/certs/minio-ca.crt

    ...

    secret:

    ...

    infracreds:

    type: fromEnvs

    envs:

    ...

    MINIO_ROOT_USER: kcs_user

    MINIO_ROOT_PASSWORD: ********

    ...

    使用 Vault 时:

    vault:

    ...

    secret:

    type: managedByVault

    ...

    MINIO_ROOT_USER: kv/test/minio@MINIO_ROOT_USER

    MINIO_ROOT_PASSWORD: kv/test/minio@MINIO_ROOT_PASSWORD

页首
[Topic 298749]