背景:
数据库根本为myql,数量不是很多,过来始终默认开启了防火墙模式通过公司固定IP,近程拜访操作mysql。疫情起因,一些小伙伴不喜爱近程通过公司的网络去连贯mysql,频繁增加防火墙操作。并且对数据库的操作及其不标准,没有拜访操作的日志,也没有各种审核。尽管每次操作数据库前会对数据库进行备份。然而这样的平安操作隐患还是很重大的。在此背景下发现还是须要一款mysql审计平台,规范化数据库的操作。长年混迹于github的我搜寻关键词 mysql 审计找到了 Yearning,当然了能够更不便的在gitee的仓库去看!
向下滑README.md找到官网or Install 装置及应用日志(貌似其实都跳转到官网了)
跳转到官网页面点击指南有二进制包 and docker kubernetes的装置形式,集体是习惯all in kubernetes就抉择kubernetes的装置形式了!
Kubernetes搭建Yearning
注:参照官网文档操作:https://next.yearning.io/guide/cloud.html。
前提:
mysql 版本必须为5.7及以上版本(8.0及以上请将sql_mode 设置为空)并已当时自行装置结束且创立 Yearning 库,字符集应为 UTF8mb4 (仅 Yearning 所需 mysql 版本)
咱的数据库间接用的腾讯云的cdb,创立了数据库,并实现了受权!
创立Namespace
创立一个独自的命名空间搭建yearning,当然了也能够在其余已有的命名空间搭建。齐全能够依据集体需要爱好
kubectl create ns yearning
创立Secret
注:这里手贱点开了,来自知乎的连贯,依照知乎的文档跑了一遍,顺便给大家加深一下印象
对应配置应用base64加密
echo -n 'addr' | base64 #数据库地址包含端口echo -n 'user' | base64 #数据库用户名echo -n 'pass' | base64 #数据库明码echo -n 'data' | base64 #yearning对应数据库名
创立secret.yaml并创立secret密钥
cat secret
apiVersion: v1kind: Secretmetadata: name: db-conf namespace: yearningtype: Opaque # 应用的是generic类型data: # 这里配置的是数据库的相干信息,应用base64加密输出: # echo -n 'xxxx' | base64 addr: xxxxxxxxxxxxxx= user: exxxxxx= pass: xxxxxxx== data: xxxxxx=
kubectl apply -f secret.yamlkubectl get secret -n yearning
创立 yearning Deployment
apiVersion: apps/v1 # API版泵kind: Deployment # 资源类型metadata: # 元数据 labels: # 标签 app: yearning name: yearning # deployment的名字 namespace: yearning # 所属命名空间spec: replicas: 3 # 正本数 selector: # 选择器,抉择针对谁做 matchLabels: app: yearning template: # 镜像的模板 metadata: # 元数据 labels: # 标签 app: yearning spec: containers: # 容器信息 - image: chaiyd/yearning # 容器镜像 name: yearning # 容器的名字 imagePullPolicy: IfNotPresent # 镜像的下载策略 env: # 容器中的变量 - name: MYSQL_ADDR valueFrom: secretKeyRef: # 存储的变量信息 name: db-conf key: addr - name: MYSQL_USER valueFrom: secretKeyRef: name: db-conf key: user - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: db-conf key: pass - name: MYSQL_DB valueFrom: secretKeyRef: name: db-conf key: data ports: # 定义容器中的端口信息 - containerPort: 8000 name: web protocol: TCP readinessProbe: # 就绪查看 httpGet: path: / port: web scheme: HTTP initialDelaySeconds: 25 periodSeconds: 2 livenessProbe: # 存活查看 httpGet: path: / port: web scheme: HTTP initialDelaySeconds: 30 periodSeconds: 2 resources: # 资源限度 requests: cpu: 200m memory: 1Gi limits: cpu: 250m memory: 2Gi
kubectl apply -f deployment.yamlkubectl get pods -n yearning
期待三个pod running
创立Service
当然了,这里是看集体操作,我个别是deployment与service一起创立的。这里就依照这文档步骤一步一步来吧!
cat service.yaml
apiVersion: v1kind: Servicemetadata: labels: app: yearning name: yearning namespace: yearningspec: ports: - port: 8000 # svc外部端口,通过clusterIP拜访 protocol: TCP targetPort: 8000 # 镜像内服务的端口 selector: # 标签选择器,与deployment中的标签保持一致 app: yearning
文档都喜爱将 svc外部端口搞成80?我是集体不喜爱这样 习惯port=targetPort。type也习惯cluserIP,这些货色都能够看集体的布局!
kubectl apply -f service.yaml kubectl get svc -n yearning
创立Ingress对外裸露服务
业务ingress映射我的是traefik,参照:Kubernetes 1.20.5 装置traefik在腾讯云下的实际
cat ingress.yaml
apiVersion: networking.k8s.io/v1kind: Ingressmetadata: annotations: kubernetes.io/ingress.class: traefik traefik.ingress.kubernetes.io/router.entrypoints: web name: yearning namespace: yearningspec: rules: - host: master-yearning.xxxx.com http: paths: - backend: service: name: yearning port: number: 8000 path: / pathType: Prefix
kubectl apply -f ingress.yamlkubectl get ingress -n yearning
浏览器拜访web与各种暗藏的问题:
数据库脚本问题
浏览器拜访:master-yearning.xxxx.com。输出默认的账户明码admin/Yearning_admin.无奈登陆?what?登陆数据库治理控制台core_accounts 用户数据为空,杂搞?
想不到好的办法,偷懒了一下采纳一下二进制的形式搞一波:参照http://next.yearning.io/guide/install.html
下载release包并解压,批改conf.toml
ubuntu@ap-shanghai-k8s-master-1:~/mysqld/Yearning$ cat conf.toml[Mysql]Db = "Yearning"Host = "xxx"Port = "3306"Password = "xxxxx"User = "xxxxx"
执行Yearning install 实现数据库初始化
./Yearning install
登陆mysql治理控制台发现用户生成
浏览器持续登陆master-yearning.xxxx.com or delete 一下deployment and apply从新生成一下:
失常来说能够进入yearning控制台:
接着问题又来了:貌似是在创立用户的时候?始终提醒我:config.toml文件中SecretKey值必须为16位!没有方法搞?
认真看一眼文档:http://next.yearning.io/guide/cloud.html
secret有一个sk的 data!从新生成一下:
echo -n 'xxxx' | base64 #xxxx要16位
apiVersion: v1kind: Secretmetadata: name: db-conf namespace: yearningtype: Opaque # 应用的是generic类型data: # 这里配置的是数据库的相干信息,应用base64加密输出: # echo -n 'xxxx' | base64 addr: xxxxxx= user: xxxxxx= pass: xxxxx== data: xxxxxx= sk: xxxxx==
kubectl apply -f secret.yamlkubectl get secret -n yearning
deployment中也减少SECRET_KEY sk的相干配置
cat deployment.yaml
apiVersion: apps/v1 # API版泵kind: Deployment # 资源类型metadata: # 元数据 labels: # 标签 app: yearning name: yearning # deployment的名字 namespace: yearning # 所属命名空间spec: replicas: 3 # 正本数 selector: # 选择器,抉择针对谁做 matchLabels: app: yearning template: # 镜像的模板 metadata: # 元数据 labels: # 标签 app: yearning spec: containers: # 容器信息 - image: chaiyd/yearning # 容器镜像 name: yearning # 容器的名字 imagePullPolicy: IfNotPresent # 镜像的下载策略 env: # 容器中的变量 - name: MYSQL_ADDR valueFrom: secretKeyRef: # 存储的变量信息 name: db-conf key: addr - name: MYSQL_USER valueFrom: secretKeyRef: name: db-conf key: user - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: db-conf key: pass - name: MYSQL_DB valueFrom: secretKeyRef: name: db-conf key: data - name: SECRET_KEY valueFrom: secretKeyRef: name: db-conf key: sk ports: # 定义容器中的端口信息 - containerPort: 8000 name: web protocol: TCP readinessProbe: # 就绪查看 httpGet: path: / port: web scheme: HTTP initialDelaySeconds: 25 periodSeconds: 2 livenessProbe: # 存活查看 httpGet: path: / port: web scheme: HTTP initialDelaySeconds: 30 periodSeconds: 2 resources: # 资源限度 requests: cpu: 200m memory: 1Gi limits: cpu: 250m memory: 2Gi
kubectl apply -f deployment.yamlkubectl get pods -n yearning
到这里装置的流程就没有什么问题了。请尽量参照官网文档:http://next.yearning.io/guide/cloud.html。数据库问题,可参考一下二进制的形式,能缩小入坑。
Yearning的初步应用
批改admin明码
处于平安方面思考,第一步骤应该是批改管理员明码:
创立新用户
单击编辑将zhangpeng设置为非审计人
还有权限?盲猜一下是权限组外面设置?前面再看
增加数据源
创立一个环境
居然能够创立环境搜一下先创立个环境意思一下:
左侧栏-自定义环境增加一下Tencent环境保留
环境具体什么用呢?我是不是能够辨别正式 qa 开发环境?这里就只演示一下了....我也是第一次用......昨天跑了一遍,明天是反复了 略微顺畅了一下!
增加数据源
增加数据源这里发现要先设置一个流程!
创立流程
数据源
保留数据胜利如下图:
创立一个权限组并将用户退出用户组
创立一个权限组zhangpeng,DDL,DML,QUERY权限都先退出了....
将admin zhanpeng 用户退出zhangpeng用户组(这里的组是不是应该有其余用法?然而这里不增加后续工单申请看不到数据源)
登陆普通用户zhangpeng创立工单
登陆普通用户
开一个火狐浏览器,登陆zhangpeng用户
创立工单
肯定记的普通用户也要退出权限组,否则DML DDL 查问这里无奈显示数据源!
对于DML DDL将真我都分不太清,数据库用的真心很少, 也没有太多触碰。根本应该是上面这样的定义的?
DML(Data Manipulate Language):数据操作语言。对表中的数据进行减少、删除、批改
DDL(Data Define Languge):数据定义语言。对数据库和表进行治理,例如创立、批改、删除等。
留神:参照:SQL语言之DML & DDL
不论了玩一个简略的创立数据库的例子?
工单申请-DDL-工单申请
填写SQL这里右击鼠标进行SQL检测
审计人审批工单
zhangpeng用户的定义就是普通用户,admin用户这里就做审计人
登陆admin的控制台:
点击审核-工单-找到要审核工单点击详情
找到sql语句右击鼠标SQL检测
期待SQL检测通过点击右上角批准审批工单
期待工单运行实现
当然了实现后zhangpeng用户下也能够看到工单审核实现
验证
查看一下是否创立胜利?
admin or zhangpeng用户工单申请这里 DML 或者DDL工单申请这里数据库选项栏能够看到zhangpeng数据库曾经创立胜利了
当然了也能够登陆数据库后盾查看10.0.2.2进行确认一下:
这里就只进行简略的数据库创立的操作流程了抛砖引玉!
总结:
- 装置搭建尽量依照官网最新文档来,数据库如果不能创立sql数据能够尝试二进制形式生成数据库数据。
- 第一次用还是不太习惯,比方权限组的定义还有所谓的审批流程,以及用户的角色定义。
- 心愿Yearning实现的性能 是否导入云数据库?比方阿里云 腾讯云的 数据库?
- DDL DML这里 在CREATE database的时候要抉择一个数据库?这个中央有点不合理,心愿前面能改良。