自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一鍵化部署通用方案,你學(xué)會了嗎?

開發(fā) 前端
我們在 deploy_config.yaml 配置了部署的IP信息。在某些情況下,我們需要手動配置一些部署的參數(shù),那么這個時候就需要用戶手動在deploy_config.yaml設(shè)置參數(shù)。

部署內(nèi)容包分析

部署前應(yīng)該拿到「安裝包」和配套的「授權(quán)配置」,授權(quán)配置中包含授權(quán)包的授權(quán)碼,完整性校驗碼等內(nèi)容。

安裝包

安裝包是一個壓縮文件,里面包含了一個安裝工具和一個加密壓縮之后的部署包。安裝工具利用授權(quán)碼對部署包進行處理,并按授權(quán)碼攜帶的信息進行部署。

完整性校驗碼

完整性校驗碼用于校驗安裝包的完整性。

授權(quán)碼的結(jié)構(gòu)

部署授權(quán)碼用于協(xié)調(diào)部署安裝過程。

授權(quán)碼考慮使用具備授權(quán)信息的json文本,利用非對稱加密的方法,加密出來的字符串作為授權(quán)碼,授權(quán)碼的結(jié)構(gòu)包括但不限于 授權(quán)的模塊,部署包的解壓密碼等;

受商業(yè)模式的影響,還可以增加其他的授權(quán)內(nèi)容用于做到不同程度的限制,如下:

1、授權(quán)碼可能會被多次使用,特別是在內(nèi)網(wǎng)的情況下,無法限制其部署的次數(shù),可以考慮增加「授權(quán)碼的過期時間或授權(quán)碼生效的MAC地址」參數(shù)來限制授權(quán)碼的反復(fù)使用。

2、如果授權(quán)碼被濫用,為了便于后續(xù)查看是哪家泄漏的授權(quán)碼,可以在授權(quán)碼的原始json中增加「授權(quán)對象名稱」字段。

3、平臺如果是按年收費等,可以增加 「平臺的授權(quán)時間范圍」 字段,用來限制平臺的使用時間。

4、平臺如果考慮按用戶數(shù)量等收費,也可以增加 「授權(quán)的用戶數(shù)」 字段,用來限制平臺創(chuàng)建用戶的數(shù)量限制等。

下面是一套授權(quán)碼的 JSON 結(jié)構(gòu)示例,涵蓋了授權(quán)信息,如授權(quán)模塊、部署包解壓密碼、授權(quán)對象、MAC 地址綁定、授權(quán)時間范圍等。

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
{
  "license_id": "123e4567-e89b-12d3-a456-426614174000",
  "issued_at": "2024-10-22T12:00:00Z",
  "expires_at": "2025-10-22T12:00:00Z",
  "licensee": {
    "company": "某某科技有限公司",
    "contact": "admin@example.com"
  },
  "authorized_modules": [
    "asset",
    "vulnernable",
    "notice"
  ],
  "deployment": {
    "unpack_password": "s3cr3tP@ssw0rd",
    "allowed_macs": [
      "00:1A:2B:3C:4D:5E",
      "00:1A:2B:3C:4D:5F"
    ],
    "instance_type": 0
  },
  "usage_restrictions": {
    "valid_from": "2024-11-01T00:00:00Z",
    "valid_to": "2025-11-01T00:00:00Z",
    "max_users": 100
  },
  "security": {
    "signature": "base64-encoded-signature"
  }
}

說明

  1. 「license_id」:唯一的授權(quán)碼 ID,可用于追蹤授權(quán)。
  2. 「issued_at / expires_at」:授權(quán)碼的簽發(fā)時間和到期時間。
  3. 「licensee」:授權(quán)對象(企業(yè)或個人)。
  4. 「authorized_modules」:被授權(quán)的功能模塊列表。
  5. 「deployment」:
  • unpack_password:部署包的解壓密碼。
  • allowed_macs:受限的 MAC 地址列表,可用于防止無限制使用授權(quán)碼。
  • nstance_type:授權(quán)部署實例的類型(0表示單節(jié)點授權(quán)部署,1表示三節(jié)點授權(quán)部署)
  1. 「usage_restrictions」:
  • valid_from / valid_to:平臺的授權(quán)有效期。

  • max_users:授權(quán)的最大用戶數(shù)。

  1. 「security」:

  • signature:授權(quán)碼的數(shù)字簽名(使用私鑰對整個 JSON 加密的哈希值,驗證時使用公鑰校驗)。

使用非對稱加密(如 RSA、ECC)對 JSON 進行加密,并將其轉(zhuǎn)換為 Base64 字符串,作為最終的授權(quán)碼。

