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

如何使用Hashicorp工具創(chuàng)建安全的邊緣基礎(chǔ)設(shè)施

譯文
開發(fā) 前端 應(yīng)用安全
本文是將Consul、Nomad和Vault的所有部分粘合在一起所需的分步教程。

譯者 | 李睿

審校 | 重樓?

本文解釋了如何使用HashiCorp的堆棧構(gòu)建一個(gè)安全的平臺(tái);許多步驟都有良好的文檔記錄。我們將詳細(xì)強(qiáng)調(diào)最關(guān)鍵的部分,解釋在哪里發(fā)現(xiàn)問題以及如何解決問題,并在官方教程中保留參考資料,以防止本文過長且難以理解。?

物理架構(gòu)

如下圖所示,我們想要實(shí)現(xiàn)的物理架構(gòu)由五個(gè)節(jié)點(diǎn)的Consul和Nomad集群組成:其中三個(gè)是配置為高可用性(HA)的控制平臺(tái)節(jié)點(diǎn),其余兩個(gè)是數(shù)據(jù)平臺(tái)節(jié)點(diǎn)。 ?

考慮到我們處于邊緣環(huán)境,安裝集群服務(wù)器的最終位置至關(guān)重要:?

  • 控制平臺(tái)節(jié)點(diǎn)(服務(wù)器)分布在展會(huì)展館或安裝在主樓的專用機(jī)柜上。 ?
  • 數(shù)據(jù)平臺(tái)節(jié)點(diǎn)(客戶端)位于每個(gè)展館。 ?

在默認(rèn)情況下,服務(wù)器的角色是維護(hù)集群的狀態(tài),而客戶機(jī)則為物理上位于群集附近的用戶提供服務(wù)。?

基本要求及節(jié)點(diǎn)部署

在自動(dòng)化和虛擬化時(shí)代,繼續(xù)前進(jìn)的方法是創(chuàng)建一個(gè)“測(cè)試并銷毀”虛擬化環(huán)境,以便在進(jìn)入生產(chǎn)環(huán)境之前嘗試配置,并在物理基礎(chǔ)設(shè)施上部署所有內(nèi)容。?

DevOps工具箱由Ansible、Terraform和Git等工具組成,在構(gòu)建如此復(fù)雜的環(huán)境的過程中,它一直是一個(gè)嚴(yán)格的配置和流程要求。Ansible Vault是我們的選擇,以確保與特定環(huán)境相關(guān)的敏感內(nèi)容(如密碼、密鑰、配置變量和引導(dǎo)令牌或TLS證書)受到保護(hù)和加密,而不是以純文本形式從我們存儲(chǔ)用于構(gòu)建基礎(chǔ)設(shè)施的代碼的Git存儲(chǔ)庫中可見。 ?

我們首先創(chuàng)建五臺(tái)虛擬機(jī)。對(duì)于測(cè)試使用了以下規(guī)范:?

  • 操作系統(tǒng):Ubuntu 22.04 LTS?
  • 磁盤20GB ?
  • 內(nèi)存:2GB ?
  • vCPU2?

用戶可以選擇其喜歡的公共云提供商,在那里部署大量的虛擬機(jī)與Terraform?;蛘?,為了加快部署過程,可以使用VirtualBox和Vagrant在他們的筆記本電腦上創(chuàng)建它們,但最終,將得到一個(gè)與此類似的Ansible清單:?

YAML
all:
children:
cluster_role_server:
hosts:
node-1:
node-2:
node-3:
cluster_role_client:
hosts:
node-4:
vars:
placement: "pavilion-1"
node-5:
vars:
placement: "pavilion-2"

配置Consul和Nomad集群

在這個(gè)引導(dǎo)階段,開源Ansible社區(qū)提供了一個(gè)經(jīng)過廣泛測(cè)試的、安全的公共劇本。得益于Ansible Galaxy實(shí)用程序,我們可以提取兩個(gè)角色的代碼,分別部署Consul和Nomad。 ?

