与 HashiCorp Vault 集成
卡巴斯基容器安全提供使用外部存储服务 HashiCorp Vault 安全地传输密码、令牌和 Secret 的功能。解决方案可生成 Pod 注释,Vault 注入器在启动时使用这些注释从存储中挂载必要的 Secret。
卡巴斯基容器安全支持与 Hashicorp Vault 1.7 或更高版本的集成。
版本 2.0 的卡巴斯基容器安全仅在使用侧边栏容器的侧边栏模式中支持使用 HashiCorp Vault;在此情况下,仅支持 Kubernetes 身份验证方法。
如果未定义 Pod 的服务账户,且使用默认服务账户,根据关键安全要求,我们不建议分配存储专用角色给此类服务账户。
HashiCorp Vault 设置的值在 values.yaml 配置文件中指定,在启动 Helm Chart 包时部署。
HashiCorp Vault 设置在 values.yaml 配置文件中配置如下:
- 如果
vault
块中的enabled
设置被设为false
,则不使用与保管库的集成。 - 如果将
vault
库块中的enabled
设置被设为true
,则启用与保管库的集成,并且vault
设置块中的变量值优先。
vault
设置块包含以下部分:
secret
— 用于指定 Secret 和凭据。certificate
— 用于指定证书和证书密钥。
secret
部分列出了包含以下参数的机密的文件的路径:
- 用于对外部信息环境进行请求的代理服务器的 Secret。
- PostgreSQL 数据库的凭据。
- 用于存储解决方案生成的文件的 S3 兼容文件存储的凭据。
- ClickHouse 数据库管理系统的凭据。
Secret 以 key:value
格式指定
其中:
<key>
是环境变量的名称<value>
是机密存储中 Secret 的完整路径,后跟 @ 符号和在存储中创建的 Secret 的密钥的名称。
例如:POSTGRES_USER: kv/secret/kcs/psql@POSTGRES_USER
要获取证书,您必须在 vault.certificate
部分的字段中指定以下内容:
- 要获取 CA 证书,请将
ca
设置设为true。
在此情况下,访问证书的路径是根据公钥基础设施(公钥基础设施,PKI)中的名称为基础的标准cert/ca
路径形成的。如果 CA 证书不是根证书,请使用caList
参数列出所有证书,包括根证书。例如:cert-ca:
ca: true
tls.crt: pki_kcs/cert/ca
caList:
- pki/cert/ca
- 要生成证书和密钥,您需要从 PKI 名称中指包含定标准
issue
路径和创建的角色名称的路径。通用名称 (cn
) 和所有可能的备用名称 (altname
) 会被自动添加到证书中。如果有必要,可以手动指定cn
、altname
和ipsans
值,如下所示:cert-pguser:
cn: pguser
altname: pguser,pguser.psql,pguser.psql.svc,pguser.psql.svc.cluster.local,localhost
ipsans: 0.0.0.0,127.0.0.1
- 要设置证书有效期,需要指定
ttl
参数的值。默认值为 8760 小时。该参数值不能大于 PKI HashiCorp Vault 中设置的值。
certificate
部分还包含具有以下证书和密钥的文件的路径:
- 外部 PostgreSQL 数据库的 CA 证书和客户端证书。
- 解决方案组件所需的证书:
- 准入控制器的 CA 证书和 CA 证书密钥。
- 卡巴斯基容器安全许可模块的证书和证书密钥。
- 包含解决方案主要业务逻辑的模块的证书和证书密钥。
- 远程过程调用平台(GRPC)的证书和证书密钥。
- 扫描器服务器的证书和证书密钥。
- 扫描器服务器 API 的证书和证书密钥。
- 企业私有网络更新文件服务器的证书和证书密钥。
- 与 S3 兼容的文件存储的证书和证书密钥。
- 事件中介的证书和证书密钥。
- 代理中介的证书和证书密钥。
- ClickHouse 数据库管理系统的证书和证书密钥。
HashiCorp Vault 存储设置:
为了使卡巴斯基容器安全与 HashiCorp Vault 配合使用,您必须在 values.yaml 配置文件中指定以下配置设置的值:
enabled
标志可启用与存储的集成。vault.enabled = true
值表示与 HashiCorp Vault 的集成已建立;环境变量的值从存储中获取。默认值为false
。mountPath
— 将 Secret 从保管库挂载到 Pod 的路径。默认值为/vault/secrets
。role
是在存储中用于身份验证的角色。在保管库中创建角色时,您需要从 values.yaml 文件中的 serviceAccount 部分指定所有现有值。
agentInitFirst
— 用于定义初始化容器的初始化队列的变量。值为true
表示 Pod 首先初始化 Vault init 容器。当初始化中的其他容器需要预填充的 Secret 才能运行时,必须设置此值。如果它被设置为false
,则容器的初始化顺序随机。默认值为true
。agentPrePopulate
— 用于在容器启动之前启用初始化容器并使用 Secret 预先填充共享内存的变量。默认值为true
。agentPrePopulateOnly
— 指示 init 容器是否将是被注入 Pod 中的唯一容器的变量。如果设置为true
,则运行 Pod 时不会添加 边车容器。默认值为false
。preserveSecretCase
— 创建秘密文件时,用于保留 Secret 名称的大小写的变量。默认值为true
。agentInjectPerms
— 定义使用存储中的 Secret 访问已挂载文件的权限的变量。默认值为0440
(所有者和组具有读取权限)。annotations
— 配置正确操作边车容器的指令。您可以向vault
块添加指令,以供所有 Helm Chart 组件使用,或者在Architecture
部分为每个组件单独指定它们,例如:kcs-middleware:
enabled: true
appType: deployment
annotations:
vault.hashicorp.com/agent-limits-cpu: 200m
与存储相关的限制
当卡巴斯基容器安全与 HashiCorp Vault 配合使用时,存在一些非关键限制:
- 与 HashiCorp Vault 的集成仅适用于 KV1/KV2 存储和用于轮换 PKI 证书的 Secrets Engine 组件。
- 该解决方案不支持与 Secrets Engine 的外部组件(PKI Secrets 除外)一起使用。
- 卡巴斯基容器安全不支持动态处理 Secret。要获取更新的 Secret,您必须重新启动解决方案。
- 如果您正在使用 Vault 集成,则只能在
vault
部分为外部 PostgreSQL 数据库指定凭证。要使用内部 PostgreSQL 数据库,必须注释掉这些凭证。