【TiDB 4.0 PCTA 学习笔记】- 3.8.3 Cloud Security(云安全) @2班+李响

课程名称:3.8.3 Cloud Security(云安全)

学习时长:

60分钟

课程收获:

在 K8s 和 Cloud 环境下如何配置保证 TiDB 数据库集群的安全

课程内容:

一、Managing TiDB TLS certificate

  1. Recap of TiDB TLS
  • mTLS为TiDB各组件进行加密,通信双方都需要提供证书认证身份
  • TLS用于MySQL客户端通信加密(SQL层),不需要客户端必须通过证书认证,也可以通过用户名密码进行身份认证
  • TLS证书一般是由通信双方都信任的第三方认证生成
  1. Kubernetes Secret
    用于保存敏感资源是secret资源类型,以base64形式编码的,通过yaml文件进行创建,比明文相对安全
  • Security pratices
    • secret文件不要加载的源码管理中(否则一旦泄露与明文无区别)
      因base64不是一个安全加密方式
    • 使用静态加密配置K8s集群
      保证secret文件是被加密
    • 使用RBAC限制用户对secret的访问
      避免未经授权的用户或程序访问
    • 例子
      image
  • How to use Secret
    • 通过命令创建(防止yaml文件加载到源码管理中)
      kubectl create secret generic mysecret --from-literal=user=admin --from-literal=password=1f2d12ninf12
    • 挂载到POD容器里面一个文件
    • 也可在env中直接引用
    • 例子
  • Cert Manager
    是K8s实际证书管理工具
    • 支持多种CA机构颁发的证书
    • 支持自动续期功能,防止证书过期
    • 使用简单直观
    • cert资源类型
      对应CA机构的Issuer
      描述证书样子的Certificate
      对应签证书中CSR的CertificateRequest(自动生成用户无需关心)
    • 部署命令
      helm install cert-manager jetstack/cert-manager --namespace cert-manager --version v0.16.0 --set installCRDs=true
  • Managing TiDB TLS with Cert Manager
    • 创建一个CA根证书(因域名不可达所以需要创建自签名证书)
      通过Cert Manager创建,存储在demo secret中,此证书需要严格的权限控制保证安全
    • 创建一个Issuer
      通过根证书对其他证书颁发签名

    • 命名方式限制
      server secret:${cluster_name}-${componet_name}-cluster-secret
      client secret:${cluster_name}-client-secret
    • 因PD只能支持校验一个CommonName(CN),所以只能使用一个值
    • Server端创建的长连接更新证书无影响,只能重建连接更新证书

二、Public Cloud security pratice for TiDB

  1. Cloud IAM
    IAM的基本功为能认证和授权
  • TiDB可以结合使用云上资源
    • 备份直接使用S3和GCS
    • TiKV通过AWS KMS加密数据
  • TiDB也可以直接调用API访问云上资源
  • 示例
    $ aws s3 ls
  1. Cloud Authn & Authz
  • 配置授权TiDB访问AWS资源的两个选项
    • 创建IAM用户并将AWS证书存储在K8s Secret中
    • 创建IAM角色并将该角色分配给TIDB pod
  • AWS和K8s拥有两套独立的权限管理系统
  • 分配Role指定权限,减少泄露风险
  • 通过OIDC实现两套权限管理系统整合
  1. Managing IAM credentials for TiDB
  • 为每个需要与公有云API交互的进程授权IAM角色
  • 通过OIDC,让EKS apiserver直接给POD分配AWS Role及临时的token
    避免静态的token泄露,或需要将静态的token分发到每个节点上的风险
  • 如何实现此功能(非公有云环境)
    • 开启EKS的OIDC
      eksctl utils associate-iam-oidc-provider --cluster {cluster_name} --approve
    • 为备份创建IAM role
    • 将读写S3的权限授权到role
    • 配置role允许被OIDC使用
    • 给K8s service account关联role
    • 给备份任务创建K8s service account
    • 创建备份任务’Backup’CR
    • 配置参数sendCredToTiKV:false
      否则执行备份是会将任务分发到每个TiKV节点导致失败
  • S3 security configuration(公有云环境使用)

同学你好,感谢参与 TiDB 4.0 课程的学习!

本篇笔记逻辑清晰、内容丰富,被评选为优质笔记,将额外获得 20 积分,并在 「TiDB 培训」分类下获得“置顶”权益,积分兑换规则将于近期开放,敬请关注!

期待您继续产出优质内容!