我們將上述角色制作成一個(gè)專有的劇本,首先,使用虛擬網(wǎng)絡(luò)接口配置和設(shè)置服務(wù)器網(wǎng)絡(luò)。該接口映射到保留IP地址169.254.1.1,用于解析集群中的*.consol域名,我們稱其為dummy0接口。我們依靠Ansible在目標(biāo)節(jié)點(diǎn)上配置它,最后,我們將在每臺(tái)服務(wù)器上有以下文件:/etc/systemd/network/dummy0.network::?

Shell
[Match]
Name=dummy0

[Network]
Address=169.254.1.1/32

# We want these domains
Domains=~consul.

# To go to the consul DNS server we'll bind to this address
DNS=169.254.1.1

此外,公共劇本還在服務(wù)器上配置了一些基本的自定義,比如更新操作系統(tǒng)、設(shè)置節(jié)點(diǎn)用戶導(dǎo)入相關(guān)的SSH authorized_keys、安裝容器運(yùn)行時(shí)以及一些調(diào)試CLI工具。 ?

最后,應(yīng)該通過設(shè)置適當(dāng)?shù)腁nsible變量來注意配置Consul和Nomad角色。它們的大多數(shù)名稱是不言自明的,但是必須指定consul_version和nomad_version(在本例中分別為1.12.2和1.2.8)。三個(gè)客戶機(jī)節(jié)點(diǎn)應(yīng)該使用consul_node_role和nomad_node_role變量,而其他節(jié)點(diǎn)應(yīng)該使用服務(wù)器變量。另一個(gè)需要設(shè)置的有用變量是nomad_cni_enable:true,否則,將不得不人工在任何Nomad節(jié)點(diǎn)上安裝CNI。?

通過這種方式,我們還能夠以最小的工作量支持不同環(huán)境庫存的快速供應(yīng)和部署,從生產(chǎn)裸服務(wù)器或邊緣的cloudlet到在云中開發(fā)和測(cè)試虛擬機(jī)?

配置Vault群集

此時(shí),我們已經(jīng)為Consul+Nomad集群做好了準(zhǔn)備,應(yīng)該能夠訪問各自的用戶界面(UI)并啟動(dòng)一些測(cè)試工作負(fù)載。如果一切正常,那么就是配置Vault集群的時(shí)候了。為了簡單起見,它將被安裝在運(yùn)行Nomad和Consul控制平臺(tái)的高可用性(HA)服務(wù)器節(jié)點(diǎn)上。 ?

如果是Vault初學(xué)者,可以從這里開始進(jìn)行嘗試,然后可以移動(dòng)到Ansible Vault角色來安裝這個(gè)組件,但是在進(jìn)入劇本之前,需要一些人工步驟來為我們的Vault集群引導(dǎo)PKI。 ?

如果企業(yè)提供現(xiàn)有的PKI配置,可以依賴它。這里,我們將從頭開始,創(chuàng)建根證書(CA)頒發(fā)機(jī)構(gòu)和證書。 ?

首先,創(chuàng)建根密鑰(這是CA私鑰,可用于簽署證書請(qǐng)求),然后使用根密鑰創(chuàng)建需要分發(fā)給所有必須信任客戶端的根證書可以根據(jù)需要調(diào)整-days標(biāo)志的值。 ?

Shell 
openssl genrsa -aes256 -out rootCA.key 4096
openssl req -x509 -new -key rootCA.key -sha256 -days 1024 -out rootCA.crt

必須在提示符上自定義字段,例如,使用如下內(nèi)容:C=IT, O=CompanyName, CN=company.com/emailAddress=example@company.com,并可選地檢查根CA證書:?

Shell 
openssl x509 -in rootCA.crt -text

此時(shí),我們需要為每個(gè)服務(wù)器、設(shè)備或應(yīng)用程序創(chuàng)建證書,這些服務(wù)器、設(shè)備或應(yīng)用程序需要通過CA信任的證書公開TLS加密的服務(wù)。在本例中,我們將把該證書分配給Vault集群,因此將在每個(gè)Vault節(jié)點(diǎn)上使用相同的證書。?

