Kaspersky Container Security

Conexión con recursos externos de almacenamiento de datos

Además de los componentes de Kaspersky Container Security incluidos en el kit de distribución, la solución también puede trabajar con los siguientes recursos externos de almacenamiento de datos:

  • Base de datos de PostgreSQL
  • DBMS ClickHouse
  • Almacenamiento de archivos MinIO compatible con S3

La conexión con recursos de almacenamiento de datos externos se configura mediante el archivo de configuración values.yaml.

En esta sección

Crear un usuario para una base de datos externa de PostgreSQL

Usar ClickHouse, el DBMS externo

Configuración del almacenamiento externo MinIO

Inicio de página
[Topic 298985]

Crear un usuario para una base de datos externa de PostgreSQL

En Kaspersky Container Security, puede usar las bases de datos de PostgreSQL incluidas en la solución con su propia base de datos de PostgreSQL. Para instalar una base de datos de PostgreSQL externa que no funcione en un esquema con Kaspersky Container Security, debe crear otro usuario. Para ello, puede instalar el paquete de Helm Chart con los parámetros del esquema especificados para la base de datos de PostgreSQL externa.

Para crear un usuario con un esquema personalizado para una base de datos de PostgreSQL externa:

  1. Ejecute el siguiente comando para crear un espacio de nombres independiente para la base de datos de PostgreSQL externa:

    kubectl create ns kcspg

    donde kcspg es el espacio de nombres de la base de datos de PostgreSQL externa.

  2. Para desplegar una base de datos de PostgreSQL externa:
    1. Especifique en el archivo de configuración pg.yaml los parámetros para desplegar la base de datos de PostgreSQL externa.

      Parámetros para desplegar la base de datos de PostgreSQL externa

      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

      Los parámetros especifican la contraseña de la base de datos. Luego, debe especificar esta contraseña en la sección infraconfig del archivo de configuración values.yaml, que forma parte del paquete de Helm Chart incluido en el kit de distribución de la solución.

    2. Ejecute el siguiente comando:

      kubectl apply -f pg.yaml -n kcspg

    El nombre de la base de datos está compuesto de la siguiente manera:

    <nombre_del_pod>.<espacio_de_nombres>.<servicio>.cluster.local

    Por ejemplo: postgres.kcspg.svc.cluster.local.

  3. Para desplegar un objeto Service en un clúster:
    1. Especifique los parámetros del despliegue de un objeto Service en el archivo de configuración svc.yaml.

      Parámetros para desplegar un objeto Service en un clúster

      apiVersion: v1

      kind: Service

      metadata:

      name: postgres

      spec:

      type: ClusterIP

      selector:

      component: postgres

      ports:

      - port: 5432

      targetPort: 5432

    2. Ejecute el siguiente comando:

      kubectl apply -f svc.yaml -n kcspg

  4. Para crear un usuario, un esquema y una relación usuario-esquema:
    1. Inicie sesión en el pod con el elemento postgres expandido del paso 2b.
    2. Inicie la terminal interactiva psql:

      psql -h localhost -U postgres -d api

    3. Ejecute los siguientes comandos:

      CREATE ROLE kks LOGIN PASSWORD 'kks' NOINHERIT CREATEDB;

      CREATE SCHEMA kks AUTHORIZATION kks;

      GRANT USAGE ON SCHEMA kks TO PUBLIC;

  5. En el archivo de configuración values.yaml, especifique los parámetros necesarios para usar una base de datos de PostgreSQL externa.

    Parámetros en el archivo 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

    Los valores de los parámetros especificados en el archivo values.yaml deben coincidir con los valores de los parámetros correspondientes en los archivos de configuración pg.yaml y svc.yaml.

  6. Actualice la solución.

    Ejemplo de los comandos usados para crear un usuario para una base de datos de PostgreSQL externa

    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 .

Inicio de página
[Topic 292954]

Usar ClickHouse, el DBMS externo

Además del DBMS ClickHouse (componente de Kaspersky Container Security incluido en el kit de distribución), la solución también puede funcionar con los recursos del DBMS externo ClickHouse. Para ello, debe realizar las siguientes acciones:

Kaspersky Container Security funciona con ClickHouse 22.6 o posterior.

Inicio de página
[Topic 298717]

