课程名称:3.8.3 云安全
学习时长:30min
课程收获:在 K8s 和 Cloud 环境下保证 TiDB 数据库集群的安全
课程内容:
-
TiDB TLS认证管理
-
TiDB TLS回顾
- 内部组件通信使用mTLS
- SQL连接通信使用MySQL TLS
-
k8s的secret对象
-
k8s用secret保存敏感数据
-
安全实践
- 不要在source repository中保存Secret的yaml文件
- 使用Secret encryption at rest配置k8s集群
- 限制用户基于RBAC访问Secret
- 在API层,以base64编码形式展示,当存储在etcd中时,可以由kube apiserver加密,在节点上存储在tmpfs中
-
如何使用k8s secret
-
以文件形式挂载到pod中
-
env中引用
-
-
k8s证书管理器Cert Manager
-
k8s证书管理工具
-
支持使用多种CA证书
-
自动更新
-
易用
-
通过CRD方式暴露API,即operator模式
- Issuer 对应CA机构
- Certificate 对应描述证书
- CertificateRequest 对应CSR
-
部署
-
-
使用Cert Manager管理TiDB TLS认证
-
三步
- 1、创建自签名Issuer
- 2、创建自签名CA
- 3、使用CA证书创建Issuer
-
为每个组件创建证书
-
创建客户端证书
-
配置集群的spec.tlsCluster.enabled为 true
-
secret命名
- server secret:${cluster_name}-${component_name}-cluster-secret
- client secret:${cluster_name}-cluster-client-secret
-
CN验证:目前只支持一个CN(PD/TiDB/TiKV都要访问PD,所以前面使用tidb作为CN)
-
支持在线自动续签
-
-
TiDB在公有云环境线的安全实践
-
Cloud IAM(Identity Access Management)
-
TiDB是云原生数据库
- 支持直接备份到S3&GCS
- 可使用AWS KMS加密TiKV数据
-
要访问像S3和KMS这类的云资源,需要凭证
- aws s3 ls
-
在备份时,TiKV可直接写入S3
- 分布式环境下如何分发凭证?
- 分布式环境下如何更新?
-
-
Cloud Authn(认证) & Authz(授权)
-
使用OIDC,AWS委派权限给k8s apiserver,从而实现两套权限系统整合
-
k8s通过ServiceAccount将AWS Role分配给Pod,使pod具有访问aws资源的权限
-
回答前面的问题
-
分布式环境下如何分发凭证?
- 对每个需要和cloud API交互的进程使用IAM role
- 借助OIDC,允许EKS apiserver分配aws role和临时token给pod
-
-
打开EKS的OIDC
- eksctl utils asociate-iam-oidc-provider --cluster {cluster_nme} --approve
-
以TiDB备份到AWS S3为例
- 创建备份用的IAM role
- 使k8s的service account获取role
- 创建备份用的k8s service account
- 使用
Backup
类型的CR来创建备份任务
-
S3安全配置
- 需要将S3的bucket配置成private
- 打开S3 bucket静态加密
-