Shell
openssl genrsa -out vault.key 4096
# create the Certificate Signing Request (csr)
openssl req -new -sha256 \
-key vault.key \
-subj "/C=IT/ST=TN/O=Tofane/CN=vault.service.consul" \
-out vault.csr
# finally verify the CSR's content
openssl req -in vault.csr -noout -text

要完成這一過程,使用所有可選名稱(可以是URL或IP)創(chuàng)建一個(gè)extfile;在本例中,使用每個(gè)Vault節(jié)點(diǎn)的IP,然后使用CSR和密鑰以及CA根密鑰生成證書。?

Shell 
echo "subjectAltName=DNS:*.vault.service.consul,IP:10.231.0.72,IP:10.231.0.71,IP:10.231.0.73" >> extfile.cnf
# optionally, if you want to use the csr also for authentication
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl x509 -req -in vault.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out vault.crt -extfile extfile.cnf -days 365 -sha256
# verify the certificate content
openssl x509 -in vault.crt -text -noout

除其他次要文件外,現(xiàn)在應(yīng)確保在當(dāng)前工作文件夾中包含以下生成的文件:?

rootCA.crt 
vault.crt
vault.key

PKI文件必須通過專用變量傳遞給Ansible角色以及下面建議的一些其他配置,然后通過將Vault角色分配給服務(wù)器節(jié)點(diǎn)來啟動(dòng)Vault配置。?

YAML 
vault_backend: consul
vault_consul: 169.254.1.1:8500
vault_iface: "{{ ansible_default_ipv4.interface }}"
vault_listener_localhost_enable: true
vault_tls_disable: 0
vault_tls_src_files: "ANSIBLE_RELATIVE_PATH_TO_YOUR_CERT_FILES"
vault_tls_cert_file: "vault.crt"
vault_tls_key_file: "vault.key"
vault_tls_ca_file: "rootCA.crt"

如果使用自簽名CA,還需要一個(gè)步驟:必須將其復(fù)制并安裝到每個(gè)節(jié)點(diǎn)中,可以通過以下方法輕松完成此任務(wù):?

Shell
sudo cp rootCA.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

最后,初始化Vault集群,打開它,使用初始化階段返回的令牌登錄,并檢查它的狀態(tài);如果一切正常,那么轉(zhuǎn)到下一個(gè)陷阱:在新的集群上啟用和配置TLS。?

Shell 
vault operator init
vault operator unseal
vault login
vault status

配置TLS

在本節(jié)中,將詳細(xì)介紹為在集群中運(yùn)行的基礎(chǔ)設(shè)施組件(例如Consul和Nomad代理)和應(yīng)用程序容器啟用安全集群通信的過程。因此,我們將在mTLS驗(yàn)證之上,使用TLS加密和服務(wù)驗(yàn)證來保護(hù)Consul Agent通信。這可以使用從Vault集群生成的證書來完成;此外,在本例中,證書將在服務(wù)器上通過Consul Template分發(fā),在客戶端通過自動(dòng)加密方法分發(fā)。 ?

需求

所有與證書更新和Consul、Nomad代理以及Vault之間的輪換相關(guān)的秘訣都掌握在Consul Template所需的組件中??梢苑窒硪幌翯itHub頁面的參考,并簡要地給一些關(guān)于如何安裝和配置它的提示,因?yàn)榈侥壳盀橹?,在網(wǎng)上找不到完整的指南: ?

在每個(gè)集群節(jié)點(diǎn)的主節(jié)點(diǎn)中下載并解壓縮二進(jìn)制文件?

Shell 
ansible all -m shell -a 'sudo apt-get install unzip; CT_V=0.29.0; \
curl -O https://releases.hashicorp.com/consul-template/${CT_V}/consul-template_${CT_V}_linux_amd64.zip; \
unzip consul-template_${CT_V}_linux_amd64.zip; \
sudo mv consul-template /usr/local/bin/'

在systemd的每個(gè)節(jié)點(diǎn)上創(chuàng)建單元文件:?

