預計完成時間:1 天
可操作的元件擁有者:VULN
技能設定檔:部署工程師
上次更新時間:2025 年 8 月 18 日
Nessus 是 Google Distributed Cloud (GDC) 實體隔離環境支援和作業系統的安全掃描器。有助於營運中心團隊監控及因應硬體和軟體中的安全漏洞。
本文說明部署 Nessus 的步驟,並假設操作人員是從 OC 工作站執行步驟,且該工作站同時提供 PowerShell 和 WSL。
33.1. 事前準備
需要存取權
- 請按照 IAM-R0005 中的步驟操作:
- 在根管理員叢集中取得
clusterrole/tenable-nessus-admin-root叢集角色。 - 在根管理員叢集的
gpc-system命名空間中取得role/system-artifact-management-admin角色。
- 在根管理員叢集中取得
- 請按照 IAM-R0005 中的步驟操作:
所需工具
- kubectl
- gdcloud
- helm
- yq
- docker
授權
- 一個 Nessus 授權
- 請按照 NES-G0004 - How to perform Nessus license preactivation 的說明,準備「GDCH 1」預先啟用套件
- 一個 Nessus 授權
33.1.1. 最佳做法
33.1.1.1. 升級
如要從 1.14 之前的版本升級,請先按照本指南各主要章節的「選用:解除安裝」部分操作,再執行任何安裝作業。
如有任何重新安裝作業,請按照本指南各主要章節的「選用:解除安裝」部分操作。
33.1.1.2. 處理機構和區域之間的版本差異
機構和區域之間的版本差異不應造成任何問題。請根據貴機構的版本,按照特定步驟操作。每個部署作業都會獨立運作,不受可用區限制。
33.1.2. Tenablesc 授權
Tenable.sc 是需要授權檔案才能運作的授權第三方軟體。請先根據 SBOM 取得 Tenable 授權,再繼續操作。在特殊情況下,我們或許可以提供授權。
授權檔案的名稱應類似 SecurityCenter-<version>-1000IPs-<uid>.key。找出這個檔案並記下,因為您需要直接將檔案上傳至 Tenablesc UI。
需求條件:
- 一個 Tenablesc 授權檔案,至少有 1000 個 IP 限制和主機名稱
tenablesc-as1
33.2. 找出 Nessus 部署檔案
部署 Nessus 前,請先使用 Windows PowerShell 完成下列步驟,找出 Nessus 安裝檔案:
存取 Nessus Helm 資訊圖表和虛擬機器 (VM) 映像檔:
在 OC 中,這些項目可透過
\\<dc-prefix>-hyperv1\OpsCenter\tenable-nessus存取./operations_center/tenable-nessus/ ├── rhel-8.6-x86_64-kvm-tenablesc.qcow2 # Tenable.sc server image ├── tenablesc-automation-bundle-v6n.tar # Tenable.sc automation bundle ├── tenablesc-admin.tgz # Ops admin Tenable.sc Helm chart └── tenablesc-vms.tgz # Ops admin Tenable.sc Helm chart for VM將這些檔案移至本機工作站,以供日後使用:
# Eg "\\dc1-hyperv1\OpsCenter\tenable-nessus\*" $OPS_TENABLE_RESOURCES = "" mkdir $env:USERPROFILE\tenable-nessus Copy-Item ${OPS_TENABLE_RESOURCES} $env:USERPROFILE\tenable-nessus
33.3. 找出 Nessus 預先啟用套件
Nessus 預先啟動套件專屬於每個 Nessus 安裝項目,因此無法納入營運中心套件。請按照 Nessus 指南 NES-G0004 - How to perform Nessus license preactivation 的說明,準備「GDCH 1」預先啟用套件,再繼續操作。
在連上網際網路的電腦上,自行或透過 Google 工程 POC 取得
nessus-preact-gdch1.tar.gz。將這個檔案轉移到工作站,並放在
$env:USERPROFILE\tenable-nessus下方目錄
$env:USERPROFILE\tenable-nessus必須包含預先啟動套件:$env:USERPROFILE\tenable-nessus ├── nessus-preact-gdch1.tar.gz # GDCH Nessus Preactivation File
33.4. 開啟 WSL
除非另有說明,否則頁面其餘步驟的所有指令都必須使用 WSL。
選用:需要使用 Sudo。如果您不知道 sudo 使用者密碼,請執行下列指令來設定 WSL sudo 使用者
oc-it密碼:/mnt/c/Windows/System32/wsl.exe --distribution "${WSL_DISTRO_NAME}" --user root --exec passwd oc-it
33.5. 設定環境變數
請按照下列步驟設定必要環境變數:
定義環境變數
ROOT_ADMIN_CLUSTER_KUBECONFIG,以便在目前的終端機中稍後使用。這必須是管理員叢集 kubeconfig 的絕對路徑,該路徑是先決條件:ROOT_ADMIN_CLUSTER_KUBECONFIG=在目前的終端機中,為所選管理員叢集 kubectl 指令定義別名:
alias kra='kubectl --kubeconfig ${ROOT_ADMIN_CLUSTER_KUBECONFIG:?}'設定
USERPROFILE變數:export USERPROFILE=$(wslpath $(cmd.exe /c "<nul set /p=%UserProfile%" 2>/dev/null))$USERPROFILE現在指向與$env:USERPROFILE相同的位置。
33.5.1. 為第 1 版機構設定環境變數
定義環境變數
ORG_ADMIN_KUBECONFIG,以便在目前的終端機中稍後使用。這必須是所選機構管理員叢集 kubeconfig 的絕對路徑,該 kubeconfig 是做為必要條件產生:ORG_ADMIN_KUBECONFIG=在目前的終端機中,為所選機構管理員叢集 kubectl 指令定義別名:
alias kna='kubectl --kubeconfig ${ORG_ADMIN_KUBECONFIG:?}'定義環境變數
ORG_SYSTEM_KUBECONFIG,以便在目前的終端機中稍後使用。這必須是所選系統叢集 kubeconfig 的絕對路徑,該路徑是做為必要條件產生:ORG_SYSTEM_KUBECONFIG=在目前的終端機中,為所選系統叢集 kubectl 指令定義別名:
alias knu='kubectl --kubeconfig ${ORG_SYSTEM_KUBECONFIG:?}'
33.5.2. 為第 2 版機構設定環境變數
定義環境變數
ORG_MGMT_KUBECONFIG,以便在目前的終端機中稍後使用。這必須是所選 v2 機構管理平面 API 伺服器 kubeconfig 的絕對路徑,該 kubeconfig 是做為必要條件產生:ORG_MGMT_KUBECONFIG=在目前的終端機中,為所選機構管理員叢集 kubectl 指令定義別名:
alias kna='kubectl --kubeconfig ${ORG_MGMT_KUBECONFIG:?}'定義環境變數
ORG_INFRA_KUBECONFIG,以便在目前的終端機中稍後使用。這必須是所選 v2 機構控制層 API 伺服器 kubeconfig 的絕對路徑,該 kubeconfig 是做為必要條件產生:ORG_INFRA_KUBECONFIG=在目前的終端機中,為所選系統叢集 kubectl 指令定義別名:
alias knu='kubectl --kubeconfig ${ORG_INFRA_KUBECONFIG:?}'
33.6. 上傳預先啟動套件
請按照下列步驟上傳構件 Harbor 登錄檔。
使用適當的中繼資料,將套件轉換為 OCI 格式:
BUNDLE_PATH=${USERPROFILE:?}/tenable-nessus/nessus-preact-gdch1.tar.gz BUNDLE_OCI_PATH=${USERPROFILE:?}/tenable-nessus/nessus-preact-gdch1-oci BUNDLE_TAG=$(date '+%Y%m%d%H%M%S') gdcloud artifacts oci build-from-tar ${BUNDLE_PATH:?} ${BUNDLE_OCI_PATH:?} \ --version "${BUNDLE_TAG:?}" \ --index-annotations "org.google.gpc.harbor.tag=${BUNDLE_TAG:?},com.gpc.oci.image.flat=true" \ --manifest-annotations "org.google.gpc.harbor.project=gpc-system-nessus-updates,org.google.gpc.harbor.repo=nessus-preactivation,com.gpc.oci.image.flat=true" \ --layer-media-type="application/vnd.unknown.layer.v1.tar"安裝 Harbor CA 憑證:
HARBOR_URL=$(kra get harborcluster harbor -n harbor-system -o=jsonpath='{.spec.externalURL}') HARBOR_IP=${HARBOR_URL#https://} sudo mkdir -p /etc/docker/certs.d/${HARBOR_IP:?} CA_CRT=$(kra get secret trust-store-internal-only -n anthos-creds -o jsonpath='{.data.ca\.crt}') sudo sh -c "echo ${CA_CRT} | openssl base64 -A -d > /etc/docker/certs.d/${HARBOR_IP:?}/ca.crt"找出作業系統:
sudo sh -c "hostnamectl"如為 Rocky Linux 作業系統,請執行:
sudo update-ca-trust extract如為 Ubuntu 作業系統,請執行下列指令:
sudo update-ca-certificates將預先啟動套件上傳至 Harbor:
理想方法:使用
gdcloud auth login驗證。INFRA_CONSOLE_URL="https://$(kra get dnsregistrations.network.private.gdc.goog -n gpc-system infra-console -o jsonpath='{.status.fqdn}')" gdcloud config set core/organization_console_url ${INFRA_CONSOLE_URL:?} gdcloud auth login gdcloud auth configure-docker gdcloud system container-registry load-oci ${BUNDLE_OCI_PATH:?} --create-release-metadata=false --skip-failover-registry備份方法:使用
kubeconfig。gdcloud system container-registry load-oci ${BUNDLE_OCI_PATH:?} --create-release-metadata=false --use-ip-port=true --skip-failover-registry --kubeconfig=${ROOT_ADMIN_CLUSTER_KUBECONFIG:?}
33.7. 安裝 Nessus
觸發安裝 Nessus:
cat <<EOF | kra apply -f - apiVersion: vulnerabilitymanagement.private.gdc.goog/v1alpha1 kind: ParentNessusManagerConfig metadata: name: parent-nessus-manager-config namespace: tenable-nessus-system spec: preactivationUrlBundleTag: "${BUNDLE_TAG:?}" installedAt: "$(date -u +"%Y-%m-%dT%H:%M:%SZ")" EOF等待約 1.5 小時,讓安裝作業完成。
33.7.1. 選用:解除安裝 Nessus
本節包含從所有必要叢集中移除 Nessus 部署作業的指令。
從根管理員叢集解除安裝 Nessus:
helm list -n tenable-nessus-system -q --kubeconfig ${ROOT_ADMIN_CLUSTER_KUBECONFIG:?} | xargs helm uninstall -n tenable-nessus-system --kubeconfig ${ROOT_ADMIN_CLUSTER_KUBECONFIG:?}適用於機構架構 v1:
從機構管理員叢集解除安裝 Nessus:
helm list -n tenable-nessus-system -q --kubeconfig ${ORG_ADMIN_KUBECONFIG:?} | xargs helm uninstall -n tenable-nessus-system --kubeconfig ${ORG_ADMIN_KUBECONFIG:?}從機構系統叢集解除安裝 Nessus:
helm list -n tenable-nessus-system -q --kubeconfig ${ORG_SYSTEM_KUBECONFIG:?} | xargs helm uninstall -n tenable-nessus-system --kubeconfig ${ORG_SYSTEM_KUBECONFIG:?}
適用於機構架構第 2 版:
從機構管理叢集解除安裝 Nessus:
helm list -n tenable-nessus-system -q --kubeconfig ${ORG_MGMT_KUBECONFIG:?} | xargs helm uninstall -n tenable-nessus-system --kubeconfig ${ORG_MGMT_KUBECONFIG:?}從機構基礎架構叢集中解除安裝 Nessus:
helm list -n tenable-nessus-system -q --kubeconfig ${ORG_INFRA_KUBECONFIG:?} | xargs helm uninstall -n tenable-nessus-system --kubeconfig ${ORG_INFRA_KUBECONFIG:?}
33.7.2. 在根管理員叢集中驗證 Nessus
確認金鑰和憑證已發布:
echo "Child linking key published: $(kra get pnm -A -o yaml | yq e '.items[0].status.conditions[] | select(.type == "ChildLinkingKeyPublished") | .status')" echo "Agent linking key published: $(kra get pnm -A -o yaml | yq e '.items[0].status.conditions[] | select(.type == "AgentLinkingKeyPublished") | .status')" echo "Nessus TLS Crt published: $(kra get pnm -A -o yaml | yq e '.items[0].status.conditions[] | select(.type == "NessusTlsCrtPublished") | .status')"確認父項 Nessus Manager 處於正常狀態:
POD_NAME=$(kra get pod -n tenable-nessus-system | grep vuln-parent-nessus-backend-app | awk '{print $1}') if kra exec -n tenable-nessus-system -c manager ${POD_NAME:?} -- /bin/bash -c "/opt/nessus/sbin/nessuscli node status" | grep -Fq "Agents linked"; then echo "Manager node is healthy" else echo "Manager node is unhealthy" fi如果系統回報父項 Nessus Manager 狀態不佳 (例如先前任一指令的輸出為 false),請使用下列指令重新啟動父項 Nessus Manager:
kra rollout restart deployment vuln-parent-nessus-backend-app -n tenable-nessus-system請等待約 1.5 小時,然後再次查看狀態。
如果 1.5 小時後,系統仍回報父項 Nessus Manager 狀態不佳,請將問題提報給隨時待命的團隊。
從 Grafana UI 執行指定查詢後,請提供下列資訊:
{pod="<pod_name>"}加入父項 Nessus Manager 設定:
kra get pnm -A -o yaml
確認子項 Nessus Manager 處於正常狀態:
POD_NAME=$(kra get pod -n tenable-nessus-system | grep vuln-managed-nessus-backend-app | awk '{print $1}') if kra exec -n tenable-nessus-system -c manager ${POD_NAME:?} -- /bin/bash -c "/opt/nessus/sbin/nessuscli node status" | grep -Fq "Agents linked"; then echo "Manager node is healthy" else echo "Manager node is unhealthy" fi如果系統回報子項 Nessus Manager 狀態不佳,請使用下列指令重新啟動子項 Nessus Manager,等待 20 分鐘後再次檢查狀態:
kra rollout restart deployment vuln-managed-nessus-backend-app -n tenable-nessus-system如果 20 分鐘後,系統仍回報子項 Nessus 管理工具狀態異常,請提報問題,並在 Grafana 使用者介面執行指定查詢後,附上下列資訊。
從 Grafana UI 執行指定查詢後,請提供下列資訊:
{pod="<pod_name>"}加入子項 Nessus Manager 設定:
kra get cnm -A -o yaml
確認沒有狀況不佳的代理程式:
echo "Nodes with unhealthy agents:"\ $(kra get nessusagent -A -o yaml | yq '.items[] | select(.status.conditions[] | select(.type == "Heartbeat" and .status == "False")) | .spec.nodeRef')針對不正常的清單中列出的所有代理程式,請設定
NESSUS_AGENT_NAME變數,然後對所有代理程式執行下列指令:NESSUS_AGENT_NAME= kra delete nessusagent ${NESSUS_AGENT_NAME} -n tenable-nessus-system如果 20 分鐘後,清單中仍有不正常的代理程式,請針對每個代理程式執行下列操作:
在 Grafana 中檢查 Pod
install-<node_name>的記錄檔,如果出現錯誤記錄ansible-playbook error: one or more host failed,請使用 PLATAUTH-G0001 建立與裸機節點的 SSH 連線。建立與裸機節點的 SSH 連線後,請將
/etc/yum.repos.d移至/etc/ yum.repos.d.back(有效刪除 yum repos conf)。
如果 20 分鐘後,清單中仍有不正常的代理程式,請提報問題,並在 Grafana UI 中執行指定查詢後,附上下列資訊。
從 Grafana UI 執行指定查詢後,請提供下列資訊。
{pod="<pod_name>"}包含 Nessus 代理程式狀態:
kra get nessusagent/${NESSUS_AGENT_NAME} -n tenable-nessus-system -o yaml加入 Nessus 代理程式設定:
kra get nessusagentconfig/nessus-agent-config -n tenable-nessus-system -o yaml
33.8. Nessus Manager - 機構驗證
本節說明在 Distributed Cloud 機構中驗證 Nessus 的步驟。
為確保順利完成 Nessus 驗證,請為 Distributed Cloud 的每個機構叢集 (包括 Operations Center IT 機構叢集) 執行這項程序。
列出可用的機構:
kra get -n gpc-system organization
針對 root 機構以外的每個機構,完成下列步驟。
33.8.1. 必要條件
第 1 版機構必須具備存取權
- 請按照 IAM-R0005 中的步驟操作:
- 在根管理員叢集中取得
clusterrole/tenable-nessus-admin-root叢集角色。
- 在根管理員叢集中取得
請按照 IAM-R0004 執行下列步驟:
- 產生根管理員叢集的 KUBECONFIG。
請按照 IAM-R0005 執行下列操作:
- 在目標機構管理員叢集中取得
clusterrole/tenable-nessus-admin-org-legacy叢集角色。
- 在目標機構管理員叢集中取得
請按照 IAM-R0004 執行下列步驟:
- 為目標機構管理員叢集產生 KUBECONFIG。
請按照 IAM-R0005 執行下列操作:
- 在目標系統叢集中取得
clusterrole/tenable-nessus-admin-system-legacy叢集角色。
- 在目標系統叢集中取得
請按照 IAM-R0004 執行下列步驟:
- 為目標系統叢集產生 KUBECONFIG。
- 請按照 IAM-R0005 中的步驟操作:
第 2 版機構必須具備存取權
- 請按照 IAM-R0005 中的步驟操作:
- 在根管理員叢集中取得
clusterrole/tenable-nessus-admin-root叢集角色。
- 在根管理員叢集中取得
- 請按照 IAM-R0004 進行操作:
- 產生根管理員叢集的 KUBECONFIG。
- 請按照 IAM-R0005 中的步驟操作:
- 在目標叢集中取得
clusterrole/tenable-nessus-admin-infra-mp叢集角色。
- 在目標叢集中取得
- 請按照 IAM-R0004 進行操作:
- 為目標基礎架構叢集產生 mp KUBECONFIG。
- 請按照 IAM-R0005 中的步驟操作:
- 在目標基礎架構控制層 kube API 伺服器中取得
clusterrole/tenable-nessus-admin-infra-cp叢集角色。
- 在目標基礎架構控制層 kube API 伺服器中取得
- 請按照 IAM-R0004 進行操作:
- 為基礎架構叢集產生 cp KUBECONFIG。
- 請按照 IAM-R0005 中的步驟操作:
按照「設定環境變數」一文的說明,設定機構叢集的存取權,並定義 kna 和 knu 指令列別名。
33.8.2. 在第 1 版機構中驗證 Nessus,並在第 2 版機構中驗證基礎架構管理平台 kube API 伺服器
確認沒有狀況不佳的代理程式:
echo "Nodes with unhealthy agents:"\ $(kna get nessusagent -A -o yaml | yq '.items[] | select(.status.conditions[] | select(.type == "Heartbeat" and .status == "False")) | .spec.nodeRef')針對不正常清單中列出的所有代理程式,設定
NESSUS_AGENT_NAME變數,並為所有代理程式執行下列指令:NESSUS_AGENT_NAME= kna delete nessusagent ${NESSUS_AGENT_NAME} -n tenable-nessus-system如果 20 分鐘後,清單中仍有不正常的代理程式,請針對每個代理程式執行下列操作:
在 Grafana 中檢查 Pod
install-<node_name>的記錄檔,如果出現錯誤記錄ansible-playbook error: one or more host failed,請使用 PLATAUTH-G0001 建立與裸機節點的 SSH 連線。建立與裸機節點的 SSH 連線後,請將
/etc/yum.repos.d移至/etc/ yum.repos.d.back(有效刪除 yum repos conf)。
如果 20 分鐘後,清單中仍有不正常的代理程式,請回報問題,並在 Grafana UI 中執行指定查詢後,附上下列資訊。
{pod="<pod_name>"}
33.8.3. 在第 1 版機構的系統叢集中驗證 Nessus,以及在第 2 版機構的基礎架構控制層 Kube API 伺服器中驗證 Nessus
確認子項 Nessus Manager 處於正常狀態:
POD_NAME=$(knu get pod -n tenable-nessus-system | grep vuln-managed-nessus-backend-app | awk '{print $1}') if knu exec -n tenable-nessus-system -c manager ${POD_NAME:?} -- /bin/bash -c "/opt/nessus/sbin/nessuscli node status" | grep -Fq "Agents linked"; then echo "Manager node is healthy" else echo "Manager node is unhealthy" fi如果系統回報子項 Nessus Manager 狀態不佳,請使用下列指令重新啟動子項 Nessus Manager,等待 20 分鐘後再次檢查狀態:
knu rollout restart deployment vuln-managed-nessus-backend-app -n tenable-nessus-system如果 20 分鐘後,系統仍回報子項 Nessus 管理員狀態異常,請提報問題,並在 Grafana UI 執行指定查詢後,附上下列資訊。
從 Grafana UI 執行指定查詢後,請一併提供下列資訊。
{pod="<pod_name>"}包含子項 Nessus Manager 設定。
knu get cnm -A -o yaml
確認沒有狀況不佳的代理程式:
echo "Nodes with unhealthy agents:"\ $(knu get nessusagent -A -o yaml | yq '.items[] | select(.status.conditions[] | select(.type == "Heartbeat" and .status == "False")) | .spec.nodeRef')針對不正常的清單中列出的所有代理程式,請設定
NESSUS_AGENT_NAME變數,然後對所有代理程式執行下列指令:NESSUS_AGENT_NAME= knu delete nessusagent ${NESSUS_AGENT_NAME} -n tenable-nessus-system如果 20 分鐘後,清單中仍有不正常的代理程式,請針對每個代理程式執行下列操作:
在 Grafana 中檢查 Pod
install-<node_name>的記錄檔,如果出現錯誤記錄ansible-playbook error: one or more host failed,請使用 PLATAUTH-G0001 建立與裸機節點的 SSH 連線。建立與裸機節點的 SSH 連線後,請將
/etc/yum.repos.d移至/etc/ yum.repos.d.back(有效刪除 yum repos conf)。
如果 20 分鐘後,清單中仍有不正常的代理程式,請提報問題,並在 Grafana UI 中執行指定查詢後,附上下列資訊。
從 Grafana UI 執行指定查詢後,請提供下列資訊:
{pod="<pod_name>"}包含 Nessus 代理程式狀態:
knu get nessusagent/${NESSUS_AGENT_NAME} -n tenable-nessus-system -o yaml加入 Nessus 代理程式設定:
knu get nessusagentconfig/nessus-agent-config -n tenable-nessus-system -o yaml
33.9. 安裝 Tenable.sc
本節說明如何在 Operations Center IT 機構中安裝或升級現有的 Tenable.sc VM。
33.9.1. 必要條件
需要存取權
- 適用於機構架構 v1:
- 請按照 IAM-R0005 中的步驟操作:
- 在根管理員叢集中取得
clusterrole/tenable-nessus-admin-root叢集角色。
- 在根管理員叢集中取得
- 請按照 IAM-R0004 進行操作:
- 產生根管理員叢集的 KUBECONFIG。
- 請按照 IAM-R0005 中的步驟操作:
- 在 gdchservices 管理員叢集中取得
clusterrole/tenable-nessus-admin-org-legacy叢集角色。
- 在 gdchservices 管理員叢集中取得
- 請按照 IAM-R0004 進行操作:
- 產生 gdchservices 管理員叢集的 KUBECONFIG。
- 請按照 IAM-R0005 中的步驟操作:
- 在 gdchservices 系統叢集中取得
clusterrole/tenable-nessus-admin-system-legacy叢集角色。
- 在 gdchservices 系統叢集中取得
- 請按照 IAM-R0004 進行操作:
- 產生 gdchservices 系統叢集的 KUBECONFIG。
- 請按照 IAM-R0005 中的步驟操作:
- 適用於機構架構第 2 版:
- 請按照 IAM-R0005 中的步驟操作:
- 在根管理員叢集中取得
clusterrole/tenable-nessus-admin-root叢集角色。
- 在根管理員叢集中取得
- 請按照 IAM-R0004 進行操作:
- 產生根管理員叢集的 KUBECONFIG。
- 請按照 IAM-R0005 中的步驟操作:
- 在 gdchservices-management 叢集中取得
clusterrole/tenable-nessus-admin-infra-mp叢集角色。
- 在 gdchservices-management 叢集中取得
- 請按照 IAM-R0004 進行操作:
- 產生 gdchservices-management 叢集的 KUBECONFIG。
- 請按照 IAM-R0005 中的步驟操作:
- 在 gdchservices-infra 叢集中取得
clusterrole/tenable-nessus-admin-infra-cp叢集角色。
- 在 gdchservices-infra 叢集中取得
- 請按照 IAM-R0004 進行操作:
- 為 gdchservices-infra 叢集產生 KUBECONFIG。
- 請按照 IAM-R0005 中的步驟操作:
- 適用於機構架構 v1:
33.9.2. 設定環境變數
請按照下列步驟設定必要環境變數:
定義環境變數
ROOT_ADMIN_CLUSTER_KUBECONFIG,以便在目前的終端機中稍後使用。這必須是管理員叢集 kubeconfig 的絕對路徑,該路徑是先決條件:ROOT_ADMIN_CLUSTER_KUBECONFIG=在目前的終端機中,為根管理員叢集 kubectl 指令定義別名:
alias kra='kubectl --kubeconfig ${ROOT_ADMIN_CLUSTER_KUBECONFIG:?}'定義 gdchservices 機構管理平面 kubeconfig 的環境變數:
適用於機構架構第 1 版: 定義環境變數
ORG_ADMIN_KUBECONFIG,以供目前終端機稍後使用。這必須是 gdchservices 管理員叢集 kubeconfig 的絕對路徑,該叢集是做為必要條件而產生:ORG_ADMIN_KUBECONFIG=適用於第 2 版機構架構: 定義環境變數
ORG_MGMT_KUBECONFIG,以供目前終端機稍後使用。這必須是 gdchservices 管理叢集 kubeconfig 的絕對路徑,該檔案是先決條件:ORG_MGMT_KUBECONFIG=
使用上述 kubeconfig 為 kubectl 指令建立別名:
適用於機構架構第 1 版: 在目前的終端機中,為 gdchservices 管理員叢集 kubectl 指令定義別名:
alias kna='kubectl --kubeconfig ${ORG_ADMIN_KUBECONFIG:?}'適用於機構架構第 2 版: 在目前的終端機中,為 gdchservices 管理員叢集 kubectl 指令定義別名:
alias kna='kubectl --kubeconfig ${ORG_MGMT_KUBECONFIG:?}'
定義 gdchservices 機構控制層 kubeconfig 的環境變數:
適用於機構架構第 1 版: 定義環境變數
ORG_SYSTEM_KUBECONFIG,以供目前終端機稍後使用。這必須是 gdchservices 系統叢集 kubeconfig 的絕對路徑,該路徑是先決條件:ORG_SYSTEM_KUBECONFIG=適用於第 2 版機構架構: 定義環境變數
ORG_INFRA_KUBECONFIG,以供目前終端機稍後使用。這必須是 gdchservices 基礎架構叢集 kubeconfig 的絕對路徑,該叢集是先決條件:ORG_INFRA_KUBECONFIG=
使用上述 kubeconfig 為 kubectl 指令建立別名:
適用於機構架構第 1 版: 在目前的終端機中,為 gdchservices 系統叢集 kubectl 指令定義別名:
alias knu='kubectl --kubeconfig ${ORG_SYSTEM_KUBECONFIG:?}'適用於機構架構第 2 版: 在目前的終端機中,為 gdchservices 基礎架構叢集 kubectl 指令定義別名:
alias knu='kubectl --kubeconfig ${ORG_INFRA_KUBECONFIG:?}'
設定
USERPROFILE變數:export USERPROFILE=$(wslpath $(cmd.exe /c "<nul set /p=%UserProfile%" 2>/dev/null))$USERPROFILE現在指向與$env:USERPROFILE相同的位置。定義部署 Tenable.sc 的機構名稱:
ORG=gdchservices
33.9.3. 準備安裝
請按照下列步驟準備機構。
建立
tenablesc-system專案。cat <<EOF | kna apply -n gpc-system -f - apiVersion: resourcemanager.gdc.goog/v1 kind: Project metadata: name: tenablesc-system labels: istio.io/rev: default networking.gdc.goog/enable-default-egress-allow-to-outside-the-org: "true" resourcemanager.gdc.goog/attach-all-user-clusters: "true" EOF兩分鐘後,確認機構管理員和系統叢集上都有命名空間。
kna get namespace tenablesc-system -o yaml knu get namespace tenablesc-system -o yaml請注意,
resourcemanager.gdc.goog/attach-all-user-clusters: "true"專案標籤會導致命名空間也建立在機構的所有使用者叢集中。產生並儲存 Tenablesc 管理員和管理員使用者憑證,做為 Kubernetes 密鑰。
cat <<EOF | knu apply -n tenablesc-system -f - apiVersion: v1 kind: Secret type: Opaque metadata: name: users data: adminpw: $(</dev/urandom tr -dc 'A-Za-z0-9~!@#$%^*+?' | head -c 25 | base64) managerpw: $(</dev/urandom tr -dc 'A-Za-z0-9~!@#$%^*+?' | head -c 25 | base64) EOF
33.9.4. 安裝管理員圖表
設定下列環境變數,準備安裝:
URL_SUFFIX=$(kna get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}') ROOT_URL_SUFFIX=$(kra get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}') DEPLOY_NAME=tenablesc套用管理員 Helm 資訊套件。
適用於機構架構 v1:
helm upgrade --install \ tenablesc-admin ${USERPROFILE:?}/tenable-nessus/tenablesc-admin.tgz \ --namespace tenablesc-system \ --set urlSuffix=${URL_SUFFIX:?} \ --set deployName=${DEPLOY_NAME:?} \ --kubeconfig ${ORG_ADMIN_KUBECONFIG:?}適用於機構架構第 2 版:
將
OCIT_NESSUS_MANAGER_PREFIXES設為以逗號分隔的清單,例如"{dc1-nessus1,dc1-nessus2}",表示 OCIT VM 前置字元。設定
OCIT_NESSUS_URL_SUFFIX,指出 OCIT VM 後置字串。套用管理層的 Helm 更新:
helm upgrade --install \ tenablesc-admin ${USERPROFILE:?}/tenable-nessus/tenablesc-infra-mp.tgz \ --namespace tenablesc-system \ --set urlSuffix=${URL_SUFFIX:?} \ --set ocitNessusManagerPrefixes=${OCIT_NESSUS_MANAGER_PREFIXES:?} \ --set deployName=${DEPLOY_NAME:?} \ --kubeconfig ${ORG_MGMT_KUBECONFIG:?}為基礎架構層套用 Helm 更新:
helm upgrade --install \ tenablesc-admin ${USERPROFILE:?}/tenable-nessus/tenablesc-infra-cp.tgz \ --namespace tenablesc-system \ --set urlSuffix=${URL_SUFFIX:?} \ --set rootUrlSuffix=${ROOT_URL_SUFFIX:?} \ --set ocitUrlSuffix=${OCIT_NESSUS_URL_SUFFIX:?} \ --set ocitNessusManagerPrefixes=${OCIT_NESSUS_MANAGER_PREFIXES:?} \ --set deployName=${DEPLOY_NAME:?} \ --kubeconfig ${ORG_INFRA_KUBECONFIG:?}套用 Istio 授權政策:
cat <<EOF | knu apply -f - apiVersion: security.istio.io/v1 kind: AuthorizationPolicy metadata: name: allow-nessus-terminated-traffic namespace: istio-system spec: rules: - from: - source: ipBlocks: - 0.0.0.0/0 to: - operation: hosts: - nessus-terminated.${URL_SUFFIX:?} selector: matchLabels: istio: management-ingress-gateway EOF建立服務項目:
cat <<EOF | knu apply -f - apiVersion: networking.istio.io/v1beta1 kind: ServiceEntry metadata: name: nessus-svc-entry namespace: istio-system spec: hosts: - nessus.${ROOT_URL_SUFFIX:?} location: MESH_EXTERNAL ports: - name: https-port number: 443 protocol: TLS resolution: DNS EOF建立 DNS 註冊:
cat <<EOF | kna apply -n tenablesc-system -f - apiVersion: network.private.gdc.goog/v1alpha1 kind: DNSRegistration metadata: name: tenablesc-internal namespace: tenablesc-system spec: resolutionConfig: exposeToNetwork: VPC resolveTo: useDefaultIstioGateway: owningCluster: InfraCluster ingressLabel: infra vpcIdentifier: infra EOF等待五分鐘後,將 FQDN 儲存在環境變數中:
TENABLE_SC_INTERNAL_FQDN=$(kna get dnsregistrations.network.private.gdc.goog -n tenablesc-system tenablesc-internal -o jsonpath='{.status.fqdn}')修補虛擬服務和閘道,新增 Tenable SC 內部 FQDN:
knu patch gateway tenablesc-gateway -n istio-system --type='json' \ -p='[{"op": "add", "path": "/spec/servers/0/hosts/0", "value": "'"${TENABLE_SC_INTERNAL_FQDN:?}"'"}]'knu patch virtualservice tenablesc-https-ingress-virtualsvc -n tenablesc-system --type='json' \ -p='[{"op": "add", "path": "/spec/hosts/0", "value": "'"${TENABLE_SC_INTERNAL_FQDN:?}"'"}]'修補探測器資源,以探測正確的端點:
kna patch probe tenablesc-probe -n tenablesc-system --type='json' \ -p='[{"op": "replace", "path": "/spec/probeJobs/0/targets/0", "value": "https://'"${TENABLE_SC_INTERNAL_FQDN:?}"'"}]'
驗證部署作業。
查看下列指令的輸出內容,確認
tenablesc-admin部署作業是否成功:適用於機構架構 v1:
helm ls --namespace tenablesc-system --kubeconfig ${ORG_ADMIN_KUBECONFIG:?}適用於機構架構第 2 版:
helm ls --namespace tenablesc-system --kubeconfig ${ORG_MGMT_KUBECONFIG:?}
確認虛擬服務是否存在。
適用於機構架構 v1:
kna get virtualservice -n tenablesc-system適用於機構架構第 2 版:
knu get virtualservice -n tenablesc-system
確認 DNS 項目是否存在。
echo $(kna get dnsregistrations.network.private.gdc.goog -n tenablesc-system tenablesc -o jsonpath='{.status.fqdn}')確認
AuditLoggingTarget已準備就緒,這項作業預計需要幾分鐘。kna get auditloggingtarget/tenablesc-audit-logging-target -n tenablesc-system -o jsonpath='{ .status }' | jq可能會發生下列錯誤:
Error: failed to copy secret to project: namespace "tenablesc-system" not found in cluster <user_cluster>如果是,則必須在指定叢集中建立
tenablesc-system命名空間。如要繼續操作,請建立命名空間,然後開啟中繼錯誤,觸發調查作業,瞭解發生這個錯誤的原因。在支援單中加入tenablesc-system專案說明輸出內容。kna describe project tenablesc-system可能會發生下列錯誤:
Error from server (NotFound): auditloggingtargets.logging.private.gdc.goog "tenablesc-audit-logging-target" not found如果沒有,請手動建立缺少的
AuditLoggingTarget:cat <<EOF | kna apply -n tenablesc-system -f - apiVersion: logging.private.gdc.goog/v1alpha1 kind: AuditLoggingTarget metadata: name: "${DEPLOY_NAME:?}-audit-logging-target" spec: appNameLabel: "${DEPLOY_NAME:?}" hostNameLabel: host ingressGatewayPort: 0 logAccessLevel: io serviceName: "${DEPLOY_NAME:?}" timestampKey: time timestampkeyFormat: '%Y-%m-%dT%H:%M:%S' EOF五分鐘後,輸出內容應如下所示:
{ "certSecretName": "tenablesc-alog-client-tls", "conditions": [ { "lastTransitionTime": "2023-07-11T15:13:50Z", "message": "", "observedGeneration": 1, "reason": "ReconciliationCompleted", "status": "True", "type": "Ready" } ], "serverCertSecretName": "tenablesc-alog-server-tls", "syslogServerName": "tenablesc-alog-system.gdchservices.bert.sesame.street", "syslogServerPortNumber": 5140 }10 分鐘後,如果狀態輸出內容仍不正確,則 Observability 平台可能運作異常。開啟含有可用狀態資訊的 meta 錯誤,協助進行偵錯。
33.9.5. 安裝 VM 圖表
設定下列環境變數,準備安裝:
TENABLESC_IMAGE_URL=$(kna get virtualmachineimages.virtualmachine.gdc.goog -n vm-system -o custom-columns=NAME:.metadata.name | grep nessus-tenable-sc | sort -r -k 1 | head -1) TENABLESC_BOOT_SIZE=50G適用於機構架構 v1:
ALT_NAME=tenablesc-audit-logging-target ALT_NS=tenablesc-system ALT_HOSTNAME=$(kna get auditloggingtarget/${ALT_NAME:?} -n ${ALT_NS:?} -o jsonpath='{ .status.syslogServerName }') ALT_PORT=$(kna get auditloggingtarget/${ALT_NAME:?} -n ${ALT_NS:?} -o jsonpath='{ .status.syslogServerPortNumber }') ALT_CERT_SECRET=$(kna get auditloggingtarget/${ALT_NAME:?} -n ${ALT_NS:?} -o jsonpath='{ .status.certSecretName }') ALT_CACERT=$(kna get secret/${ALT_CERT_SECRET:?} -n ${ALT_NS:?} -o jsonpath='{ .data.ca\.crt }') ALT_CERTFILE=$(kna get secret/${ALT_CERT_SECRET:?} -n ${ALT_NS:?} -o jsonpath='{ .data.tls\.crt }') ALT_KEYFILE=$(kna get secret/${ALT_CERT_SECRET:?} -n ${ALT_NS:?} -o jsonpath='{ .data.tls\.key }')適用於機構架構第 2 版:
ALT_NAME=tenablesc-audit-logging-target ALT_NS=tenablesc-system ALT_HOSTNAME=$(kna get auditloggingtarget/${ALT_NAME:?} -n ${ALT_NS:?} -o jsonpath='{ .status.syslogServerName }') ALT_PORT=$(kna get auditloggingtarget/${ALT_NAME:?} -n ${ALT_NS:?} -o jsonpath='{ .status.syslogServerPortNumber }') ALT_CERT_SECRET=$(kna get auditloggingtarget/${ALT_NAME:?} -n ${ALT_NS:?} -o jsonpath='{ .status.certSecretName }') ALT_CACERT=$(knu get secret/${ALT_CERT_SECRET:?} -n ${ALT_NS:?} -o jsonpath='{ .data.ca\.crt }') ALT_CERTFILE=$(knu get secret/${ALT_CERT_SECRET:?} -n ${ALT_NS:?} -o jsonpath='{ .data.tls\.crt }') ALT_KEYFILE=$(knu get secret/${ALT_CERT_SECRET:?} -n ${ALT_NS:?} -o jsonpath='{ .data.tls\.key }')
設定虛擬機器類型:
取得所有虛擬機器類型的名稱:
kna get virtualmachinetypes.virtualmachine.gdc.goog -n vm-system選取具有
Supported欄位的虛擬機器類型 (true),並儲存在環境變數中。建議:n2-standard-4-gdc和n3-standard-4-gdc。VIRTUAL_MACHINE_TYPE=
如要將 Tenable.sc 記錄檔傳送至
infra-obsLoki 執行個體,必須提供ProjectNetworkPolicy。cat <<EOF | kna apply -f - apiVersion: networking.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: name: allow-tenablesc-system-ingress-traffic namespace: obs-system spec: ingress: - from: - projects: matchNames: - tenablesc-system policyType: Ingress subject: subjectType: UserWorkload EOF套用 VM 的 Helm 資訊套件。
適用於機構架構 v1:
helm upgrade --install \ tenablesc-vms ${USERPROFILE:?}/tenable-nessus/tenablesc-vms.tgz \ --namespace tenablesc-system \ --set urlSuffix=${URL_SUFFIX:?} \ --set applicationServer.image=${TENABLESC_IMAGE_URL:?} \ --set applicationServer.bootSize=${TENABLESC_BOOT_SIZE:?} \ --set applicationServer.virtualMachineType=${VIRTUAL_MACHINE_TYPE:?} \ --set syslogaudit.host=${ALT_HOSTNAME:?} \ --set syslogaudit.port=${ALT_PORT:?} \ --set syslogaudit.caCert=${ALT_CACERT} \ --set syslogaudit.certFile=${ALT_CERTFILE} \ --set syslogaudit.keyFile=${ALT_KEYFILE} \ --kubeconfig ${ORG_ADMIN_KUBECONFIG:?}適用於機構架構第 2 版:
helm upgrade --install \ tenablesc-vms ${USERPROFILE:?}/tenable-nessus/tenablesc-vms.tgz \ --namespace tenablesc-system \ --set urlSuffix=${URL_SUFFIX:?} \ --set applicationServer.image=${TENABLESC_IMAGE_URL:?} \ --set applicationServer.bootSize=${TENABLESC_BOOT_SIZE:?} \ --set applicationServer.virtualMachineType=${VIRTUAL_MACHINE_TYPE:?} \ --set syslogaudit.host=${ALT_HOSTNAME:?} \ --set syslogaudit.port=${ALT_PORT:?} \ --set syslogaudit.caCert=${ALT_CACERT} \ --set syslogaudit.certFile=${ALT_CERTFILE} \ --set syslogaudit.keyFile=${ALT_KEYFILE} \ --kubeconfig ${ORG_MGMT_KUBECONFIG:?}
套用 Helm 資訊套件時,您可能會遇到下列問題:
Webhook 失敗:
connect: connection refusedError: Internal error occurred: failed calling webhook "mvirtualmachines.vm.cluster.gke.io": failed to call webhook: Post "https://vm-manager-webhook.gpc-system.svc:443/mutate-vm-cluster-gke-io-v1alpha1-virtualmachine?timeout=10s": dial tcp 10.1.118.145:443: connect: connection refused補救措施:再次執行 helm upgrade 指令。
驗證部署作業。 查看下列指令的輸出內容,確認
tenablesc-vm部署作業是否成功:helm ls --namespace tenablesc-system --kubeconfig ${ORG_ADMIN_KUBECONFIG:?}等待 Tenable.sc 開始執行。
檢查虛擬機器狀態:
kna get virtualmachines.virtualmachine.gdc.goog -n tenablesc-system範例輸出內容,指出 VM 仍在佈建中:
NAME STATUS AGE tenablesc-as1 Pending 55s輸出範例,顯示 VM 正在執行:
NAME STATUS AGE tenablesc-as1 Running 8m25s如果 VM 在 60 分鐘後仍未執行,請檢查命名空間事件是否有任何明顯錯誤。
knu get -n tenablesc-system events -o wide收集所有重要警告和錯誤,並透過 metabug 回報。
您必須具備
VirtualService和DestinationRule,才能存取 Tenable.sc UI。適用於機構架構第 1 版: 無須變更。
適用於機構架構第 2 版:
將服務名稱設為環境變數,以供日後使用:
TENABLE_SC_SERVICE=$(knu get service -n tenablesc-system | awk '($1 ~ /^g-svc-/) && ($0 ~ /443/) {print $1}'s)編輯
VirtualService和DestinationRuleCR:knu patch virtualservice tenablesc-https-ingress-virtualsvc -n tenablesc-system --type merge --patch '{"spec": {"http": [{"route": [{"destination": {"host":"'"${TENABLE_SC_SERVICE:?}"'.tenablesc-system.svc.cluster.local"}}]}]}}' knu patch destinationrule tls-encrypt-tenablesc-https-ingress -n tenablesc-system --type merge --patch '{"spec":{"host":"'"${TENABLE_SC_SERVICE:?}"'.tenablesc-system.svc.cluster.local"}}'
確認 DNS 解析為 IP。
TENABLE_SC_HOST=$(kna get dnsregistrations.network.private.gdc.goog -n tenablesc-system tenablesc -o jsonpath='{.status.fqdn}') dig +noall +answer ${TENABLE_SC_HOST:?}確認服務是否透過 DNS 解析。
預期結果是 200 回應代碼和一些 HTML 輸出內容。
curl -kv https://${TENABLE_SC_HOST:?}
33.9.6. 準備 Tenablesc VM SSH 憑證
請按照下列步驟準備 SSH,以便存取 Tenable VM。
產生 SSH 金鑰。
這組 SSH 金鑰只會暫時用於存取 VM。
rm /tmp/tenablesc ssh-keygen -t rsa -b 4096 -f /tmp/tenablesc -N ""設定下列環境變數。
export VM_PUBLIC_KEY=$(cat /tmp/tenablesc.pub) export VM_NAME=tenablesc-as1建立臨時 (24 小時)
VirtualMachineRequest。VirtualMachineRequest用於在 VM 上安裝產生的 SSH 憑證。kna delete VirtualMachineAccessRequest ${VM_NAME:?}-ar -n tenablesc-system --ignore-not-found=true cat <<EOF | kna apply -n tenablesc-system -f - apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineAccessRequest metadata: name: ${VM_NAME:?}-ar spec: ssh: key: | ${VM_PUBLIC_KEY:?} ttl: 24h user: alice vm: ${VM_NAME:?} EOF將 VM SSH IP 匯出為本機環境變數。
INGRESS_IP=$(kna get vmexternalaccess tenablesc-as1 -n tenablesc-system -o jsonpath='{.status.ingressIP}') echo "VM SSH IP: ${INGRESS_IP:?}"測試 SSH 連線是否正常運作:
ssh -i /tmp/tenablesc -o "StrictHostKeyChecking no" alice@${INGRESS_IP:?} whoami預期的輸出內容為
alice,也就是 SSH 使用者名稱。如果 SSH 連線逾時,表示缺少輸入政策。使用下列指令建立 Ingress 政策,然後再試一次。
建立 Ingress 政策:
kna create -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: name: allow-external-traffic-vm namespace: tenablesc-system spec: ingress: - from: - ipBlock: cidr: 0.0.0.0/0 policyType: Ingress subject: subjectType: UserWorkload EOF在
tenablesc-system命名空間中佈建iotoolsPod:cat << EOF | knu apply -n tenablesc-system -f - apiVersion: v1 kind: Pod metadata: name: iotools namespace: tenablesc-system spec: containers: - name: iotools image: gcr.io/private-cloud-staging/operation-tools:latest command: ["sleep","infinity"] volumeMounts: - name: log-volume mountPath: /var/log volumes: - name: log-volume emptyDir: {} EOF將私密金鑰轉移至
iotoolsPod:將私密金鑰轉移至
iotoolsPod:knu -n tenablesc-system cp /tmp/tenablesc iotools:/tmp/tenablesc
33.9.7. 安裝網路服務憑證
請按照下列步驟安裝 Tenablesc 網頁服務憑證。
將 VM SSH IP 位址匯出為本機環境變數:
INGRESS_IP=$(knu get virtualmachine tenablesc-as1 -n tenablesc-system -o json | jq -r '.status.network.interfaces[0].ipAddresses[0] | split("/")[0]') echo "VM SSH IP: ${INGRESS_IP:?}"準備網路伺服器憑證和金鑰。
下列指令會安裝用於提供 Tenable UI 的 TLS 憑證和金鑰。
設定 TLS 憑證名稱
TLS_SECRET_NAME=nessus-tls在本機儲存
nessus-tls憑證:knu get secret ${TLS_SECRET_NAME:?} -n tenable-nessus-system -o yaml > nessus-tls.yaml將
nessus-tls憑證複製到iotoolsPod:knu -n tenablesc-system cp nessus-tls.yaml iotools:/tmp/nessus-tls.yaml準備傳輸層安全標準 (TLS) 憑證。
knu get -n tenable-nessus-system secret ${TLS_SECRET_NAME:?} -o jsonpath='{ .data.tls\.crt }' | base64 -d | knu -n tenablesc-system exec -i iotools -- /bin/bash -c "ssh -i /tmp/tenablesc -o \"StrictHostKeyChecking no\" \"alice@${INGRESS_IP}\" \"cat - > ~/SecurityCenter.crt\""準備傳輸層安全標準 (TLS) 私密金鑰。
knu get -n tenable-nessus-system secret ${TLS_SECRET_NAME:?} -o jsonpath='{ .data.tls\.key }' | base64 -d | knu -n tenablesc-system exec -i iotools -- /bin/bash -c "ssh -i /tmp/tenablesc -o \"StrictHostKeyChecking no\" \"alice@${INGRESS_IP}\" \"cat - > ~/SecurityCenter.key\""準備傳輸層安全標準 (TLS) CA 憑證。
knu get -n tenable-nessus-system secret ${TLS_SECRET_NAME:?} -o jsonpath='{ .data.ca\.crt }' | base64 -d | knu -n tenablesc-system exec -i iotools -- /bin/bash -c "ssh -i /tmp/tenablesc -o \"StrictHostKeyChecking no\" \"alice@${INGRESS_IP}\" \"cat - > ~/SecurityCenterCA.crt\""
準備憑證安裝指令碼。
將下列程式碼儲存至
/tmp/tenable-sc-install-web-tls.sh。cat >> /tmp/tenable-sc-install-web-tls.sh << EOF #!/bin/bash # Install server cert sudo mv ~/SecurityCenter.crt /opt/sc/support/conf/SecurityCenter.crt sudo mv ~/SecurityCenter.key /opt/sc/support/conf/SecurityCenter.key sudo chown tns:tns /opt/sc/support/conf/SecurityCenter.crt sudo chown tns:tns /opt/sc/support/conf/SecurityCenter.key sudo chmod 640 /opt/sc/support/conf/SecurityCenter.crt sudo chmod 640 /opt/sc/support/conf/SecurityCenter.key # Install custom CA cert sudo /opt/sc/support/bin/php /opt/sc/src/tools/installCA.php ~/SecurityCenterCA.crt # append root ext ca to sys log ca cat ~/SecurityCenterCA.crt | sudo tee -a /etc/fluent-bit/syslog-ca.crt # Restart Tenable.sc sudo systemctl restart SecurityCenter # Restart fluent-bit sudo systemctl restart fluent-bit EOF將指令碼複製到
iotoolsPod:knu -n tenablesc-system cp /tmp/tenable-sc-install-web-tls.sh iotools:/tmp/tenable-sc-install-web-tls.sh安裝網頁伺服器憑證和金鑰。
在 Tenable.sc VM 上執行
install-web-tls.sh。knu -n tenablesc-system exec -i iotools -- /bin/bash -c "ssh -i /tmp/tenablesc alice@${INGRESS_IP:?} 'bash -s' < /tmp/tenable-sc-install-web-tls.sh"Tenablesc 服務現在會使用適當的 TLS 憑證和金鑰。
33.9.8. 在 Tenable.sc 中啟用記錄轉送功能
按照 NES-R0002 登入 Tenablesc UI。
在導覽列中,依序前往「系統」 >「設定」。
在「設定」頁面中,按一下「其他」。
前往「系統記錄」Syslog部分:
- 開啟「啟用轉寄」。
- 將「設施」設為「使用者」。
- 在「嚴重性」中,選取「全選」。
按一下「提交」儲存設定。
33.9.9. 啟用 OIC 至 GDC 網路連線
請完成下列 nessus1 和 nessus2 VM 的步驟:
設定下列環境變數:
SITE_ID= OIC_DNS_SUFFIX= NESSUS_SUFFIX= GDC_SERVICES_ORG_URL_SUFFIX=$(kna get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}')將設定發布至 GDC 服務管理層:
cat <<EOF | kubectl --kubeconfig ${ORG_INFRA_KUBECONFIG:?} apply -f - apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: root-infra-ingress-gateway-https-dr-${SITE_ID:?}-${NESSUS_SUFFIX:?} namespace: istio-system spec: host: ${SITE_ID:?}-${NESSUS_SUFFIX:?}.${OIC_DNS_SUFFIX:?} trafficPolicy: portLevelSettings: - port: number: 8834 tls: mode: SIMPLE sni: ${SITE_ID:?}-${NESSUS_SUFFIX:?}.${OIC_DNS_SUFFIX:?} --- apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: infra-egress-gateway-nessus-dr-${SITE_ID:?}-${NESSUS_SUFFIX:?} namespace: istio-system spec: host: infra-egress-gateway.istio-system.svc.cluster.local subsets: - name: nessus-egress-${SITE_ID:?}-${NESSUS_SUFFIX:?} trafficPolicy: loadBalancer: simple: ROUND_ROBIN portLevelSettings: - port: number: 443 tls: credentialName: nessus-tls mode: SIMPLE sni: ${SITE_ID:?}-${NESSUS_SUFFIX:?}.${OIC_DNS_SUFFIX:?} --- apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: nessus-egress-gateway-${SITE_ID:?}-${NESSUS_SUFFIX:?} namespace: istio-system spec: selector: istio: infra-egress-gateway servers: - hosts: - ${SITE_ID:?}-${NESSUS_SUFFIX:?}.${OIC_DNS_SUFFIX:?} port: name: https-port number: 443 protocol: HTTPS tls: cipherSuites: - ECDHE-ECDSA-AES256-GCM-SHA384 - ECDHE-RSA-AES256-GCM-SHA384 credentialName: nessus-tls mode: SIMPLE --- apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: nessus-terminated-gateway-${SITE_ID:?}-${NESSUS_SUFFIX:?} namespace: istio-system spec: selector: istio: management-ingress-gateway servers: - hosts: - ${SITE_ID:?}-${NESSUS_SUFFIX:?}.${GDC_SERVICES_ORG_URL_SUFFIX:?} port: name: https-port number: 443 protocol: HTTPS tls: cipherSuites: - ECDHE-ECDSA-AES256-GCM-SHA384 - ECDHE-RSA-AES256-GCM-SHA384 credentialName: nessus-tls mode: SIMPLE --- apiVersion: networking.istio.io/v1beta1 kind: ServiceEntry metadata: name: nessus-svc-entry-${SITE_ID:?}-${NESSUS_SUFFIX:?} namespace: istio-system spec: hosts: - ${SITE_ID:?}-${NESSUS_SUFFIX:?}.${OIC_DNS_SUFFIX:?} location: MESH_EXTERNAL ports: - name: https-port number: 8834 protocol: TLS resolution: DNS --- apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: nessus-admin-virtual-service-${SITE_ID:?}-${NESSUS_SUFFIX:?} namespace: istio-system spec: gateways: - istio-system/nessus-terminated-gateway-${SITE_ID:?}-${NESSUS_SUFFIX:?} hosts: - ${SITE_ID:?}-${NESSUS_SUFFIX:?}.${GDC_SERVICES_ORG_URL_SUFFIX:?} http: - rewrite: authority: ${SITE_ID:?}-${NESSUS_SUFFIX:?}.${OIC_DNS_SUFFIX:?} route: - destination: host: infra-egress-gateway.istio-system.svc.cluster.local port: number: 443 subset: nessus-egress-${SITE_ID:?}-${NESSUS_SUFFIX:?} --- apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: nessus-egress-virtual-service-${SITE_ID:?}-${NESSUS_SUFFIX:?} namespace: istio-system spec: gateways: - istio-system/nessus-egress-gateway-${SITE_ID:?}-${NESSUS_SUFFIX:?} hosts: - ${SITE_ID:?}-${NESSUS_SUFFIX:?}.${OIC_DNS_SUFFIX:?} http: - match: - uri: prefix: / route: - destination: host: ${SITE_ID:?}-${NESSUS_SUFFIX:?}.${OIC_DNS_SUFFIX:?} port: number: 8834 --- apiVersion: security.istio.io/v1 kind: AuthorizationPolicy metadata: name: mgmt-infra-egress-access-${SITE_ID:?}-${NESSUS_SUFFIX:?} namespace: istio-system spec: rules: - from: - source: ipBlocks: - 0.0.0.0/0 to: - operation: hosts: - ${SITE_ID:?}-${NESSUS_SUFFIX:?}.${GDC_SERVICES_ORG_URL_SUFFIX:?} selector: matchLabels: istio: management-ingress-gateway EOF將設定發布至 GDC 控制層:
cat <<EOF | kubectl --kubeconfig ${ORG_MGMT_KUBECONFIG:?} apply -f - apiVersion: network.private.gdc.goog/v1alpha1 kind: DNSRegistration metadata: name: ${SITE_ID:?}-${NESSUS_SUFFIX:?}-customer-internal namespace: tenablesc-system spec: fqdnPrefix: ${SITE_ID:?}-${NESSUS_SUFFIX:?} resolutionConfig: exposeToNetwork: VPC resolveTo: useDefaultIstioGateway: ingressLabel: admin owningCluster: InfraCluster vpcIdentifier: default EOF
33.9.10. 清除所用資源
刪除暫時的 Nessus 目錄。
rm -rf /tmp/nessus
33.9.11. 啟用授權
本節詳細說明如何套用 Tenable.sc 授權。
使用下列網址開啟 Tenablesc 網頁版 UI:
TENABLE_SC_HOST=$(kna get dnsregistrations.network.private.gdc.goog -n tenablesc-system tenablesc -o jsonpath='{.status.fqdn}') echo "Navigate to https://${TENABLE_SC_HOST:?}"套用授權前,使用者介面會顯示設定精靈。
如果 UI 顯示登入提示,表示授權已套用,請略過本節的其餘步驟。
點選「下一步」。
上傳 Tenablesc 授權檔案
SecurityCenter-<version>-<number>IPs-<uid>.key。潛在問題:
Error Activating License File. License Is Invalid. No Valid License Found.:這表示提供的授權檔案無效。請逐一排查下列可能原因:
主機名稱有誤
這個授權的 Tenabe.com 產品頁面中設定了錯誤的主機名稱。確認 Tenable.com 產品頁面中的授權主機名稱為
tenablesc-as1。如果主機名稱不相符:請將主機名稱設為tenablesc-as1,然後下載新授權並改用新授權檔案。檔案格式有誤
授權檔案可能在傳輸期間遭到修改:與 Nessus 預先啟用檔案類似,這個授權檔案無法在傳輸期間修改。請務必將從 Tenable.com 產品頁面下載的確切檔案上傳至 Tenable 使用者介面。您可以比較檔案在移轉前後的 SHA,確認檔案是否經過修改。
授權檔案不正確
請確認您使用的是從 Tenable.com 產品頁面取得的
Tenable.sc授權檔案。檔案內容應與 PEM 金鑰類似。
如果授權仍無法運作,請向 VULN 團隊開啟 metabug,並附上目前為止嘗試的所有疑難排解步驟。
重新整理頁面。如果系統顯示登入畫面,表示授權已成功套用。
Tenable.sc 現已完全啟動。如要進一步瞭解如何設定及使用 Tenablesc,請參閱操作人員手冊。您應在完成啟動程序後,再進行這些設定。
33.9.12. 選用:解除安裝
本節包含移除 Tenable.sc 部署作業的指令。
請按照下列步驟從叢集解除安裝 Helm 資訊套件:
從機構基礎架構叢集解除安裝 Helm 資訊套件:
helm uninstall --namespace tenablesc-system tenablesc-system --kubeconfig ${ORG_INFRA_KUBECONFIG:?}從管理 API 伺服器解除安裝 Helm 資訊套件:
helm uninstall --namespace tenablesc-system tenablesc-admin --kubeconfig ${ORG_MGMT_KUBECONFIG:?}從管理 API 伺服器解除安裝 Tenable SC VM 的 Helm 資訊套件:
VIRTUAL_MACHINE_NAME=$(knu get virtualmachine -n tenablesc-system -o custom-columns=NAME:.metadata.name | sort -r -k 1 | head -1) kna patch virtualmachines.virtualmachine.gdc.goog ${VIRTUAL_MACHINE_NAME:?} -n tenablesc-system --type merge --patch '{"spec":{"runningState":"Stopped"}}' helm uninstall tenablesc-vms -n tenablesc-system --kubeconfig ${ORG_MGMT_KUBECONFIG:?}
33.9.13. 設定 Tenable.SC
請按照 NES-G0001 - 設定 Tenable.SC 設定 Tenable.sc。
33.10. 驗證 Nessus 部署作業
本節將詳細說明如何驗證 Nessus 管理員和代理程式是否正常運作並連結在一起,以及如何修正已知的潛在問題。
本節內容應在安裝作業結束時執行,但建議您在執行掃描前,先完成這些驗證步驟。操作手冊中說明瞭如何執行掃描。
開始之前,請按照「設定環境變數」一文的說明,設定根管理員叢集的存取權,並定義 kra 指令列別名。
33.10.1. 驗證叢集
如要確認 Nessus Manager 和代理程式是否已連結,主要方法是透過主要 Nessus Manager 使用者介面。在使用者介面中,Nessus 子項必須列在代理程式叢集預設叢集群組中,所有 Nessus 代理程式則必須列在預設代理程式群組中。
取得主要 Nessus Manager UI 的 DNS:
echo Nessus Manager UI: https://$(kra get dnsregistration \ -n tenable-nessus-system nessus -o jsonpath='{.status.fqdn}')開啟網際網路瀏覽器,然後前往上一個步驟中的連結。這會將您導向主要的 Nessus Manager UI。
使用使用者名稱
admin和預設密碼admin登入 Nessus Manager 使用者介面。如果登入時發生任何驗證問題,請按照 NES-T0004 輪替 Nessus 憑證,然後重試登入。
按一下頁面頂端的「設定」。
在「設定」頁面中,查看「外掛程式」資訊。如果未定義「外掛程式集」的值,請按照 NES-T0001 重新將最新外掛程式集套用至主要 Nessus Manager。
按一下頁面頂端的「感應器」,然後點選「代理程式叢集」。
按一下「Default Agent Group」,查看所有已註冊的節點。
如果群組為空白,或任何機構的節點 (子項 Nessus 執行個體) 遺失,則必須重新註冊子項 Nessus 執行個體。