0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

K8S集群中使用JDOS KMS服務(wù)對(duì)敏感數(shù)據(jù)安全加密

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-08-09 16:00 ? 次閱讀

基本概念

KMS,Key Management Service,即密鑰管理服務(wù),在K8S集群中,以驅(qū)動(dòng)和插件的形式啟用對(duì)Secret,Configmap進(jìn)行加密。以保護(hù)敏感數(shù)據(jù),

驅(qū)動(dòng)和插件需要使用者按照需求進(jìn)行定制和實(shí)現(xiàn)自己的KMS插件,插件可以是gRPC服務(wù)器或者啟用一個(gè)云服務(wù)商提供的KMS插件。

本文中演示使用的KMS 服務(wù)是京東云艦中的KMS加密服務(wù)。

目前KMS分為V1,V2,本文基于V1進(jìn)行演示。

架構(gòu)

內(nèi)部可以利用kms加密實(shí)現(xiàn)自己的加密算法,甚至國密算法。

wKgZoma1zJ6AcEuaAAD6dfqMV2U987.png

當(dāng)用戶新建secret資源時(shí),kube-apiserver 會(huì)通過gRPC調(diào)用kms-plugin,而kms-plugin與加密服務(wù)器通信,進(jìn)行數(shù)據(jù)加密。

此時(shí)如果通過直接獲取etcd中的原始數(shù)據(jù),內(nèi)容為密文數(shù)據(jù)。

當(dāng)用戶獲取secret資源內(nèi)容時(shí),kube-apiserver 會(huì)通過gRPC調(diào)用kms-plugin,而kms-plugin與加密服務(wù)器通信,進(jìn)行數(shù)據(jù)解密,將明文展示給用戶。

操作步驟

需要一套已經(jīng)運(yùn)行的Kubernetes集群服務(wù),如果是多臺(tái)master節(jié)點(diǎn),需要同時(shí)配置。

新建目錄

/etc/kubernetes/kms/jdcloud

新建 EncryptionConfiguration

該配置是kms基本的加密配置,包括加密資源對(duì)象,socket地址等等。

apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
  - resources:
    - secrets # 這里表示,只加密secret
    providers:
    - kms:
        name: myKmsPlugin
        endpoint: unix:///var/run/k8s-kms-plugin/kms-plugin.sock # 如果不以pod(jdcloud-kms-plugin.yaml)啟動(dòng),需要sock文件放到master節(jié)點(diǎn)。
        cachesize: 100
        timeout: 3s
    - identity: {}

以上內(nèi)容保存在/etc/kubernetes/kms/jdcloud/apiserver-encryption.conf

新建 jdcloud kms plugin 配置

kms server的上聯(lián)信息配置

{
  "AccessKey": "xxx", # 部署前,該參數(shù)需要預(yù)先知道,
  "SecretKey": "yyy", # 部署前,該參數(shù)需要預(yù)先知道。
  "KmsEndpoint": "kms.internal.cn-north-1.jdcloud-api.com", # 部署前,該參數(shù)需要預(yù)先知道。
  "KmsKeyId": "abcd", # 部署前,該參數(shù)需要預(yù)先知道。
  "KmsSchema": "http",
  "GRPCSocketPath": "/var/run/k8s-kms-plugin/kms-plugin.sock"
}

以上內(nèi)容保存在/etc/kubernetes/kms/jdcloud/jdcloud-kms-plugin.json

新建 jdcloud kms plugin 服務(wù)

該服務(wù)是啟動(dòng)socket服務(wù),并按照配置和上聯(lián)的kms server進(jìn)行通信,加密和解密數(shù)據(jù),并通過socket服務(wù)和K8S APIServer交互。

該pod需要在kube-apiserver啟動(dòng)之前啟動(dòng),否則與apiserver可能產(chǎn)生循環(huán)依賴。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    component: jdcloud-kms-plugin
    tier: control-plane
  name: jdcloud-kms-plugin-node-01
  namespace: kube-system