Shell 
ansible all -m shell -a "sudo bash -c 'cat <<EOF > /etc/systemd/system/consul-template.service
[Unit]
Descriptinotallow=consul-template
Documentatinotallow=https://github.com/hashicorp/consul-template
Wants=network-online.target
After=network-online.target

[Service]
Envirnotallow=/etc/environment
ExecStart=/usr/local/bin/consul-template -config /etc/consul-template.d
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
KillSignal=SIGINT
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

EOF '"

最后,將其提升為systemd下的系統(tǒng)服務(wù),并為consul-template配置文件創(chuàng)建一個(gè)文件夾。?

Shell 
ansible all -m shell -a "sudo systemctl daemon-reload"
ansible all -m shell -a \
'sudo mkdir -p /etc/consul-template.d; \
sudo chgrp consul /etc/consul-template.d'

Consul模板的主框架現(xiàn)在準(zhǔn)備好了。在接下來的步驟中,需要做的就是為每個(gè)請(qǐng)求證書輪換的服務(wù)創(chuàng)建配置文件和模板文件。?

配置Consul TLS和Consul Connect

可以很容易地遵循下面的循序漸進(jìn)的教程,這些教程非常詳細(xì),只需要針對(duì)具體情況進(jìn)行微小而明顯的調(diào)整:?

  • 配置Vault的PKI機(jī)密引擎。 ?
  • 配置Vault為Consul的CA,在每個(gè)節(jié)點(diǎn)上安裝Consul中間CA。?
  • 生成服務(wù)器證書。?

現(xiàn)在,在繼續(xù)Consul配置之前,我們需要啟用和配置Consul Connect功能,為此,我們首先需要啟用Vault作為Consul Connect認(rèn)證機(jī)構(gòu)提供商:Consul Connect創(chuàng)建的服務(wù)網(wǎng)格網(wǎng)絡(luò)中使用的證書將由Vault生成和管理。跳轉(zhuǎn)到以下教程,并確保選擇“自我管理”選項(xiàng)卡下的說明:Vault作為領(lǐng)事服務(wù)網(wǎng)格認(rèn)證機(jī)構(gòu)提供商。?

此時(shí),需要通過以下方式配置Consul:首先在/opt/consult/agent certs/下的客戶端和服務(wù)器上分發(fā)引導(dǎo)證書,然后使用update-ca-certificates實(shí)用程序?qū)onsul中間CA安裝到每個(gè)節(jié)點(diǎn)中,其方法與我們?cè)谏弦还?jié)中對(duì)Vault CA所做的類似。對(duì)于這些步驟,可以輕松地遵循Configure Consul教程。?

現(xiàn)在已經(jīng)在節(jié)點(diǎn)上分發(fā)了引導(dǎo)證書,可以通過將Consul配置分別放置在/etc/Consul中的服務(wù)器和客戶端上。首先在服務(wù)器上啟用TLS,然后在客戶端上啟用TLS。d/folder并重新啟動(dòng)Consul代理。?

enable-tls-server.hcl
YAML
1 verify_incoming = true
2 verify_outgoing = true
3 verify_server_hostname = true
4 ca_file = "/opt/consul/agent-certs/ca.crt"
5 cert_file = "/opt/consul/agent-certs/agent.crt"
6 key_file = "/opt/consul/agent-certs/agent.key"
7
8 auto_encrypt {
9 allow_tls = true
10 }enable-tls-client.hcl
enable-tls-client.hcl
YAML 
verify_incoming = false
verify_outgoing = true
verify_server_hostname = true
ca_file = "/opt/consul/agent-certs/ca.crt"
auto_encrypt {
tls = true
ip_san = ["169.254.1.1"]
}

在每個(gè)節(jié)點(diǎn)上重新啟動(dòng)Consul代理,TLS上的API應(yīng)位于https://169.254.1.1:8501,但仍然需要通過Consul模板配置證書續(xù)訂,并設(shè)置mTLS身份驗(yàn)證。