缺陷問題

為了得到足夠的授權(quán)信息,授權(quán)碼會比較長:“我們的客戶場景基本為內(nèi)網(wǎng)部署,無法通過給簡單授權(quán)碼然后請求遠程授權(quán)信息的方式來代替”。

虛擬化或云環(huán)境下,MAC 地址可能頻繁變動,影響授權(quán)驗證:“在這種情況下,可以修改變化的MAC地址為其他不變的參數(shù)”。

用戶可能會修改系統(tǒng)時間,繞過授權(quán)時間限制

在內(nèi)網(wǎng)部署的情況下,授權(quán)碼盜用和濫用的方法比較多,我們現(xiàn)目前沒有很好的方案從技術(shù)上完全限制。

部署流程設(shè)計

校驗和配置

完整性校驗

用戶拿到 「安裝包、校驗碼、授權(quán)碼」 后,需使用完整性校驗工具對 「安裝包」 進行完整性校驗,確保安裝包未被篡改?!甘纠睿⊿HA256 校驗):」

ounter(line
sha256sum -c install_package.sha256

「若校驗失敗,則終止安裝并提示用戶重新獲取安裝包?!?/p>

解壓安裝包

校驗通過后,用戶手動解壓安裝包,得到以下內(nèi)容:

  • 「加密部署包(encrypted_package.tar.gz)」
  • 「部署工具(deploy_tool,可執(zhí)行二進制)」
  • 「部署配置文件(deploy_config.yaml)」

「示例解壓命令:」

ounter(line
tar -xzf install_package.tar.gz

deploy_config.yaml 包含:

  • 「版本信息」(當(dāng)前包版本號)
  • 「依賴信息」(是否依賴其他組件)
  • 「可選配置參數(shù)」(如端口、數(shù)據(jù)庫連接等)

配置參數(shù)

用戶可根據(jù)需求修改 deploy_config.yaml,未配置的參數(shù)采用默認值。

開始部署

啟動部署工具

用戶運行部署工具:

ounter(line
./deploy_tool

部署工具會要求用戶輸入 「授權(quán)碼」。

授權(quán)碼校驗

  1. 「解密授權(quán)碼」
  • 使用預(yù)設(shè)的 「私鑰」 解密授權(quán)碼,獲得授權(quán)信息。
  1. 「校驗授權(quán)信息」
  • 確認授權(quán)信息是否與本次部署的 「版本、環(huán)境」 匹配。

  • 授權(quán)有效 → 繼續(xù)安裝

  • 授權(quán)無效 → 終止安裝,提示用戶檢查授權(quán)

自動讀取當(dāng)前環(huán)境信息

部署工具會自動檢測系統(tǒng)中是否已有相同組件:

  • 若已有 「相同版本」,提供 「僅安裝」 或 「覆蓋安裝」 選項:

a.「僅安裝」:保留用戶數(shù)據(jù),使用當(dāng)前版本進行安裝

b.「覆蓋安裝」:不保留舊版本數(shù)據(jù),重新安裝

  • 若已有 「舊版本」,提供 「升級」 或 「覆蓋安裝」 選項:
  • 「升級」:保留用戶數(shù)據(jù),更新至新版本

  • 「覆蓋安裝」:不保留舊版本數(shù)據(jù),重新安裝

「示例命令(檢查已安裝版本):」

ounter(line
./deploy_tool --check-version

執(zhí)行安裝部署步驟

依賴檢查通過之后,利用授權(quán)碼解密得到的部署包密碼對部署包進行解密。

解密成功之后,進入安裝步驟,安裝工具會使用授權(quán)碼解密得到的安裝實例類型參數(shù),如果參數(shù)值為0,表示該授權(quán)碼是單實例部署的授權(quán);如果參數(shù)值為1,表示該授權(quán)碼是三節(jié)點實例部署的授權(quán);

如果是單實例部署,會提示用戶輸入當(dāng)前服務(wù)的外部IP地址和服務(wù)名(可選);

如果是三實例部署,會提升用戶需要輸入master節(jié)點的IP地址和服務(wù)名(可選);其他節(jié)點的IP地址和服務(wù)名(可選)。

用戶也可以在安裝前,將IP地址和服務(wù)名以配置的方式寫入到 deploy_config.yaml 中。

例如:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
master:
  ip: "192.168.1.10"
  host_name: "master-10"
nodes:
  - ip: "192.168.1.11"
    host_name: "node-11"
  - ip: "192.168.1.12"
    host_name: "node-12"

如果是單實例部署中,IP地址用戶也可以缺省,按照工具默認使用127.0.0.1進行部署,host_name默認為master;

在三實例部署中,host_name可以缺省,系統(tǒng)會自動以 **master-主節(jié)點IP(三四位)**為主節(jié)點;「node-從節(jié)點IP(三四位)為各個從節(jié)點」。

在所有的部署情況中,IP地址(和主機名)是變化概率比較大的內(nèi)容,所以這幾個參數(shù)還是會保留以交互式的方式讓用戶進行輸入。其他組件和應(yīng)用的配置參數(shù),則以缺省的方式進行配置(即默認值填充)。

安裝包的命名

「目標(biāo)」:通過文件名即可識別 「包類型」、「版本」、「發(fā)布時間」 及 「其他關(guān)鍵信息」。

****「命名格式」

ounter(line
<產(chǎn)品名稱>-<包類型>-<客戶標(biāo)識>-<發(fā)布版本>-<包類別>-<發(fā)布日期>.tar.gz

例如:

ounter(line
MyApp-Custom-ABCCorp-V2.3.1-Patch-202440.tar.gz

****「詳細字段說明」

「字段」

「示例」

「說明」

「產(chǎn)品名稱」

MyApp

產(chǎn)品或系統(tǒng)名稱

「包類型」

General


 / Custom
 / Beta


「通用包」

、「定制化包」、「Beta 版本」

「客戶標(biāo)識」

ABCcorp

「僅定制化包」

需要加客戶名稱(若通用包/Beta包則省略)

「發(fā)布版本」

V2.3.1

「產(chǎn)品版本號」

,遵循 主版本.次版本.修訂版本
 格式

「包類別」

Full


 / Patch


「完整包」

 (Full
) 還是 「補丁包」 (Patch
)

「發(fā)布日期」

202440

「輪胎命名方式」

,年份(4位)+周數(shù)(2位)
 表示 「2024年第40周」


****「命名示例」

「文件名」

「含義」

MyApp-General-V2.3.1-Full-202440.tar.gz

「通用完整包」

,版本 2.3.1
,2024年第40周發(fā)布

MyApp-Custom-XYZCorp-V1.5.0-Full-202438.tar.gz

「XYZCorp 客戶的定制完整包」

,版本 1.5.0
,2024年第38周發(fā)布

MyApp-Custom-XYZCorp-V1.5.0-Patch-202441.tar.gz

「XYZCorp 客戶的定制補丁包」

,版本 1.5.0
,2024年第41周發(fā)布

MyApp-Beta-V3.0.0-Full-202439.tar.gz

「Beta 測試版完整包」

,版本 3.0.0
,2024年第39周發(fā)布

****「額外可選字段」

如果需要進一步細化,可以增加:

  • 「架構(gòu)類型」(x86_64 / arm64)→ MyApp-General-V2.3.1-Full-202440-x86_64.tar.gz
  • 「加密方式」(Enc 表示加密)→ MyApp-Custom-ABC-V2.3.1-Full-202440-Enc.tar.gz

「這樣一眼就能看出這個包的類型、客戶、版本和發(fā)布時間」

實現(xiàn)方案

部署場景的文件結(jié)構(gòu)

  • checksum.txt
  • listence.txt
  • MyApp-Custom-XYZCorp-V1.5.0-Full-202438-x86_64.tar.gz

a.部署工具,二進制

  • 部署配置文件
  • 加密的部署包
  • MyApp-Custom-XYZCorp-V1.5.0-Full-202438-x86_64-Enc.tar.gz
  • deploy_config.yaml
  • deploy_tool

checksum.txt中存放MyApp-Custom-XYZCorp-V1.5.0-Full-202438-x86_64.tar.gz的完整性校驗碼。

listence.txt中存放授權(quán)碼,是加密并編碼之后的授權(quán)信息。

安裝工具對授權(quán)碼進行解密

當(dāng)用戶手動解壓 MyApp-Custom-XYZCorp-V1.5.0-Full-202438-x86_64.tar.gz 之后,得到 deploy_tool 部署工具,該工具首先讀取并解密listence.txt,得到授權(quán)信息。

生成加密的授權(quán)碼

目標(biāo)是:

  1. 「確保授權(quán)碼只能被安裝工具解密」(即防止他人隨意解密)。
  2. 「防止私鑰泄露,同時保持安全性」。
  • 生成一對 「RSA 公私鑰」:

a.「公鑰(public_key.pem)」 用于加密 listence.txt,并內(nèi)置在 部署包 內(nèi)。

b.**私鑰(private_key.pem)**「僅存儲在部署工具(deploy_tool)內(nèi)部」,用于解密授權(quán)碼。

  • 這樣,**即使別人知道公鑰,他們也無法解密 ****listence.txt**。
「加密流程(生成授權(quán)碼)」
ounter(line
openssl rsautl -encrypt -pubin -inkey public_key.pem -in raw_license.txt -out listence.txt
「解密流程(在 deploy_tool 中)」
ounter(line
openssl rsautl -decrypt -inkey private_key.pem -in listence.txt -out license_decoded.txt

這樣,「只有」**deploy_tool**** 具備私鑰,才能解密授權(quán)碼**。

風(fēng)險

把 「私鑰」 放到 deploy_tool 里面存在 「反編譯泄露風(fēng)險」,如果攻擊者能夠獲取 deploy_tool 并反編譯,就有可能提取私鑰,從而解密 listence.txt。我們「可以考慮動態(tài)生成固定私鑰」的方法,通過「代碼中的特定計算規(guī)則」,在運行時生成私鑰,計算過程隱藏在復(fù)雜的數(shù)學(xué)運算、位運算、哈希計算等邏輯中。

授權(quán)信息的結(jié)構(gòu)

在前面的章節(jié)中,提到過授權(quán)信息的結(jié)構(gòu)。授權(quán)信息是一個json結(jié)構(gòu)的內(nèi)容,里面包含了所有用戶不能看或者不能篡改的內(nèi)容。

用戶填寫好IP和主機名之后的執(zhí)行邏輯

用戶可以手動在 deploy_config.yaml 中填寫好IP等必填參數(shù)信息,也可以通過腳本交互式填寫(如果deploy_config.yaml 沒有),格式為:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
master:
  ip: "192.168.1.10"
  host_name: "master-10"
nodes:
  - ip: "192.168.1.11"
    host_name: "node-11"
  - ip: "192.168.1.12"
    host_name: "node-12"

在此之后,一鍵化腳本會調(diào)用現(xiàn)目前的交互式部署工具V1進行細化的部署工作,V1工具為下面每個組件定義了完整的部署邏輯:

biz base

datax

dinky

dolphinschedul

doris

flink

fluentd

grafana

jdk11

jdk17

jdk8

kafka

knowledge

log_audit

minio

mysql

nginx

nmap

pgsql

prometheus

redis

supervisord

zookeeper

配置前優(yōu)化

同時V1工具也為每一個可變參數(shù),sql都定義了執(zhí)行流。

一鍵化部署工具V2會根據(jù)授權(quán)信息中的授權(quán)的大業(yè)務(wù)組件,「對需要的小組件進行安裝和校驗」,如果用戶在外部沒有為組件定義缺省參數(shù),則各組件會依照原有自動化部署中的默認參數(shù)進行配置和部署。

缺省的參數(shù)清單

在上面的描述中,我們在 deploy_config.yaml 配置了部署的IP信息。在某些情況下,我們需要手動配置一些部署的參數(shù),那么這個時候就需要用戶手動在deploy_config.yaml設(shè)置參數(shù)。

安裝進度展示

用戶可以看到安裝的進度、輸出的安裝正確日志或者錯誤日志和輸出最終訪問的方法等。

輔助文檔輸出

在上述一鍵化部署方案實施的前提下,在本方案交付時還應(yīng)該提供出缺省的參數(shù)清單、可能出現(xiàn)的問題&解決清單、一鍵化部署用戶使用、授權(quán)碼申請模版等文檔。

責(zé)任編輯:武曉燕 來源: 海燕技術(shù)棧
相關(guān)推薦

2024-07-12 14:52:20

2025-04-02 08:21:10

2024-12-02 09:57:43

GormScopesClauses

2023-01-26 00:28:45

前端測試技術(shù)

2022-12-08 19:27:38

2024-09-26 09:10:08

2024-01-02 12:05:26

Java并發(fā)編程

2023-08-01 12:51:18

WebGPT機器學(xué)習(xí)模型

2023-09-07 07:13:51

2023-01-10 08:43:15

定義DDD架構(gòu)

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-07-26 13:11:21

ChatGPT平臺工具

2024-01-19 08:25:38

死鎖Java通信

2022-12-08 10:49:43

2024-02-21 19:02:05

Go模板化方式

2022-06-16 07:50:35

數(shù)據(jù)結(jié)構(gòu)鏈表

2022-12-06 07:53:33

MySQL索引B+樹

2023-07-30 22:29:51

BDDMockitoAssert測試

2023-10-06 14:49:21

SentinelHystrixtimeout

2024-02-02 11:03:11

React數(shù)據(jù)Ref
點贊
收藏

51CTO技術(shù)棧公眾號