spec:
  containers:
  - command:
    - /k8s-kms-plugin
    - -f=/etc/kubernetes/kms/jdcloud/jdcloud-kms-plugin.json # 指定json
    image: hub-pub.jdcloud.com/k8s/jdcloudsec/k8s-kms-plugin:v1.0.1 
    imagePullPolicy: IfNotPresent
    name: jdcloud-kms-plugin
    resources:
      requests:
        cpu: 250m
    volumeMounts:
    - mountPath: /etc/kubernetes/kms/jdcloud/jdcloud-kms-plugin.json # 注意路徑
      name: jdcloud-kms-plugin-configfile
      readOnly: true
    - mountPath: /var/run/k8s-kms-plugin/
      name: k8s-kms-plugin-unixsock-directory
      readOnly: false
  hostNetwork: true
  priorityClassName: system-cluster-critical
  volumes:
  - hostPath:
      path: /etc/kubernetes/kms/jdcloud/jdcloud-kms-plugin.json # 注意路徑
      type: File
    name: jdcloud-kms-plugin-configfile
  - hostPath:
      path: /var/run/k8s-kms-plugin/
      type: DirectoryOrCreate
    name: k8s-kms-plugin-unixsock-directory
status: {}

以上內(nèi)容保存在/etc/kubernetes/manifests/jdcloud-kms-plugin.yaml

修改 kube apiserver配置

...
    - --encryption-provider-config=/etc/kubernetes/kms/jdcloud/apiserver-encryption.conf
    image: hub-pub.jdcloud.com/k8s/kube-apiserver:v1.19.9-109
    imagePullPolicy: IfNotPresent
    livenessProbe:
...
    - mountPath: /etc/kubernetes/kms/jdcloud/apiserver-encryption.conf
      name: apiserver-encryption-conf
      readOnly: true
    - mountPath: /var/run/k8s-kms-plugin/
      name: k8s-kms-plugin-unixsock-directory
      readOnly: false
...
  - hostPath:
      path: /etc/kubernetes/kms/jdcloud/apiserver-encryption.conf
      type: File
    name: apiserver-encryption-conf
  - hostPath:
      path: /var/run/k8s-kms-plugin/
      type: DirectoryOrCreate
    name: k8s-kms-plugin-unixsock-directory

修改后保存

驗(yàn)證

在默認(rèn)的命名空間里創(chuàng)建一個(gè)名為 secret1 的 Secret:

kubectl create secret generic secret1 -n default --from-literal=mykey=mydata

用 etcdctl 命令行,從 etcd 讀取出 Secret:

etcdctl.sh get /kubernetes.io/secrets/default/secret1 [...] | hexdump -C

結(jié)果為加密數(shù)據(jù)

驗(yàn)證 Secret 在被 API server 獲取時(shí)已被正確解密:

kubectl describe secret secret1 -n default

該結(jié)果為明文,mykey: mydata

產(chǎn)品能力

在K8S集群中,京東內(nèi)部一直比較重視對(duì)敏感數(shù)據(jù)加密,特別是云艦面對(duì)越來越多的金融行業(yè)客戶,加密服務(wù)基本是云艦中的標(biāo)準(zhǔn)配置。

經(jīng)過產(chǎn)品能力打磨和內(nèi)部實(shí)現(xiàn),KMS 加密服務(wù)和K8S自動(dòng)化集群以及一鍵配置創(chuàng)建都在云艦內(nèi)實(shí)現(xiàn)了很好的產(chǎn)品化能力,可以隨集群創(chuàng)建,一鍵啟用KMS加密服務(wù)。

wKgaoma1zKCAHNK-AAA42TwSBXY885.png

參考:

1. 使用 KMS 驅(qū)動(dòng)進(jìn)行數(shù)據(jù)加密

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)安全
    +關(guān)注

    關(guān)注

    2

    文章

    681

    瀏覽量

    29950
  • KMS
    KMS
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    4684
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    k8s和docker區(qū)別對(duì)比,哪個(gè)更強(qiáng)?

    Docker和Kubernetes(K8s)是容器化技術(shù)的兩大流行工具。Docker關(guān)注構(gòu)建和打包容器,適用于本地開發(fā)和單主機(jī)管理;而K8s則提供容器編排和管理平臺(tái),適用于多主機(jī)或云環(huán)境,具備自動(dòng)化
    的頭像 發(fā)表于 12-11 13:55 ?104次閱讀

    恒訊科技分析:云服務(wù)數(shù)據(jù)加密具體是如何操作的?

    服務(wù)數(shù)據(jù)加密通常涉及以下幾個(gè)步驟和方法: 1、數(shù)據(jù)分類:首先需要對(duì)數(shù)據(jù)進(jìn)行分類,確定哪些數(shù)據(jù)
    的頭像 發(fā)表于 11-25 11:55 ?138次閱讀

    k8s服務(wù)架構(gòu)就是云原生嗎?兩者是什么關(guān)系

    k8s服務(wù)架構(gòu)就是云原生嗎?K8s服務(wù)架構(gòu)并不等同于云原生,但兩者之間存在密切的聯(lián)系。Kubernetes在云原生架構(gòu)中扮演著核心組件的角色,它簡化了容器化應(yīng)用程序的管理,提供了彈
    的頭像 發(fā)表于 11-25 09:39 ?147次閱讀

    混合云部署k8s集群方法有哪些?

    混合云部署k8s集群方法是首先需在本地與公有云分別建立K8s集群,并確保網(wǎng)絡(luò)連接。接著,配置kubeconfig文件連接兩集群,并安裝云
    的頭像 發(fā)表于 11-07 09:37 ?150次閱讀

    k8s可以部署私有云嗎?私有云部署全攻略

    Kubernetes(簡稱K8S)可以部署私有云。Kubernetes是一個(gè)開源的容器編排引擎,能夠自動(dòng)化容器的部署、擴(kuò)展和管理,使得應(yīng)用可以在各種環(huán)境中高效運(yùn)行。通過使用Kubernetes,企業(yè)可以在自己的數(shù)據(jù)中心或私有云環(huán)境中搭建和管理容器化的應(yīng)用,實(shí)現(xiàn)高度的靈活性
    的頭像 發(fā)表于 10-25 09:32 ?169次閱讀

    k8s云原生開發(fā)要求

    IO性能。網(wǎng)絡(luò)要求穩(wěn)定,建議使用私有網(wǎng)絡(luò)VPC,并配置與Kubernetes兼容的網(wǎng)絡(luò)插件。操作系統(tǒng)需與K8s版本匹配,虛擬化平臺(tái)支持Docker等。此外,還需關(guān)注安全配置,如禁用Swap、調(diào)整Sysctl等,以及etcd數(shù)據(jù)
    的頭像 發(fā)表于 10-24 10:03 ?224次閱讀
    <b class='flag-5'>k8s</b>云原生開發(fā)要求

    k8s容器啟動(dòng)失敗的常見原因及解決辦法

    k8s容器啟動(dòng)失敗的問題通常出現(xiàn)在開發(fā)者使用Kubernetes進(jìn)行容器編排時(shí),可能的原因有多種,例如:配置錯(cuò)誤、鏡像問題、資源限制、依賴問題、網(wǎng)絡(luò)問題、節(jié)點(diǎn)狀態(tài)異常、其他因素等,以下是對(duì)這些常見原因的詳細(xì)分析:
    的頭像 發(fā)表于 10-11 10:12 ?261次閱讀

    服務(wù)器部署k8s需要什么配置?

    服務(wù)器部署K8s需要至少2核CPU、4GB內(nèi)存、50GBSSD存儲(chǔ)的主節(jié)點(diǎn)用于管理集群,工作節(jié)點(diǎn)建議至少2核CPU、2GB內(nèi)存、20GBSSD。還需安裝Docker,選擇兼容的Kubernetes版本,配置網(wǎng)絡(luò)插件,以及確保系
    的頭像 發(fā)表于 10-09 15:31 ?211次閱讀

    納尼?自建K8s集群日志收集還能通過JMQ保存到JES

    作者:京東科技 劉恩浩 一、背景 基于K8s集群的私有化交付方案中,日志收集采用了ilogtail+logstash+kafka+es方案,其中ilogtail負(fù)責(zé)日志收集,logstash負(fù)責(zé)對(duì)數(shù)據(jù)
    的頭像 發(fā)表于 09-30 14:45 ?214次閱讀

    常用的k8s容器網(wǎng)絡(luò)模式有哪些?

    常用的k8s容器網(wǎng)絡(luò)模式包括Bridge模式、Host模式、Overlay模式、Flannel模式、CNI(ContainerNetworkInterface)模式。K8s的容器網(wǎng)絡(luò)模式多種多樣
    的頭像 發(fā)表于 09-19 11:29 ?243次閱讀

    K8S學(xué)習(xí)教程三:在PetaExpress KubeSphere 容器部署 Wiki 系統(tǒng) wiki.js 并啟用中文全文檢索

    K8S學(xué)習(xí)教程(三):在PetaExpress KubeSphere 容器部署 Wiki 系統(tǒng) wiki.js 并啟用中文全文檢索? 。
    的頭像 發(fā)表于 07-08 17:03 ?654次閱讀
    <b class='flag-5'>K8S</b>學(xué)習(xí)教程三:在PetaExpress KubeSphere 容器部署 Wiki 系統(tǒng) wiki.js 并啟用中文全文檢索

    K8S學(xué)習(xí)教程(二):在 PetaExpress KubeSphere容器平臺(tái)部署高可用 Redis 集群

    并且需要手動(dòng)重啟節(jié)點(diǎn),相較之下,使用 PetaExpress 提供的 Kubernetes(k8s) 服務(wù) 進(jìn)行 Redis 集群的部署,則展現(xiàn)出了顯著的優(yōu)勢(shì): 1、安裝便捷:使用鏡像或者 yaml 配置文件即可一件安裝,極大地
    的頭像 發(fā)表于 07-03 15:30 ?765次閱讀
    <b class='flag-5'>K8S</b>學(xué)習(xí)教程(二):在 PetaExpress KubeSphere容器平臺(tái)部署高可用 Redis <b class='flag-5'>集群</b>

     K8S學(xué)習(xí)教程一:使用PetaExpress云服務(wù)器安裝Minikube 集群

    使得開發(fā)人員能夠在本地機(jī)器上輕松創(chuàng)建一個(gè)單節(jié)點(diǎn)的 Kubernetes 集群,從而方便開發(fā)、測試和學(xué)習(xí) Kubernetes。 我們看下如何使用PetaExpress云服務(wù)器安裝Minikube 集群
    的頭像 發(fā)表于 07-01 15:41 ?378次閱讀
     <b class='flag-5'>K8S</b>學(xué)習(xí)教程一:使用PetaExpress云<b class='flag-5'>服務(wù)</b>器安裝Minikube <b class='flag-5'>集群</b>

    淺析Ranther管理K8S集群

    Rancher 基于 Kubernetes 添加了新的功能,包括統(tǒng)一所有集群的身份驗(yàn)證和 RBAC,讓系統(tǒng)管理員從一個(gè)位置控制全部集群的訪問。
    的頭像 發(fā)表于 01-21 10:28 ?898次閱讀
    淺析Ranther管理<b class='flag-5'>K8S</b><b class='flag-5'>集群</b>

    K8S落地實(shí)踐經(jīng)驗(yàn)分享

    k8s 即 Kubernetes,是一個(gè)開源的容器編排引擎,用來對(duì)容器化應(yīng)用進(jìn)行自動(dòng)化部署、 擴(kuò)縮和管理。
    的頭像 發(fā)表于 01-02 11:45 ?1167次閱讀
    <b class='flag-5'>K8S</b>落地實(shí)踐經(jīng)驗(yàn)分享