配置Consul模板頁面將指導(dǎo)設(shè)置模板文件,這里應(yīng)該注意一個(gè)小細(xì)節(jié):鑒于在我們的集群中,Consul代理正在監(jiān)聽特殊的dummy0接口,我們需要通過模板機(jī)制創(chuàng)建適當(dāng)?shù)淖C書,在每個(gè)模板文件中添加自定義的ip_sans。為方便起見,以下是服務(wù)器代理證書的模板示例:?

Plain Text 
{{ with secret "pki_consul_int/issue/consul-tofane" "common_name=server.tofane.consul" "ttl=24h" "alt_names=localhost" "ip_sans=169.254.1.1"}}
{{ .Data.certificate }}
{{ end }}

最后,只需要?jiǎng)?chuàng)建一個(gè)consul-template配置文件,這里唯一的建議是對(duì)服務(wù)器節(jié)點(diǎn)使用address="http://localhost:8200"和address="https://active.vault.service。Consul:客戶節(jié)點(diǎn)為8200英寸。通過這種方式,服務(wù)器將擁有更穩(wěn)定的配置,因?yàn)樵贑onsul無法工作和DNS解析不可用的情況下,與Vault的通信也可以工作。 ?

要執(zhí)行最終檢查TLS證書輪換是否按預(yù)期工作,應(yīng)該等待24小時(shí),等待在Vault中創(chuàng)建證書時(shí)選擇的TTL。測(cè)試每個(gè)節(jié)點(diǎn)上已覆蓋的證書可以用這個(gè)相當(dāng)簡單的Ansible命令完成?

Shell 
Ansibleall-mshell-a'sudols-la/opt/consul/agent-certs/'

此外,還可以使用OpenSSL,檢查RPC或API端口上使用的證書。?

Shell 
openssl s_client -connect $CONSUL_NODE_LAN_IP:8300 2>/dev/null | less
openssl s_client -connect 169.254.1.1:8501 2>/dev/null | less

最后,嘗試使用來自服務(wù)器節(jié)點(diǎn)的正確證書在API上進(jìn)行連接。?

Shell 
consul members -http-addr="https://169.254.1.1:8501" \
-ca-file="/opt/consul/agent-certs/ca.crt" \
-client-cert="/opt/consul/agent-certs/agent.crt" \
-client-key="/opt/consul/agent-certs/agent.key"

配置Nomad TLS

將Nomad配置為使用TLS的過程非常簡單,因?yàn)槲覀冃枰獔?zhí)行與Consul配置相同的步驟。供參考的官方教程是使用Vault為Nomad生成mTLS證書,我們將在下面描述一些將省去一些麻煩的調(diào)整。?

首先,就像我們?yōu)镃onsul所做的那樣,在Consul模板中,我們需要添加ip_sans,但在這種情況下,我們還需要添加127.0.0.1,因?yàn)镹omad也將在該接口上從服務(wù)(例如:Nomad Autoscaler)聯(lián)系。以下是我們的例子:?

Plain Text
{{ with secret "pki_nomad_int/issue/nomad-cluster" "common_name=server.global.nomad" "ttl=24h" "alt_names=localhost" "ip_sans=127.0.0.1,169.254.1.1"}}
{{ .Data.certificate }}
{{ end }}

值得注意的是,Nomad的Consul模板配置可以附加到現(xiàn)有的配置文件中,因?yàn)槲覀円呀?jīng)將其用于Consul了。?

假設(shè)Consul Template將用于從不同的Vault路徑檢索Consul和Nomad證書,最好創(chuàng)建一個(gè)新策略,并創(chuàng)建一個(gè)具有這兩種權(quán)限的新令牌。?

Shell 
vault token create -policy=nomad -policy=connect-ca

當(dāng)然,這個(gè)令牌必須在每個(gè)節(jié)點(diǎn)上的Consul Template配置文件中替換。 ?

就像我們?yōu)镃onsul所做的那樣,為了方便,我們共享了應(yīng)該放在/etc/nomad中的文件。d/以便在服務(wù)器節(jié)點(diǎn)上啟用NomadTLS。對(duì)于客戶機(jī)節(jié)點(diǎn),只需刪除最后一行。 ?

