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

一篇學(xué)會 HashiCorp Vault 系統(tǒng)

安全 應(yīng)用安全
云托管版本,名為 HCP Vault(HashiCorp Cloud Platform Vault),與自托管 Vault 具有相同的二進制文件,在保證一致用戶體驗的同時,允許組織快速使用 Vault。

是什么

HashiCorp Vault 是一個用于管理密碼、密鑰和證書等秘密的系統(tǒng),同時還可提供有身份認證和授權(quán)保護的加密服務(wù)。利用 Vault 提供的UI、CLI或HTTP API,可以在嚴格的控制和審計下安全地存儲和管理敏感數(shù)據(jù)。

為什么

在現(xiàn)代系統(tǒng)中,需要諸如數(shù)據(jù)庫訪問憑證、外部API訪問密鑰、服務(wù)間調(diào)用憑證等多種大量秘密信息,這些信息分散存儲在純文本、配置文件、源代碼或其他位置。如果沒有專門的解決方案,僅靠散落在各平臺自身的機制,很難弄清楚誰在訪問哪些密鑰,很難做好安全存儲、密鑰輪換和安全審計等工作。

Vault 通過將所有這些憑據(jù)集中起來,在一個地方定義,減少了不必要的暴露,并提供了訪問的安全性和審計的方便性。

工作原理

Vault 主要通過與安全策略關(guān)聯(lián)的令牌來控制客戶端對秘密的訪問。安全策略由一組描述路徑及其操作可訪問性的安全規(guī)則組成。令牌可以手動創(chuàng)建并授予客戶端,也可以由客戶端通過登錄自行獲取。。

Vault 的核心工作流為:

  • 客戶端提供身份識別信息
  • Vault 通過 LDAP、GitHub、AppRole 等可信第三方驗證客戶端
  • Vault 將定義好的安全策略關(guān)聯(lián)到令牌,并授予客戶端
  • 客戶端通過令牌訪問秘密

功能特性

  • 安全存儲

Vault 在對秘密數(shù)據(jù)持久存儲之前會對其進行加密,因此其原始存儲也是安全的。

  • 動態(tài)秘密

Vault 可為 AWS、SQL 數(shù)據(jù)庫等系統(tǒng)提供臨時訪問憑據(jù),并在到期后作廢。

  • 加密服務(wù)

Vault 也可以根據(jù)安全團隊定義的加密參數(shù)提供公共的數(shù)據(jù)的加密、解密服務(wù),而不必存儲加解密數(shù)據(jù)。

  • 租賃與續(xù)租

Vault 使用租期管理存儲其中的各種秘密,到期前沒有被續(xù)租的秘密將廢棄。

  • 廢棄

Vault 允許主動廢棄單個、相關(guān)、特定類型的秘密,實現(xiàn)密鑰輪換或鎖定系統(tǒng),以防范入侵。

版本

Vault 共有開源版、云托管版和企業(yè)版3種版本。

開源版需要自托管,提供動態(tài)秘密管理、加密和數(shù)據(jù)保護等基本功能特性,需要通過社區(qū)獲得支持。

云托管版本,名為 HCP Vault(HashiCorp Cloud Platform Vault),與自托管 Vault 具有相同的二進制文件,在保證一致用戶體驗的同時,允許組織快速使用 Vault。

企業(yè)版需要自托管,比開源版多了擴展、容災(zāi)等企業(yè)特性,并由HashiCorp提供服務(wù)支持。

快速體驗

安裝

# 安裝 yum-config-manager 來管理存儲庫。
sudo yum install -y yum-utils
# 使用 yum-config-manager 添加官方的 HashiCorp Linux 存儲庫。
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo

# 安裝
sudo yum -y install vault
# 或者安裝企業(yè)版
sudo yum -y install vault-enterprise

# 驗證
vault

啟動

# 查看啟動幫助
vault server -help

# 以開發(fā)模式啟動,數(shù)據(jù)仍然加密,但保存在內(nèi)存中,使用http偵聽,僅用于快速體驗,不能用于生產(chǎn)
vault server -dev

# 記錄日志中輸出的VAULT_ADDR、Unseal Key、Root Token

# 在一個新終端中進行如下操作
# 留存Unseal Key到某個地方
echo "把這段文字用Unseal Key替換" > unseal.key
# 根據(jù)server啟動日志中的信息設(shè)置環(huán)境變量VAULT_ADDR,表示server的訪問地址
export VAULT_ADDR='http://127.0.0.1:8200'
# 根據(jù)server啟動日志中的信息設(shè)置環(huán)境變量VAULT_TOKEN,表示root訪問令牌
export VAULT_TOKEN="用Root Token替換這段文字"