Crear una base de datos para Kaspersky Container Security

Para crear una base de datos para Kaspersky Container Security, realice lo siguiente:

En ClickHouse, en la estación de trabajo, ejecute el siguiente comando:

CREATE DATABASE IF NOT EXISTS kcs

donde kcs es el nombre de la base de datos para Kaspersky Container Security.

Para configurar la base de datos creada para Kaspersky Container Security:

  1. Añada usuarios y defina el método de autorización. Para ello, debe realizar las siguientes acciones:
    1. Añada los siguientes usuarios:
      • un usuario con derechos para leer los datos que recibe el núcleo de Kaspersky Container Security (lectura)

        <roles>

        <kcs_reader_role>

        <grants>

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

        </grants>

        </kcs_reader_role>

      • un usuario con derechos para escribir datos a partir de solicitudes de agentes externos (escritura)

        <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. Especifique el método para autorizar usuarios: con una contraseña o mediante un certificado.

      Ejemplo de configuración de usuarios con autenticación mediante contraseña

      <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>

      Ejemplo de configuración de usuarios con autenticación mediante certificados

      <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. Especifique los discos para el almacenamiento de datos a corto y largo plazo. Al trabajar con ClickHouse, Kaspersky Container Security puede almacenar grandes cantidades de datos con diversos períodos de retención. De forma predeterminada, la mayoría de los eventos se almacenan durante 30 minutos como máximo, mientras que la información sobre incidentes se almacena durante 90 días como máximo. Dado que la grabación de eventos requiere una cantidad considerable de recursos, para garantizar una velocidad de grabación alta y suficiente espacio en disco, se recomienda usar diferentes discos para el almacenamiento de datos a corto y largo plazo.

    Ejemplo de la configuración del almacenamiento de datos

    <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>

Inicio de página

[Topic 298742]

Configuración del DBMS externo ClickHouse

Para configurar el uso del DBMS externo ClickHouse en Kaspersky Container Security:

  1. En el archivo de configuración values.yaml, especifique que la solución usará el DBMS externo ClickHouse:

    default:

    kcs-clickhouse:

    external: true

  2. Especifique las variables para usar el DBMS externo ClickHouse:

    configmap:

    infraconfig:

    type: fromEnvs

    envs:

    ...<variables para usar el DBMS externo ClickHouse>

    En esta sección, debe especificar las siguientes variables:

    • EXT_CLICKHOUSE_PROTOCOL: protocolo para conectarse con el DBMS externo ClickHouse
    • EXT_CLICKHOUSE_HOST: host de la conexión con el DBMS externo ClickHouse externo
    • EXT_CLICKHOUSE_PORT: puerto para conectarse con el DBMS externo ClickHouse
    • EXT_CLICKHOUSE_DB_NAME: nombre de la base de datos preparada para usarse con Kaspersky Container Security
    • EXT_CLICKHOUSE_COLD_STORAGE_NAME: nombre del disco donde ClickHouse almacenará a largo plazo datos sobre incidentes
    • EXT_CLICKHOUSE_STORAGE_POLICY_NAME: nombre de la directiva de almacenamiento de datos según la que ClickHouse transferirá al disco los datos sobre incidentes para su almacenamiento a largo plazo

      Si usa el mismo disco para el almacenamiento de datos a corto y a largo plazo, no deberá especificar los valores de EXT_CLICKHOUSE_COLD_STORAGE_NAME ni de EXT_CLICKHOUSE_STORAGE_POLICY_NAME.

    • EXT_CLICKHOUSE_SSL_AUTH: variable de la autenticación SSL para los usuarios de ClickHouse Si se especifica el valor true, la autenticación se realiza sin contraseñas, pero mediante certificados de clientes.

      Si TLS_INTERNAL tiene el valor false, EXT_CLICKHOUSE_SSL_AUTH también debe tener el valor false.

    • EXT_CLICKHOUSE_ROOT_CA_PATH: ruta al certificado de CA, que se especifica si se usa el protocolo https para conectarse a ClickHouse (EXT_CLICKHOUSE_PROTOCOL: https). Puede especificar la ruta de las siguientes maneras:
      • Coloque el certificado de CA de ClickHouse en el directorio que determina la ruta. En ese caso, debe quitar las marcas de comentarios del bloque the secret.cert-kcs-clickhouse-ca.
      • Use Vault para almacenar los datos del certificado. En este caso, debe quitar las marcar de comentarios del bloque cert-kcs-clickhouse-ca en la sección vault.certificate.
  3. Especifique los valores de los secretos para usar el DBMS externo ClickHouse:

    configmap:

    secret:

    infracreds:

    type: fromEnvs

    envs:

    ...<secretos para usar el DBMS externo ClickHouse>

    En esta sección, debe especificar lo siguiente:

    • EXT_CLICKHOUSE_WRITE_USER: nombre de un usuario con permisos de escritura, que se creó para usarse con Kaspersky Container Security
    • CLICKHOUSE_WRITE_PASSWORD: contraseña de un usuario con permisos de escritura, que se creó para usarse con Kaspersky Container Security
    • EXT_CLICKHOUSE_READ_USER: nombre de un usuario con permisos de lectura, que se preparó para usarse con Kaspersky Container Security
    • CLICKHOUSE_READ_PASSWORD: contraseña de un usuario con permisos de lectura, que se creó para usarse con Kaspersky Container Security

      Las variables CLICKHOUSE_READ_PASSWORD y CLICKHOUSE_WRITE_PASSWORD no se usan si el valor de EXT_CLICKHOUSE_SSL_AUTH es true.

    Los nombres de usuario y contraseñas también pueden especificarse al usar el almacenamiento de secretos Vault.

    Ejemplo de la configuración del DBMS externo ClickHouse

    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: ***********

    ...

    Al usar 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

    ...