enable-tls-server.hcl
YAML
tls {
http = true
rpc = true

ca_file = "/opt/nomad/agent-certs/ca.crt"
cert_file = "/opt/nomad/agent-certs/agent.crt"
key_file = "/opt/nomad/agent-certs/agent.key"

verify_server_hostname = true
verify_https_client = true

rpc_upgrade_mode = true
}

當(dāng)?shù)谝淮沃匦录虞dNomad代理時(shí),記住在服務(wù)器節(jié)點(diǎn)上將rpc_upgrade_mode選項(xiàng)更改為false,以便Nomad服務(wù)器將只接受TLS連接,然后再次重新啟動(dòng)服務(wù)。?

Shell
ansible core_cluster_role_server -m shell -a \ 'sudo sed -i "s/rpc_upgrade_mode = true/rpc_upgrade_mode = false/g" /etc/nomad.d/enable-tls-server.hcl'
ansible core_cluster_role_server -m shell -a \ 'sudo systemctl restart nomad'

只需要幾個(gè)步驟就可以完全完成Nomad配置:i)允許訪問webUI,ii)啟用邊車使用TLS,以及iii)測(cè)試是否一切都按預(yù)期工作。 ?

啟用TLS時(shí),為了訪問Web-UI,需要在服務(wù)器上將verify_https_client設(shè)置為false,并重新啟動(dòng)nomad服務(wù)。要了解更多信息,發(fā)現(xiàn)這篇文章非常有用。?

Shell
ansible core_cluster_role_server -m shell -a \
'sudo sed -i "s/verify_https_client = true/verify_https_client = false/g" /etc/nomad.d/enable-tls-server.hcl; \
sudo systemctl restart nomad'

現(xiàn)在應(yīng)該能夠連接到https://localhost:4646/ui,但是要記住的是,對(duì)于生產(chǎn)環(huán)境,應(yīng)該使用Vault根CA配置其瀏覽器,以便提供受支持的對(duì)等身份驗(yàn)證。?

第二步是讓邊車使用Consul connect提供的TLS保護(hù)網(wǎng)格:為了初始化TLS保護(hù)網(wǎng)格中的通道,Nomad需要與Consul通信,并在邊車中注入正確的證書,以建立受保護(hù)的連接。?

為此,更新/etc/nomad.d/base.中的Nomad配置并允許Nomad通過TLS與Consul API通信,添加以下行:?

Shell 
address = "169.254.1.1:8501"
ssl = true ca_file = "/opt/consul/agent-certs/ca.crt"
cert_file = ""
key_file = ""

希望是到了最后的測(cè)試階段。實(shí)際上,如果輸入了nomad status命令,會(huì)收到一個(gè)錯(cuò)誤消息,因?yàn)樾枰_配置CLI。?

導(dǎo)出端點(diǎn)和證書變量:?

Shell
export NOMAD_ADDR=https://localhost:4646
export NOMAD_CACERT="/opt/nomad/agent-certs/ca.crt"
export NOMAD_CLIENT_CERT="/opt/nomad/cli-certs/cli.crt"
export NOMAD_CLIENT_KEY="/opt/nomad/cli-certs/cli.key"

最后,通過TLS再次檢查狀態(tài),nomadstatus命令現(xiàn)在應(yīng)該無縫工作了。 ?

配置Consul ACL

下面的最后一步將在我們的集群上啟用Consul訪問控制列表系統(tǒng)。該任務(wù)的主要參考資料是HashiCorp關(guān)于引導(dǎo)ACL系統(tǒng)的教程 ?

啟用ACL

在啟用ACL系統(tǒng)的過程中,遇到了一個(gè)小問題,如果多個(gè)節(jié)點(diǎn)同時(shí)處于活動(dòng)狀態(tài),則無法引導(dǎo)它。小問題可以用簡單的解決方案解決:為什么不在啟用ACL之前暫時(shí)將集群縮小到一個(gè)節(jié)點(diǎn)?作為“懶惰的開發(fā)人員”,所以一個(gè)粗糙但有效的bash循環(huán)和SSH幫助我們做到了這一點(diǎn):?

