部署企业私密信息管理平台Hashicorp vault集成kubernetes和AWS的密钥信息
一、需求
目前公司内部网站、项目比较多,运维的密钥管理主要都是靠个人保存,其中包含数据库密钥信息、申请的TLS证书、AWS密钥信息、各管理平台的密钥等,管理混乱,容易丢失,希望有一个平台能统一收集管理、签发、授权、审计。
二、HashiCorp Vault介绍
HashiCorp Vault作为集中化的私密信息管理工具,具有以下特点:
- 存储私密信息
不仅可以存放现有的私密信息,还可以动态生成用于管理第三方资源的私密信息。所有存放的数据都是加密的,任何动态生成的私密信息都有租期,并且到期会自动回收。 - 滚动更新秘钥
用户可以随时更新存放的私密信息。Vault提供了加密即服务(encryption-as-a-service)的功能,可以随时将密钥滚动到新的密钥版本,同时保留对使用过去密钥版本加密的值进行解密的能力。 对于动态生成的秘密,可配置的最大租赁寿命确保密钥滚动易于实施。 - 审计日志
保管库存储所有经过身份验证的客户端交互的详细审核日志:身份验证,令牌创建,私密信息访问,私密信息撤销等。 可以将审核日志发送到多个后端以确保冗余副本。
另外,HaishiCorp Vault提供了多种方式来管理私密信息。用户可以通过命令行、HTTP API等集成到应用中来获取私密信息。HashiCorp Vault也能与Ansible、Chef、Consul等DevOps工具链无缝结合使用。
三、环境介绍
kubernetes集群环境
四、部署HashiCorp Vault
- 创建命名空间
kubectl create namespace vault
- 添加helm repo
helm repo add hashicorp https://helm.releases.hashicorp.com
- 安装
helm install vault hashicorp/vault -n vault
- 初始化
kubectl exec -ti vault-0 -c vault -n vault -- vault operator init Unseal Key 1: O67V+PZGr3OyQd2IjQgH2+7pXZLuIJss5ko+MXb8LcSm Unseal Key 2: oEdjXv11XrgJqPMuOduda5ygIUdtvaCMoufKF3Fllh9i Unseal Key 3: /doVpsSdTCnjvfTQL+wfrOgVWI/cMaOR/D0YasL8fV/c Unseal Key 4: tp8VLTbnwD0p34dn0DBaHEKM/jmtJ0WU1Kp4WG9MvbCC Unseal Key 5: d6j1CR6jVWEoKShjZ6wT9S5ZFyHo2XldBjb+NzJJRVUd Initial Root Token: s.8AQ0XD8Yp5Q6IfdXtjsFPCSF
特别注意,这一步会输出5个Unseal Key和一个root token,Unseal Key在后面会用到,一定要记录下来,因为该值只会在初始化时出现。
- 进行解封,随便取3个,只要达到key threashold即可
kubectl exec -ti vault-0 -n vault -- vault operator unseal # ... Unseal Key 1 kubectl exec -ti vault-0 -n vault -- vault operator unseal # ... Unseal Key 2 kubectl exec -ti vault-0 -n vault -- vault operator unseal # ... Unseal Key 3
- 完成以上几步操作之后,查看pod是否正常运行
kubectl get pods -l app.kubernetes.io/name=vault -n vault
- 添加service及ingress
apiVersion: v1
kind: Service
metadata:
name: vault-portal
namespace: vault
spec:
ports:
- name: "8200"
port: 8200
protocol: TCP
targetPort: 8200
type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
name: dev.vault.arfront.cn
namespace: vault
spec:
rules:
- host: dev.vault.arfront.cn
http:
paths:
- backend:
serviceName: vault
servicePort: 8200
tls:
- hosts:
- dev.vault.arfront.cn
secretName: dev.vault.arfront.cn
- 验证
打开网站 dev.vault.arfront.cn,输入上面初始化得到的Initial Root Token: s.8AQ0XD8Yp5Q6IfdXtjsFPCSF,即部署完成。
五、集成管理kubernetes密钥
待补充
六、集成管理AWS密钥
待补充
七、Vault的使用
待补充