# 查看服務(wù)狀態(tài)
vault status

處理鍵值對secret

# 查看處理鍵值對的命令幫助
vault kv -help
# 查看put鍵值對命令幫助
vault kv put -help

# 創(chuàng)建一個名為hell、包含foo、excited兩個Key的鍵值對secret。
# 每針對同名secret put一次,其元數(shù)據(jù)中的version就會遞增
vault kv put -mount=secret hello foo=world excited=yes

# 讀取名為hello的鍵值對secret,響應(yīng)中會顯示其元數(shù)據(jù)和鍵值數(shù)據(jù)
vault kv get -mount=secret hello
# 讀取kv中excited鍵的值
vault kv get -mount=secret -field=excited hello
# 以json格式輸出,并使用jq命令提取excited這個key的數(shù)據(jù)
vault kv get -mount=secret -format=json hello | jq -r .data.data.excited

# 刪除名為hello的鍵值對secret
vault kv delete -mount=secret hello

# 恢復(fù)無意刪除的名為hello的secret到第2個版本
vault kv undelete -mount=secret -versions=2 hello

引擎

秘密引擎是 Vault 用于儲存、生成和加解密的插件化的組件,鍵值只是其中一種,其它存儲引擎還有數(shù)據(jù)庫、Transit(加解密服務(wù)引擎)、SSH、Time-baseed OTP、AWS、Consul等,也可以自定義。

# 秘密引擎需要啟用后才能使用。
# 同一種存儲引擎可以在不同的路徑(path)上啟用。
# 開發(fā)模式預(yù)設(shè)啟用了鍵值引擎。
vault secrets enable -path=kv kv

# 啟用秘密引擎的路徑默認為秘密引擎的名稱
vault secrets enable kv

# 以下命令用于列出所有秘密引擎
vault secrets list

# 以下命令使用 path/秘密名稱 的形式設(shè)置名為hello的鍵值數(shù)據(jù)
vault kv put kv/hello target=world

# 以下命令可禁用路徑為kv下的秘密引擎,并刪除關(guān)聯(lián)的秘密和配置
vault secrets disable kv/

生產(chǎn)模式安裝

建立配置文件

Vault使用HCL文件進行配置,首先創(chuàng)建一個HCL配置文件,可以命名為config.hcl。

storage "raft" {
path = "./vault/data"
node_id = "node1"
}

listener "tcp" {
address = "[::]:8200"
cluster_address = "[::]:8201"
tls_cert_file = "/etc/certs/vault.crt"
tls_key_file = "/etc/certs/vault.key"
}


api_addr = "https://127.0.0.1:8200"
cluster_addr = "https://127.0.0.1:8201"
ui = true

storage 指示后端存儲方式,raft 是一種適合生產(chǎn)模式的后端存儲。

listener 用于配置偵聽 API 請求的地址,生產(chǎn)環(huán)境應(yīng)啟用 TLS 。

api_addr 用于備用服務(wù)器向主服務(wù)器重定向客戶端的地址。

cluster_addr 為同一集群下各node互相通信的地址,用于備用服務(wù)器forward客戶端請求到主服務(wù)器,必須使用TLS。

ui用于啟用默認不啟用的Web UI。

不支持內(nèi)存鎖定時,需要添加配置:disable_mlock = true

建立raft工作目錄

mkdir -p ./vault/data

啟動服務(wù)器

vault server -config=config.hcl

初始化

啟動一個新的終端,并執(zhí)行如下命令以初始化服務(wù)器。

# 設(shè)置服務(wù)API地址
export VAULT_ADDR='http://127.0.0.1:8200'
# 初始化服務(wù)
vault operator init

初始化過程會輸出5個解封密鑰和1個root初始Token,需要安全的分發(fā)密鑰,避免一個人持有所有密鑰,以便當(dāng)Vault密封時,至少需要3個密鑰才能解封。

解封

Vault在初始化后,以及每次重啟后,都需要解封才能讀取秘密數(shù)據(jù)。需要在不同的計算機上,分別執(zhí)行如下命令,并各提供一個不同的密鑰,才能完成解封。

vault operator unseal

登錄

使用初始化后獲得的Root令牌登錄Vault服務(wù)。

vault login

其它運維命令