Shell
# server nodes
S_L="node-1 node-2 node-3"
# client nodes
C_L="node-4 node-5"

for i in ${S_L#* } $C_L;
do echo "R $i"
ssh -t $i consul leave
done

現(xiàn)在復(fù)制以下Consul HCL配置文件,然后將ACL引導(dǎo)到單節(jié)點(diǎn)Consul集群中:?

enable-acl.hcl
YAML
acl = {
enabled = true
#default_policy = "deny"
default_policy = "allow"
enable_token_persistence = true
}
Shell
1 FIRST=node-1
2 echo "R $FIRST"
3 scp enable-acl.hcl $FIRST:/var/tmp/enable-acl.hcl
4 ssh $FIRST sudo install --owner consul --group consul /var/tmp/enable-acl.hcl /etc/consul.d/enable-acl.hcl
5 ssh -t $FIRST sudo systemctl restart consul.service

Consul將回復(fù)一條成功的消息,并允許我們繼續(xù)保存Consul引導(dǎo)令牌,并通過重新啟動(dòng)Consul代理將其他節(jié)點(diǎn)重新加入原始集群。?

Shell
# save consul bootstrap token
sudo consul acl bootstrap -format json 2>&1 | tee consul-acl-bootstrap.token CONSUL_HTTP_TOKEN=$(cat consul-acl-bootstrap.token | jq -r '.SecretID') export CONSUL_HTTP_TOKEN

# restore cluster nodes
for i in ${S_L#* } $C_L; do
echo "R $i"
scp enable-acl.hcl $i:/var/tmp/enable-acl.hcl
ssh $i sudo install --owner consul --group consul /var/tmp/enable-acl.hcl /etc/consul.d/enable-acl.hcl
ssh -t $i sudo systemctl restart consul.service
done

此時(shí),如果集群中只有服務(wù)器節(jié)點(diǎn)可用(使用:consul成員進(jìn)行檢查),并且看到Vault、Consul和Nomad代理不再工作;這很正常,因?yàn)樗鼈儧]有適當(dāng)?shù)腁CL策略和相對(duì)令牌。按照下面的步驟,將修復(fù)它。 ?

ACL與Vault集成

與Vault的集成非常簡單。只需要從適當(dāng)?shù)腃onsul策略生成一個(gè)令牌,并再次運(yùn)行Ansible Vault角色,在設(shè)置一個(gè)額外的Ansible額外變量后,一次更新所有的節(jié)點(diǎn):?

YAML 
vault_consul_token: "YOUR_TOKEN_HERE"

與Consul和Nomad代理集成ACL

與其他組件的集成可以遵循官方教程按照以下順序輕松完成。?

(1)為Consul節(jié)點(diǎn)和代理創(chuàng)建規(guī)則、策略和令牌。 ?

(2)為用戶界面(UI)創(chuàng)建規(guī)則、策略和令牌。 ?

(3)為DNS創(chuàng)建規(guī)則、策略和令牌為簡單起見,我們只是將這個(gè)策略與點(diǎn)1)處的策略合并,并為下面模板開始的每個(gè)節(jié)點(diǎn)生成: ?

JSON
node "NODE-NAME" {
policy = "write"
}
service_prefix "" {
policy = "read"
}
node_prefix "" {
policy = "read"
}
service_prefix "" {
policy = "read"
}
query_prefix "" {
policy = "read"
}
agent "NODE-NAME" {
policy = "write"
}

(4)為Nomad創(chuàng)建規(guī)則、策略和令牌?

ACL策略完全啟用

現(xiàn)在強(qiáng)制ACL在默認(rèn)情況下拒絕通信,最后在每個(gè)節(jié)點(diǎn)上重新啟動(dòng)Consul。?

