成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇學會 HashiCorp Vault 系統

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

是什么

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

為什么

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

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

工作原理

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

Vault 的核心工作流為:

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

功能特性

  • 安全存儲

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

  • 動態秘密

Vault 可為 AWS、SQL 數據庫等系統提供臨時訪問憑據,并在到期后作廢。

  • 加密服務

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

  • 租賃與續租

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

  • 廢棄

Vault 允許主動廢棄單個、相關、特定類型的秘密,實現密鑰輪換或鎖定系統,以防范入侵。

版本

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

開源版需要自托管,提供動態秘密管理、加密和數據保護等基本功能特性,需要通過社區獲得支持。

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

企業版需要自托管,比開源版多了擴展、容災等企業特性,并由HashiCorp提供服務支持。

快速體驗

安裝

# 安裝 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
# 或者安裝企業版
sudo yum -y install vault-enterprise

# 驗證
vault

啟動

# 查看啟動幫助
vault server -help

# 以開發模式啟動,數據仍然加密,但保存在內存中,使用http偵聽,僅用于快速體驗,不能用于生產
vault server -dev

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

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

# 查看服務狀態
vault status

處理鍵值對secret

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

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

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

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

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

引擎

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

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

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

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

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

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

生產模式安裝

建立配置文件

Vault使用HCL文件進行配置,首先創建一個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 是一種適合生產模式的后端存儲。

listener 用于配置偵聽 API 請求的地址,生產環境應啟用 TLS 。

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

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

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

不支持內存鎖定時,需要添加配置:disable_mlock = true

建立raft工作目錄

mkdir -p ./vault/data

啟動服務器

vault server -config=config.hcl

初始化

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

# 設置服務API地址
export VAULT_ADDR='http://127.0.0.1:8200'
# 初始化服務
vault operator init

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

解封

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

vault operator unseal

登錄

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

vault login

其它運維命令

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

使用Transit引擎進行加解密

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

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

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

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

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

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

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


# (管理員)執行如下命令進行密鑰輪換
vault write -f transit/keys/orders/rotate
# (客戶端)再次調用加密服務,此時密文開頭會變為vault: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 為輪換設置,默認值0s表示禁用。
vault read transit/keys/orders

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

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

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

使用數據庫引擎獲得動態憑證

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

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

# 拉取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的容器中執行psql命令,
# 來創建一個名為 ro 的角色,用于完成示例
docker exec -i \
learn-postgres \
psql -U root -c "CREATE ROLE \"ro\" NOINHERIT;"
# 為 ro 角色授予一些權限
docker exec -i \
learn-postgres \
psql -U root -c "GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"ro\";"

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

# (管理員)在Vault中啟用數據庫引擎
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"

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

# (應用程序) 從Vault獲取一個只讀角色
# 返回結果中包括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
#(管理員)使用環境變量保存第一份租約的id
LEASE_ID=$(vault list -format=json sys/leases/lookup/database/creds/readonly | jq -r ".[0]")
# (管理員)續約
vault lease renew database/creds/readonly/$LEASE_ID
# (管理員)在租約到期前主動撤銷
vault lease revoke database/creds/readonly/$LEASE_ID
# (管理員)按照前綴撤銷所有符合條件的租約
vault lease revoke -prefix database/creds/readonly

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

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2022-02-07 11:01:23

ZooKeeper

2022-01-02 08:43:46

Python

2021-07-02 08:51:29

源碼參數Thread

2021-09-28 08:59:30

復原IP地址

2021-10-14 10:22:19

逃逸JVM性能

2022-04-12 08:30:52

回調函數代碼調試

2021-10-27 09:59:35

存儲

2021-07-16 22:43:10

Go并發Golang

2023-03-13 21:38:08

TCP數據IP地址

2023-11-01 09:07:01

Spring裝配源碼

2021-04-29 10:18:18

循環依賴數組

2022-03-11 10:21:30

IO系統日志

2022-10-20 07:39:26

2021-10-29 07:35:32

Linux 命令系統

2021-05-11 08:54:59

建造者模式設計

2021-07-02 09:45:29

MySQL InnoDB數據

2021-07-06 08:59:18

抽象工廠模式

2023-01-03 08:31:54

Spring讀取器配置

2022-08-26 09:29:01

Kubernetes策略Master

2023-11-28 08:29:31

Rust內存布局
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本视频在线 | 亚洲精品视频导航 | 一区二区三区视频在线免费观看 | 国产欧美精品在线 | 中文字幕91 | 国内精品久久久久 | 国产精品视频一 | 国产精品久久久久久久久久免费看 | 91 久久 | 毛片网站免费观看 | 91精品国产91久久久久青草 | 国产一级片精品 | 久草中文在线观看 | 成人免费大片黄在线播放 | 一级视频黄色 | av网站免费在线观看 | 一区二区三区视频 | 毛片.com| 久久av影院| 久久天堂 | 一区二区三区国产精品 | 欧美精品一区二区三区蜜臀 | 国产精品一区二区三 | 亚洲精品视频一区 | 一区二区在线 | 中文字幕成人免费视频 | a中文在线视频 | 香蕉一区| 97精品国产 | 福利片在线观看 | 91精品国产91久久久久久吃药 | 亚洲日韩欧美一区二区在线 | 色婷婷久久久久swag精品 | 久久久久黄色 | 亚洲国产精品久久久久秋霞不卡 | 日韩中文在线观看 | 成人在线视频免费观看 | 国产高清在线精品一区二区三区 | 无码日韩精品一区二区免费 | 国产一区二区自拍 | 日韩在线播放第一页 |