Inicio de página
[Topic 298743]

Configuración del almacenamiento externo MinIO

Para configurar el uso del almacenamiento de archivos externo MinIO compatible con S3 en Kaspersky Container Security:

  1. En el archivo de configuración values.yaml, especifique que la solución usa el almacenamiento de archivos externo MinIO:

    default:

    kcs-s3:

    external: true

  2. Especifique los valores de las variables para usar MinIO:

    configmap:

    infraconfig:

    type: fromEnvs

    envs:

    ... <variables para usar el almacenamiento de archivos externo MinIO>

    En esta sección, debe especificar las siguientes variables:

    • MINIO_HOST: host que se conectará con MinIO
    • MINIO_PORT: puerto de la conexión con MinIO
    • MINIO_BUCKET_NAME: nombre de la sección en MinIO asignada para los datos de Kaspersky Container Security
    • MINIO_SSL: variable de la conexión SSL con MinIO (incluye el uso del protocolo https)

      Si TLS_INTERNAL tiene el valor false, MINIO_SSL también debe tener el valor false.

    • MINIO_ROOT_CA_PATH: ruta al certificado de CA, que se especifica si se usa el protocolo https para conectarse con MinIO (MINIO_SSL: true). Puede especificar la ruta de las siguientes maneras:
      • Coloque el certificado de CA de MinIO en el directorio que determina la ruta. En ese caso, debe quitar las marcas de comentarios del bloque secret.cert-minio-ca.
      • Use Vault para almacenar los datos del certificado. En este caso, debe quitar las marcar de comentarios del bloque cert-minio-ca en la sección vault.certificate.
  3. Especifique los valores de los secretos para usar el almacenamiento de archivos externo MinIO:

    configmap:

    secret:

    infracreds:

    type: fromEnvs

    envs:

    ...<secretos para usar el almacenamiento de archivos externo MinIO>

    En esta sección, debe especificar lo siguiente:

    • MINIO_ROOT_USER: nombre del usuario de MinIO especificado para Kaspersky Container Security
    • MINIO_ROOT_PASSWORD: contraseña del usuario de MinIO especificado para Kaspersky Container Security

    Los nombres de usuario y contraseñas también pueden especificarse al usar el almacenamiento de secretos Vault.

    Ejemplo de la configuración del almacenamiento de archivos externo 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: ********

    ...

    Al usar Vault:

    vault:

    ...

    secret:

    type: managedByVault

    ...

    MINIO_ROOT_USER: kv/test/minio@MINIO_ROOT_USER

    MINIO_ROOT_PASSWORD: kv/test/minio@MINIO_ROOT_PASSWORD

Inicio de página
[Topic 298749]