任一運維人員可通過執(zhí)行 vault operator seal 命令再次密封Vault,可以通過執(zhí)行 pgrep -f vault | xargs kill 命令終止 Vault 進程,通過執(zhí)行 rm -r ./vault/data 命令清除 Vault 數(shù)據(jù)。

使用Transit引擎進行加解密

以下演示使用Vault Transit引擎進行數(shù)據(jù)加解密(不存儲)的過程,涉及管理員和客戶端兩個角色。

# (管理員) 以開發(fā)模式及root token啟動 Vault
# 注:生產(chǎn)環(huán)境中,應(yīng)使用具有某些安全策略的其它Token執(zhí)行本任務(wù)
vault server -dev -dev-root-token-id root
# (管理員) 使用環(huán)境變量聲明Vault服務(wù)的地址,方便后續(xù)操作
export VAULT_ADDR=$VAULT_ADDR
# (管理員) 使用環(huán)境變量聲明要使用的令牌,方便后續(xù)操作
export VAULT_TOKEN=root

# (管理員) 啟用transit引擎
vault secrets enable transit
# (管理員) 啟用名為orders的加密環(huán)
vault write -f transit/keys/orders

# (管理員) 為客戶端創(chuàng)建名為app-orders的安全策略
vault policy write app-orders -<<EOF
path "transit/encrypt/orders" {
capabilities = [ "update" ]
}
path "transit/decrypt/orders" {
capabilities = [ "update" ]
}
EOF
# (管理員)為app-orders安全策略創(chuàng)建一個令牌
vault token create -policy=app-orders

# (客戶端)使用環(huán)境變量存儲管理員分配的令牌
export APP_ORDER_TOKEN="hvs.CAESIOVYYt5Cq5E0zZX3QVHEv5EYj94pGkGipUX48rI_f2wFGh4KHGh2cy5kdlhPSEhyR2pLa0hlODQwRDVkMzVuMWE"

# (客戶端)對明文base64編碼后,再調(diào)用Vault服務(wù)進行加密
VAULT_TOKEN=$APP_ORDER_TOKEN vault write transit/encrypt/orders \
plaintext=$(base64 <<< "4111 1111 1111 1111")

# (客戶端)調(diào)用Vault服務(wù)對密文進行解密
VAULT_TOKEN=$APP_ORDER_TOKEN vault write transit/decrypt/orders \
ciphertext="vault:v1:cZNHVx+sxdMErXRSuDa1q/pz49fXTn1PScKfhf+PIZPvy8xKfkytpwKcbC0fF2U="
# (客戶端)對解密后的文本進行base64解碼
base64 --decode <<< "NDExMSAxMTExIDExMTEgMTExMQo="


# (管理員)執(zhí)行如下命令進行密鑰輪換
vault write -f transit/keys/orders/rotate
# (客戶端)再次調(diào)用加密服務(wù),此時密文開頭會變?yōu)関ault:v2
vault write transit/encrypt/orders \
plaintext=$(base64 <<< "4111 1111 1111 1111")
# (客戶端)使用新密鑰包裝舊密文。Vault會自行先解密再用新密鑰加密。
vault write transit/rewrap/orders \
ciphertext="vault:v1:cZNHVx+sxdMErXRSuDa1q/pz49fXTn1PScKfhf+PIZPvy8xKfkytpwKcbC0fF2U="

# (管理員)啟用密鑰的24小時自動輪換
vault write transit/keys/orders/config \
auto_rotate_period=24h
# (管理員) 查看密鑰信息,其中 auto_rotate_period 為輪換設(shè)置,默認值0s表示禁用。
vault read transit/keys/orders

# (管理員) 設(shè)置最小可解密密鑰版本,默認從1開始所有版本的密鑰均可以解密
vault write transit/keys/orders/config \
min_decryption_version=5

# (管理員)導(dǎo)出密鑰(包括明文和密文),密文可以保存到Vault的鍵值引擎,
# 用于在Vault外對大文件進行加解密
vault write -f transit/datakey/plaintext/orders

# (管理員)導(dǎo)入一個已有的外部密鑰
vault read -field=public_key transit/wrapping_key

使用數(shù)據(jù)庫引擎獲得動態(tài)憑證

以下演示使用Vault的數(shù)據(jù)庫引擎來管理數(shù)據(jù)庫訪問憑證,涉及管理員和應(yīng)用程序兩個角色。

# 首先做一些準備工作,本例中使用docker方式啟動一個postgres數(shù)據(jù)庫實例

