在 Kubernetes 中使用 HashiCorp Vault 实现敏感数据管理与密钥加密

 

在 Kubernetes 中使用 HashiCorp Vault 实现敏感数据管理与密钥加密

前言

在现代应用中,密钥管理 和 敏感数据保护 是至关重要的,特别是在容器化和微服务架构中。为了确保数据的安全性和合规性,开发人员和运维人员需要一种高效、可靠的方式来存储和管理敏感信息。HashiCorp Vault 是一个强大的工具,专门用于管理和保护访问密钥、API 密钥、密码等敏感数据。

在 Kubernetes 环境中部署 HashiCorp Vault,不仅能保护存储的数据,还能简化密钥管理过程,自动化访问控制和审计,确保系统的安全性。本文将详细介绍如何在 Kubernetes 中部署 Vault,并探索其核心功能和高级配置。


一、HashiCorp Vault 架构原理

Vault 的核心功能是通过 密钥存储动态凭证生成加密服务 和 访问控制 来保护敏感数据。其架构包括几个主要的组件:

1. Vault 核心组件

  • • 密钥存储引擎(Secrets Engines):用于存储和管理敏感数据,如文件系统、数据库凭证、API 密钥等。Vault 提供了多种存储引擎,如 KV 引擎(键值存储)、数据库引擎(生成数据库凭证)、AWS 引擎(生成 AWS 凭证)等。
  • • 认证后端(Auth Backends):Vault 支持多种认证方式,包括 LDAPKubernetesGitHubAWS IAM 等,确保只有授权用户或服务才能访问 Vault。
  • • 加密与解密功能(Transit Engine):Vault 提供加密和解密服务,可以在不存储密钥的情况下对数据进行加密处理。这对敏感数据的加密传输和存储非常有用。
  • • 审计日志(Audit Logs):Vault 可以生成详细的审计日志,记录对 Vault 所有操作的访问和修改,帮助管理员跟踪操作。

2. Vault 的存储与高可用性

Vault 使用 Storage Backend 来存储所有数据。默认情况下,Vault 使用 File Backend 存储数据,但它也支持 ConsulMySQLPostgreSQL 等多种后端存储方式。为提高高可用性,Vault 支持 高可用模式,通过 Raft Consensus Protocol 来保证数据一致性和容错能力。


二、在 Kubernetes 中部署 HashiCorp Vault

1. 安装 Helm 和 Vault Chart

首先,我们需要安装 Helm,这是 Kubernetes 的包管理工具,它可以帮助我们简化应用的安装过程。安装 Helm:


curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

然后添加 Vault 的 Helm 仓库并更新:


helm repo add hashicorp https://helm.releases.hashicorp.com
helm repo update

2. 部署 Vault

接下来,使用 Helm 部署 Vault。这里我们将部署 Vault 的 开发模式,适用于实验和开发环境。


kubectl create namespace vault
helm install vault hashicorp/vault --namespace vault --set "server.dev.enabled=true"

该命令会在 Kubernetes 中创建一个 Vault 实例,并启用开发模式。在开发模式下,Vault 使用内存存储,并且不需要初始化和 unseal(解封)。

3. 初始化 Vault

如果你使用的是生产模式,Vault 需要先初始化并解封(unseal)。初始化 Vault 会生成 root token 和 unseal keys


kubectl exec -it vault-0 -n vault -- vault operator init

获取初始化输出,保存 unseal keys 和 root token,后续用于解封和访问 Vault。

4. 解封 Vault

初始化后,Vault 会进入封锁状态(sealed)。要解封 Vault,你需要提供至少 3 个 unseal keys。


kubectl exec -it vault-0 -n vault -- vault operator unseal <unseal_key_1>
kubectl exec -it vault-0 -n vault -- vault operator unseal <unseal_key_2>
kubectl exec -it vault-0 -n vault -- vault operator unseal <unseal_key_3>

5. 验证 Vault 是否可用

你可以通过 Vault 的 UI 或 CLI 访问 Vault。Vault 默认的 UI 地址是 http://<vault_pod_ip>:8200

也可以通过 CLI 验证 Vault 状态:


kubectl exec -it vault-0 -n vault -- vault status

三、Vault 核心功能和配置

1. 存储引擎(Secrets Engines)

Vault 提供了多种存储引擎来管理敏感数据。最常用的存储引擎是 KV 引擎,适用于存储简单的键值对。

创建 KV 存储引擎

vault secrets enable -path=secret kv
存储数据

vault kv put secret/my-secret username="admin" password="secret_password"
读取数据

vault kv get secret/my-secret

2. 动态凭证

Vault 支持 动态凭证,即可以根据需要动态生成数据库、AWS、GCP 等的凭证。举个例子,Vault 可以为数据库动态生成临时的用户名和密码,而这些凭证具有过期时间,自动失效,从而提升安全性。

启用数据库引擎

vault secrets enable database
配置 MySQL 数据库引擎

vault write database/config/my-mysql-database
    plugin_name=mysql-database-plugin
    allowed_roles="readonly"
    connection_url="mysql://{{username}}:{{password}}@tcp(127.0.0.1:3306)/"
创建角色并生成动态凭证

vault write database/roles/readonly
    db_name=my-mysql-database
    creation_statements="GRANT SELECT ON *.* TO '{{name}}'@'%' IDENTIFIED BY '{{password}}'"
    default_ttl="1h"
    max_ttl="24h"

动态凭证可以用于访问数据库或其他系统,且不需要手动管理。

3. 加密与解密(Transit Engine)

Vault 提供 Transit Engine 来加密和解密数据,支持 对称加密 和 非对称加密

启用加密引擎

vault secrets enable transit
创建加密密钥

vault write -f transit/keys/my-encryption-key
加密数据

vault write transit/encrypt/my-encryption-key plaintext=$(echo -n "sensitive-data" | base64)
解密数据

vault write transit/decrypt/my-encryption-key ciphertext=<ciphertext>

4. 身份和访问管理(IAM)

Vault 提供了强大的身份认证和访问控制功能,通过 PolicyRoles 和 Access Control Lists (ACLs) 来管理用户对密钥和数据的访问。

创建访问策略

path "secret/data/*" {
  capabilities = ["create", "read", "update"]
}
启用 Kubernetes 认证

vault auth enable kubernetes

创建 Kubernetes 服务账户角色并允许访问 Vault:


vault write auth/kubernetes/config
    kubernetes_host=<k8s_api_url>
    kubernetes_ca_cert=@/path/to/ca.crt

四、Vault 高可用性配置与性能优化

1. 高可用性部署

Vault 的高可用性部署通常使用 Consul 作为存储后端,并通过 Raft 协议 实现主备节点之间的同步。

启用 Consul 后端

vault server -dev -config-file=config.hcl

在生产环境中,我们可以配置多个 Vault 节点,并通过 Raft 协议来保证一致性和容错。

2. 性能优化

  • • 存储引擎选择:根据 Vault 的负载选择合适的存储后端。Consul 和 Raft 后端在分布式环境中表现较好。
  • • 缓存配置:Vault 允许配置
  • 在 Kubernetes 中使用 HashiCorp Vault 实现敏感数据管理与密钥加密

 

在 Kubernetes 中使用 HashiCorp Vault 实现敏感数据管理与密钥加密

原文始发于微信公众号(背带裤的云原生):在 Kubernetes 中使用 HashiCorp Vault 实现敏感数据管理与密钥加密

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/309848.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!