Chuyển đến nội dung chính

第 18 課:KMIP、Consul、Nomad Secrets 引擎和自訂插件

KMIP Secrets Engine、Consul Secrets Engine、Nomad Secrets Engine、Vault 外掛程式系統 — 架構、目錄、使用 Go 開發自訂外掛程式。

<定義> <線性漸變 id="bg-43" x1="0%" y1="0%" x2="100%" y2="100%">

<矩形寬度=“1200”高度=“340”rx=“12”填滿=“url(#bg-43)”/>

<圓cx =“894”cy =“252”r =“22”填入=“#f472b6”不透明度=“0.07”/> <圓cx =“1070”cy =“288”r =“20”填入=“#f472b6”不透明度=“0.05”/> <圓cx =“750”cy =“80”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“750”cy =“108”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“750”cy =“136”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“750”cy =“164”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“778”cy =“80”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“778”cy =“108”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“806”cy =“80”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“806”cy =“108”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“806”cy =“136”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“806”cy =“164”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“834”cy =“80”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“834”cy =“108”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“834”cy =“136”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“834”cy =“164”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“862”cy =“108”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“862”cy =“136”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“890”cy =“80”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“890”cy =“108”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“890”cy =“136”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <圓cx =“890”cy =“164”r =“1.5”填入=“#f472b6”不透明度=“0.15”/> <多邊形點=「1035.38268590218,198.5 1035.38268590218,225.5 1012,239 988.6173140978201,225.5 98.61738.61738. 1012,185”填入=“無”描邊=“#f472b6”描邊寬度=“1”不透明度=“0.12”/>

<矩形x =“60”y =“50”寬度=“4”高度=“60”rx =“2”填滿=“#f472b6”/> <矩形x =“80”y =“50”寬度=“121”高度=“28”rx =“14”填滿=“#f472b6”不透明度=“0.15”/> 🔒 DevSecOps — 第 18 堂課

第 18 課:KMIP、領事、遊牧秘密 引擎與自訂外掛程式

HashiCorp Vault 從基礎到進階

第 4 部分:進階機密引擎

xdev.asia

1. KMIP 秘密引擎(企業)

KMIP(金鑰管理互通協定)是用於加密金鑰管理的 OASIS 標準協定。 KMIP Secrets Engine 允許 Vault 充當KMIP 伺服器,為支援 KMIP 的資料庫、儲存系統和應用程式提供金鑰管理。

用例

  • MongoDB Enterprise — 使用 KMIP 進行靜態加密

  • MySQL Enterprise — TDE(透明資料加密)

  • VMware vSphere — 虛擬機器加密

  • NetApp — 儲存加密

設定 KMIP

# 啟用 KMIP
vault secrets enable kmip

#Cấu hình KMIP 監聽器
vault write kmip/config \
  Listen_addrs =“0.0.0.0:5696”\
  tls_ca_key_type="ec" \
  tls_ca_key_bits=256 \
  default_tls_client_key_type="ec" \
  default_tls_client_key_bits=256

# Tạo 範圍(邏輯分離)
vault write -f kmip/scope/mongodb

# Tạo 角色範圍大
vault write kmip/scope/mongodb/role/admin \
  操作_啟動=真\
  操作_建立=真\
  操作_銷毀=真\
  operation_discover_versions=true \
  操作_get=true \
  操作_定位=真\
  操作重設密鑰=true

# Sinh 用戶端憑證 cho MongoDB
vault write -format=json kmip/scope/mongodb/role/admin/credential/generate \
  格式=pem > mongodb-kmip-creds.json

# 提取憑證和密鑰
貓 mongodb-kmip-creds.json | jq -r '.data.certificate' > client.pem
貓 mongodb-kmip-creds.json | jq -r '.data.private_key' >> client.pem
貓 mongodb-kmip-creds.json | jq -r '.data.ca_chain[]' > ca.pem

有 KMIP Vault 的 MongoDB

# mongod.conf
安全:
  啟用加密: true
  公里普:
    伺服器名稱:vault.company.com
    埠:5696
    用戶端憑證檔案:/etc/mongodb/client.pem
    伺服器CA檔:/etc/mongodb/ca.pem
    keyStatePollingSeconds:60

2.領事秘密引擎

Consul Secrets Engine產生動態Consul ACL令牌,允許應用程式使用短期憑證存取Consul服務網格和KV儲存。

# 啟用 Consul 秘密引擎
vault secrets enable consul

# Cấu hình kết nối 領事
vault write consul/config/access \
  地址=“consul.company.com:8500”\
  令牌=“<領事管理令牌>”

#陶角色
vault write consul/roles/app-readonly \
  策略=“應用程式只讀策略”\
  生存時間=1小時\
  最大生存時間=4小時

# 領事政策 (tạo trước trên Consul)
# 應用程式唯讀策略:
# key_prefix "app/" { 策略 = "讀取" }
# service_prefix "" { 策略 = "讀取" }

# Sinh 動態 Consul 令牌
vault read consul/creds/app-readonly
# 令牌:2f76e8b4-a3d0-...
# 租約持續時間:1小時

# 令牌 tự động 撤銷 khi hết 租賃

3.游牧秘密引擎

Nomad Secrets Engine sinh 動態 Nomad ACL 令牌。

# 啟用 Nomad 秘密引擎
vault secrets enable nomad

#Cấu hình
vault write nomad/config/access \
  位址=“https://nomad.company.com:4646" \
  令牌=“<游牧管理令牌>”

#陶角色
vault write nomad/role/deploy \
  策略=“部署策略”\
  類型=“客戶端”\
  TTL=30m

# Sinh Nomad 代幣
vault read nomad/creds/deploy
# 秘密 ID:5e1c1a...
# accessor_id: 3d2b...

4. Vault插件系統

Vault 具有基於插件的架構 - 所有秘密引擎和身份驗證方法都是插件。您可以使用 Go 開發自訂外掛程式。

外掛架構

<前><代碼>┌────────────────────────────────────────────────┐ │ 保管庫伺服器 │ │ │ │ ┌────────────┐ ┐──────────────┐ │ │ │ 內建 │ │ 外部 │ │ │ │ 插件 │ │ 插件 │ │ │ │ (kv, 運輸, │ │ (定制, │ │ │ │ pki, aws) │ │ 社區) │ │ │ └────────────┘ └──────┬────────┘ │ │ │ │ │ 基於 Unix Socket 的 gRPC │ │(相互驗證)│ │ │ │ │ ┌──────┴────────┐ │ │ │ 外掛程式二進位 │ │ │ │ (單獨 │ │ │ │ 過程) │ │ │ └──────────────┘ │ └──────────────────────────────────────────────────┘

外掛目錄

# Liệt kê 內建插件
vault plugin list

# Liệt kê chỉ 秘密插件
vault plugin list secret

# 授權插件
vault plugin list auth

# Đăng ký 自訂插件
vault plugin register -sha256="$(sha256sum vault-plugin-myengine | cut -d' ' -f1)" \
  秘密庫-插件-myengine

# 啟用自訂插件
vault secrets enable -path=myengine vault-plugin-myengine

開發自訂秘密引擎

// main.go
包主導入(
    “作業系統”
    “github.com/hashicorp/go-hclog”
    “github.com/hashicorp/vault/api”
    “github.com/hashicorp/vault/sdk/framework”
    “github.com/hashicorp/vault/sdk/邏輯”
    “github.com/hashicorp/vault/sdk/plugin”
)

函數主() {
    apiClientMeta := &api.PluginAPIClientMeta{}
    標誌 := apiClientMeta.FlagSet()
    flags.Parse(os.Args[1:])

    tlsConfig := apiClientMeta.GetTLSConfig()
    tlsProviderFunc := api.VaultPluginTLSProvider(tlsConfig)

    錯誤 := 插件.ServeMultiplex(&插件.ServeOpts{
        BackendFactoryFunc:工廠,
        TLSProviderFunc:tlsProviderFunc,
    })
    如果錯誤! = nil {
        記錄器 := hclog.New(&hclog.LoggerOptions{})
        logger.Error("插件關閉", "錯誤", err)
        os.退出(1)
    }
}

func Factory(ctx context.Context, conf *邏輯.BackendConfig) (邏輯.Backend, 錯誤) {
    b := &後端{}
    b.Backend = &framework.Backend{
        幫助:“我的自訂秘密引擎”,
        BackendType: 邏輯.TypeLogical,
        路徑:[]*framework.Path{
            b.pathCreds(),
            b.pathConfig(),
        },
        秘密:[]*framework.Secret{
            b.secretCreds(),
        },
    }
    if err := b.Setup(ctx, conf);錯誤! =零{
        回傳零,錯誤
    }
    返回b,無
}

類型後端結構體{
    *框架.後端
}

外掛程式多重化

外掛程式多重化(Vault 1.12+)允許一個外掛程式為多個安裝提供服務,從而減少資源使用:

// 使用plugin.ServeMultiplex thay vì plugin.Serve
錯誤 := 插件.ServeMultiplex(&插件.ServeOpts{
    BackendFactoryFunc:工廠,
    TLSProviderFunc:tlsProviderFunc,
})

版本化外掛

# Đăng ký 外掛程式版本 mới
vault plugin register \
  -sha256=“...”\
  -版本=“v2.0.0”\
  秘密庫-插件-myengine

# Liệt kê 版本
vault plugin info secret vault-plugin-myengine

# 腳位安裝 đến 版本 cụ thể
vault secrets tune -plugin-version="v2.0.0" myengine/

# 重新載入外掛程式(零停機)
vault plugin reload -plugin vault-plugin-myengine

5.著名的社群外掛

<表> <標題>

外掛程式描述 <正文> vault-plugin-secrets-github動態 GitHub 令牌 vault-plugin-secrets-kafkaKafka 憑證 vault-plugin-secrets-artifactoryJFrog Artifactory 代幣 vault-plugin-auth-kerberosKerberos/SPNEGO 驗證 vault-plugin-secrets-openldapOpenLDAP 憑證

6。摘要

  • KMIP — 標準金鑰管理、MongoDB/MySQL/VMware 整合

  • Consul/Nomad Engines — HashiCorp 生態系的動態 ACL 代幣

  • 外掛系統 - 可擴充架構,使用 Go 的自訂外掛程式

  • 外掛程式多重化 - 透過多重安裝提高效能

下一節將探討 Vault Agent、Vault Proxy 和 Kubernetes 整合 - 如何自動傳遞機密機密給應用程式。