# 拉取postgres的docker鏡像
docker pull postgres:latest
# 啟動 postgres 容器
docker run \
--detach \
--name learn-postgres \
-e POSTGRES_USER=root \
-e POSTGRES_PASSWORD=rootpassword \
-p 5432:5432 \
--rm \
postgres

# 通過docker在名為learn-postgres的容器中執(zhí)行psql命令,
# 來創(chuàng)建一個名為 ro 的角色,用于完成示例
docker exec -i \
learn-postgres \
psql -U root -c "CREATE ROLE \"ro\" NOINHERIT;"
# 為 ro 角色授予一些權(quán)限
docker exec -i \
learn-postgres \
psql -U root -c "GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"ro\";"

#--------以下進入正式環(huán)節(jié)-----
# (管理員)以dev模式啟動一個Vault服務(wù),方便演示
vault server -dev -dev-root-token-id root
# (管理員)設(shè)置環(huán)境變量,方便后續(xù)操作
export VAULT_ADDR=http://127.0.0.1:8200
export VAULT_TOKEN=root
export POSTGRES_URL=127.0.0.1:5432

# (管理員)在Vault中啟用數(shù)據(jù)庫引擎
vault secrets enable database
# (管理員) 配置 postgreql-database-plugin,包括連接信息
# connection_url支持以,分割的多個實例,插件將依次嘗試連接
vault write database/config/postgresql \
plugin_name=postgresql-database-plugin \
connection_url="postgresql://{{username}}:{{password}}@$POSTGRES_URL/postgres?sslmode=disable" \
allowed_roles=readonly \
username="root" \
password="rootpassword"

# (管理員)創(chuàng)建一個可在postgres中建立角色的sql模板
tee readonly.sql <<EOF
CREATE ROLE "{{name}}" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}' INHERIT;
GRANT ro TO "{{name}}";
EOF
# (管理員)創(chuàng)建名為readonly的數(shù)據(jù)庫角色,創(chuàng)建語句將使用上面的sql模板
vault write database/roles/readonly \
db_name=postgresql \
creation_statements=@readonly.sql \
default_ttl=1h \
max_ttl=24h

# (應(yīng)用程序) 從Vault獲取一個只讀角色
# 返回結(jié)果中包括username、password,以及租約id和租期等信息
vault read database/creds/readonly

# 可使用如下命令驗證獲得的角色是否存在
docker exec -i \
learn-postgres \
psql -U root -c "SELECT usename, valuntil FROM pg_user;"


# (管理員)列出所有租約
vault list sys/leases/lookup/database/creds/readonly
#(管理員)使用環(huán)境變量保存第一份租約的id
LEASE_ID=$(vault list -format=json sys/leases/lookup/database/creds/readonly | jq -r ".[0]")
# (管理員)續(xù)約
vault lease renew database/creds/readonly/$LEASE_ID
# (管理員)在租約到期前主動撤銷
vault lease revoke database/creds/readonly/$LEASE_ID
# (管理員)按照前綴撤銷所有符合條件的租約
vault lease revoke -prefix database/creds/readonly

Vault還提供數(shù)據(jù)庫用戶名模板、密碼策略等功能。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2022-01-02 08:43:46

Python

2022-02-07 11:01:23

ZooKeeper

2023-01-03 08:31:54

Spring讀取器配置

2021-05-11 08:54:59

建造者模式設(shè)計

2021-07-05 22:11:38

MySQL體系架構(gòu)

2021-07-06 08:59:18

抽象工廠模式

2022-08-26 09:29:01

Kubernetes策略Master

2023-11-28 08:29:31

Rust內(nèi)存布局

2021-07-02 09:45:29

MySQL InnoDB數(shù)據(jù)

2022-08-23 08:00:59

磁盤性能網(wǎng)絡(luò)

2021-07-02 08:51:29

源碼參數(shù)Thread

2021-07-16 22:43:10

Go并發(fā)Golang

2021-09-28 08:59:30

復(fù)原IP地址

2022-04-12 08:30:52

回調(diào)函數(shù)代碼調(diào)試

2022-10-20 07:39:26

2021-10-27 09:59:35

存儲

2022-03-11 10:21:30

IO系統(tǒng)日志

2023-03-13 21:38:08

TCP數(shù)據(jù)IP地址

2021-10-29 07:35:32

Linux 命令系統(tǒng)

2021-10-14 10:22:19

逃逸JVM性能
點贊
收藏

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