Shell
ansible all -m shell -a "\ sudo sed -i \
's/default_policy = \"allow\"/#default_policy = \"allow\"/g' /etc/consul.d/enable-acl.hcl"
ansible all -m shell -a "\ sudo sed -i \
's/#default_policy = \"deny\"/default_policy = \"deny\"/g' /etc/consul.d/enable-acl.hcl"
ansible all -m shell -a "sudo systemctl restart consul"

結(jié)論

此時(shí),基于HashiCorp產(chǎn)品的“安全邊緣基礎(chǔ)設(shè)施”應(yīng)該已經(jīng)啟動(dòng)并運(yùn)行,可以開始安裝首選的工作負(fù)載。在這個(gè)例子中,在這個(gè)部署上安裝了一層中間件,支持負(fù)載平衡、監(jiān)視和自動(dòng)擴(kuò)展等特性。為了實(shí)現(xiàn)最后一個(gè)目標(biāo),我們分別使用Traefik、Prometheus和Nomad自動(dòng)擴(kuò)展器,可以想象,為了讓這些工具在完整的TLS基礎(chǔ)設(shè)施上正常工作,還需要額外的配置,但這將是另一篇文章的主題。 ?

總之,我們分享這項(xiàng)工作的可能演變,我們認(rèn)為這是很自然的:鑒于在跨組件的通信和身份驗(yàn)證方面,基礎(chǔ)設(shè)施被認(rèn)為是相當(dāng)安全的,為什么不將其用作構(gòu)建混合基礎(chǔ)設(shè)施的支柱,其中控制平臺(tái)節(jié)點(diǎn)位于所選擇的云中,而數(shù)據(jù)平臺(tái)服務(wù)器位于邊緣? ?

有了這樣的架構(gòu),將擁有一個(gè)毫無疑問的優(yōu)勢(shì),即能夠通過一個(gè)控制平臺(tái)來控制多個(gè)邊緣站點(diǎn),從而消除開銷,并實(shí)現(xiàn)企業(yè)的規(guī)模經(jīng)濟(jì)。當(dāng)然,應(yīng)該對(duì)系統(tǒng)進(jìn)行適當(dāng)?shù)姆謪^(qū),以支持多租戶,這肯定是下一個(gè)令人興奮的項(xiàng)目。

原文標(biāo)題:??How To Use Hashicorp Tools To Create a Secured Edge Infrastructure??,作者:Daniele Santoro


責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2023-08-04 16:32:18

2015-03-18 14:30:09

2015-05-27 09:03:46

IT基礎(chǔ)設(shè)施IT基礎(chǔ)設(shè)施監(jiān)控

2022-03-02 16:10:55

邊緣計(jì)算智慧城市物聯(lián)網(wǎng)

2021-05-08 13:13:55

智能設(shè)施漏洞攻擊

2021-11-11 08:00:00

邊緣計(jì)算云計(jì)算數(shù)據(jù)

2012-02-27 14:39:48

虛擬化思杰

2022-02-10 11:54:34

即時(shí)基礎(chǔ)設(shè)施基礎(chǔ)設(shè)施數(shù)字化轉(zhuǎn)型

2023-06-16 15:53:55

DevOps基礎(chǔ)設(shè)施

2019-04-01 06:14:05

IT基礎(chǔ)設(shè)施網(wǎng)絡(luò)安全數(shù)字化

2020-04-28 10:21:58

基礎(chǔ)設(shè)施硬件遠(yuǎn)程工作

2019-04-16 11:31:18

2020-10-16 22:05:44

廣域網(wǎng)

2023-05-16 13:46:00

數(shù)據(jù)中心

2021-02-24 15:05:27

云計(jì)算物聯(lián)網(wǎng)邊緣計(jì)算

2022-04-06 15:04:28

網(wǎng)絡(luò)安全基礎(chǔ)設(shè)施

2021-05-17 14:49:40

Kubernetes邊緣設(shè)備

2022-07-18 18:11:33

邊緣計(jì)算人工智能云計(jì)算

2017-05-04 10:56:03

2022-12-15 10:37:07

點(diǎn)贊
收藏

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