完了までの推定時間: 1 日
操作可能なコンポーネントのオーナー: VULN
スキル プロファイル: デプロイ エンジニア
最終更新日: 2025 年 8 月 18 日
Nessus は、Google Distributed Cloud(GDC)エアギャップのサポート システムとオペレーション システム用のセキュリティ スキャナです。これにより、オペレーション センターのチームはハードウェアとソフトウェアのセキュリティの脆弱性をモニタリングして対応できます。
このドキュメントでは、Nessus をデプロイする手順について説明します。この手順は、PowerShell と WSL の両方が使用可能な OC ワークステーションから実行することを前提としています。
33.1. 始める前に
アクセス権が必要です
- IAM-R0005 に従います。
- ルート管理クラスタで
clusterrole/tenable-nessus-admin-rootクラスタロールを取得します。 - ルート管理クラスタの
gpc-systemNamespace でrole/system-artifact-management-adminロールを取得します。
- ルート管理クラスタで
- IAM-R0005 に従います。
必要なツール
- kubectl
- gdcloud
- helm
- yq
- docker
ライセンス
- Nessus ライセンス 1 つ
- NES-G0004 - Nessus ライセンスの事前有効化を行う方法に沿って、「GDCH 1」事前有効化バンドルを準備します。
- Nessus ライセンス 1 つ
33.1.1. ベスト プラクティス
33.1.1.1. アップグレード
1.14 より前のバージョンからアップグレードする場合は、インストールを行う前に、このガイドの各主要セクションの「省略可: アンインストール」の手順に沿って操作します。
再インストールする場合は、このガイドの各主要セクションの「省略可: アンインストール」の手順に沿って操作してください。
33.1.1.2. 組織とゾーン間のバージョンのずれを処理する
組織とゾーン間のバージョン ドリフトによる問題は発生しません。組織固有の手順に沿って、組織のバージョンを考慮して対応してください。これにより、各デプロイはゾーンごとに独立します。
33.1.2. Tenable.sc ライセンス
Tenable.sc は、動作にライセンス ファイルが必要なライセンス取得済みのサードパーティ ソフトウェアです。続行する前に、SBOM に従って Tenable ライセンスを取得する必要があります。特別なケースでは、ライセンスを提供できる場合があります。
ライセンス ファイルの名前は SecurityCenter-<version>-1000IPs-<uid>.key のようにする必要があります。このファイルを見つけて、後で Tenablesc UI に直接アップロードする必要があるため、メモしておきます。
要件:
- 1000 個以上の IP 制限とホスト名
tenablesc-as1を含む Tenablesc ライセンス ファイル 1 つ
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 - Nessus ライセンスの事前有効化を行う方法に沿って、続行する前に「GDCH 1」事前有効化バンドルを準備します。
インターネットに接続されたマシンで、
nessus-preact-gdch1.tar.gzを自分で取得するか、Google エンジニアリングの POC を通じて取得します。このファイルをワークステーションに転送し、
$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. v1 組織の環境変数を設定する
現在のターミナルで後で使用する環境変数
ORG_ADMIN_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. v2 組織の環境変数を設定する
現在のターミナルで後で使用する環境変数
ORG_MGMT_KUBECONFIGを定義します。これは、前提条件として生成された選択した v2 組織の管理プレーン API サーバー kubeconfig の絶対パスである必要があります。ORG_MGMT_KUBECONFIG=現在のターミナルで、選択した組織管理クラスタの kubectl コマンドのエイリアスを定義します。
alias kna='kubectl --kubeconfig ${ORG_MGMT_KUBECONFIG:?}'現在のターミナルで後で使用する環境変数
ORG_INFRA_KUBECONFIGを定義します。これは、前提条件として生成された選択した v2 組織のコントロール プレーン API サーバー 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 時間半待ちます。
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:?}
組織アーキテクチャ v2 の場合:
組織管理クラスタから 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-system1 時間半ほど待ってから、ステータスをもう一度確認します。
1 時間半経過しても親 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-system20 分経過しても子 Nessus マネージャーが異常と報告される場合は、問題をエスカレーションし、Grafana UI から指定されたクエリを実行した後に次の情報を含めます。
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-system20 分経過しても異常なエージェントがリストに表示される場合は、エージェントごとに次の操作を行います。
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 リポジトリの構成を効果的に削除するため)。
20 分経過しても異常なエージェントがリストに表示される場合は、問題をエスカレーションし、Grafana UI から指定されたクエリを実行した後に次の情報を含めます。
Grafana UI から指定されたクエリを実行した後、次の情報を含めます。
{pod="<pod_name>"}Nessus エージェントのステータスを含めます。
kra get nessusagent/${NESSUS_AGENT_NAME} -n tenable-nessus-system -o yamlNessus エージェント構成を含めます。
kra get nessusagentconfig/nessus-agent-config -n tenable-nessus-system -o yaml
33.8. Nessus Manager - 組織の確認
このセクションでは、Distributed Cloud 組織内で Nessus を検証するために必要な手順について説明します。
Nessus の検証を確実に完了するには、Operations Center IT 組織クラスタを含む、Distributed Cloud の各組織クラスタに対してこの手順を実行します。
使用可能な組織を一覧表示します。
kra get -n gpc-system organization
root 組織(すでに説明済み)を除く各組織について、次の手順を行います。
33.8.1. 前提条件
v1 組織に必要なアクセス権
- 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 に従います。
v2 組織に必要なアクセス権
- 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. v1 組織の組織管理クラスタの Nessus と、v2 組織のインフラストラクチャ管理プレーンの 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-system20 分経過しても異常なエージェントがリストに表示される場合は、エージェントごとに次の操作を行います。
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 リポジトリの構成を効果的に削除するため)。
20 分経過しても異常なエージェントがリストに表示される場合は、問題をエスカレーションし、Grafana UI から指定されたクエリを実行した後に次の情報を含めます。
{pod="<pod_name>"}
33.8.3. v1 組織のシステム クラスタの Nessus と、v2 組織のインフラストラクチャ コントロール プレーンの kube API サーバーを確認する
子 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-system20 分経過しても子 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-system20 分経過しても異常なエージェントがリストに表示される場合は、エージェントごとに次の操作を行います。
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 リポジトリの構成を効果的に削除するため)。
20 分経過しても異常なエージェントがリストに表示される場合は、問題をエスカレーションし、Grafana UI から指定されたクエリを実行した後に次の情報を含めます。
Grafana UI から指定されたクエリを実行した後、次の情報を含めます。
{pod="<pod_name>"}Nessus エージェントのステータスを含めます。
knu get nessusagent/${NESSUS_AGENT_NAME} -n tenable-nessus-system -o yamlNessus エージェント構成を含めます。
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 に従います。
- 組織アーキテクチャ v2 の場合:
- 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 の環境変数を定義します。
組織アーキテクチャ v1 の場合: 現在のターミナルで後で使用する環境変数
ORG_ADMIN_KUBECONFIGを定義します。これは、前提条件として生成された gdchservices 管理クラスタの kubeconfig の絶対パスである必要があります。ORG_ADMIN_KUBECONFIG=組織アーキテクチャ v2 の場合: 現在のターミナルで後で使用する環境変数
ORG_MGMT_KUBECONFIGを定義します。これは、前提条件として生成された gdchservices 管理クラスタの kubeconfig の絶対パスである必要があります。ORG_MGMT_KUBECONFIG=
上記の kubeconfig を使用して kubectl コマンドのエイリアスを作成します。
組織アーキテクチャ v1 の場合: 現在のターミナルで gdchservices 管理クラスタの kubectl コマンドのエイリアスを定義します。
alias kna='kubectl --kubeconfig ${ORG_ADMIN_KUBECONFIG:?}'組織アーキテクチャ v2 の場合: 現在のターミナルで gdchservices 管理クラスタの kubectl コマンドのエイリアスを定義します。
alias kna='kubectl --kubeconfig ${ORG_MGMT_KUBECONFIG:?}'
gdchservices 組織のコントロール プレーン kubeconfig の環境変数を定義します。
組織アーキテクチャ v1 の場合: 現在のターミナルで後で使用する環境変数
ORG_SYSTEM_KUBECONFIGを定義します。これは、前提条件として生成された gdchservices システム クラスタ kubeconfig の絶対パスである必要があります。ORG_SYSTEM_KUBECONFIG=組織アーキテクチャ v2 の場合: 現在のターミナルで後で使用する環境変数
ORG_INFRA_KUBECONFIGを定義します。これは、前提条件として生成された gdchservices インフラストラクチャ クラスタ kubeconfig の絶対パスである必要があります。ORG_INFRA_KUBECONFIG=
上記の kubeconfig を使用して kubectl コマンドのエイリアスを作成します。
組織アーキテクチャ v1 の場合: 現在のターミナルで gdchservices システム クラスタの kubectl コマンドのエイリアスを定義します。
alias knu='kubectl --kubeconfig ${ORG_SYSTEM_KUBECONFIG:?}'組織アーキテクチャ v2 の場合: 現在のターミナルで 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" EOF2 分後、組織管理者クラスタとシステム クラスタの両方に Namespace が存在することを確認します。
kna get namespace tenablesc-system -o yaml knu get namespace tenablesc-system -o yamlresourcemanager.gdc.goog/attach-all-user-clusters: "true"プロジェクト ラベルを指定すると、組織のすべてのユーザー クラスタにも名前空間が作成されます。Tenable.sc の管理者とマネージャーのユーザー認証情報を生成し、Kubernetes Secret として保存します。
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:?}組織アーキテクチャ v2 の場合:
OCIT_NESSUS_MANAGER_PREFIXESを"{dc1-nessus1,dc1-nessus2}"などのカンマ区切りのリストとして設定します。これは OCIT VM 接頭辞を示します。OCIT VM 接尾辞を示す
OCIT_NESSUS_URL_SUFFIXを設定します。管理プレーンの 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 EOFDNS 登録を作成します。
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 EOF5 分待ってから、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:?}"'"}]'正しいエンドポイントをプローブするように prober リソースにパッチを適用します。
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:?}組織アーキテクチャ v2 の場合:
helm ls --namespace tenablesc-system --kubeconfig ${ORG_MGMT_KUBECONFIG:?}
仮想サービスが存在することを確認します。
組織アーキテクチャ v1 の場合:
kna get virtualservice -n tenablesc-system組織アーキテクチャ v2 の場合:
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-systemNamespace を作成する必要があります。続行するには、名前空間を作成してから、メタバグを開いて、このエラーが発生する理由の調査を開始します。チケットに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' EOF5 分後、出力は次のようになります。
{ "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 分経過してもステータス出力が正しくない場合は、オブザーバビリティ プラットフォームが正常でない可能性があります。デバッグに役立つステータス情報を含むメタバグを開きます。
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 }')組織アーキテクチャ v2 の場合:
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-systemSupportedフィールドが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 EOFVM 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:?}組織アーキテクチャ v2 の場合:
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-systemVM がまだプロビジョニング中であることを示す出力例:
NAME STATUS AGE tenablesc-as1 Pending 55sVM が実行中であることを示す出力例:
NAME STATUS AGE tenablesc-as1 Running 8m25s60 分後に VM が実行されていない場合は、名前空間イベントで目立つエラーがないか確認します。
knu get -n tenablesc-system events -o wide重要な警告やエラーを収集し、メタバグで報告します。
Tenable.sc UI にアクセスするには、
VirtualServiceとDestinationRuleが必要です。組織アーキテクチャ v1 の場合: 変更は必要ありません。
組織アーキテクチャ v2 の場合:
後で使用するために、サービス名を環境変数として設定します。
TENABLE_SC_SERVICE=$(knu get service -n tenablesc-system | awk '($1 ~ /^g-svc-/) && ($0 ~ /443/) {print $1}'s)VirtualServiceCR と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. Tenable.sc VM の SSH 認証情報を準備する
次の手順に沿って、Tenable VM にアクセスするように SSH を準備します。
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は、生成された SSH 証明書を VM にインストールするために使用されます。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:?} EOFVM 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 接続がタイムアウトしている場合は、上り(内向き)ポリシーがありません。次のコマンドを使用して上り(内向き)ポリシーを作成し、もう一度お試しください。
内向きポリシーを作成します。
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 EOFtenablesc-systemNamespace に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. ウェブ サービスの証明書をインストールする
次の手順に沿って、Tenable.sc ウェブ サービスの証明書をインストールします。
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-tlsnessus-tls証明書をローカルに保存します。knu get secret ${TLS_SECRET_NAME:?} -n tenable-nessus-system -o yaml > nessus-tls.yamlnessus-tls証明書をiotoolsPod にコピーします。knu -n tenablesc-system cp nessus-tls.yaml iotools:/tmp/nessus-tls.yamlTLS 証明書をステージングします。
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"これで、Tenable.sc サービスは適切な TLS 証明書と鍵を使用するようになります。
33.9.8. Tenable.sc でログ転送を有効にする
NES-R0002 に沿って Tenablesc UI にログインします。
ナビゲーション バーで、[システム] > [構成] に移動します。
[構成] ページで、[その他] をクリックします。
[Syslog] セクションに移動します。
- [転送を有効にする] をオンにします。
- [Facility] を [user] に設定します。
- [重大度] で、[すべて選択] を選択します。
[送信] をクリックして、構成を保存します。
33.9.9. OIC から GDC へのネットワーク接続を有効にする
nessus1 VM と 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 ライセンスを適用する方法について詳しく説明します。
次の URL を使用して 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 に設定ウィザードが表示されます。
ログイン プロンプトが UI に表示されている場合は、ライセンスがすでに適用されているため、このセクションの残りの手順はスキップする必要があります。
[次へ] をクリックします。
Tenable.sc ライセンス ファイル
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 UI にアップロードする必要があります。転送前後のファイルの SHA を比較することで、ファイルが変更されたかどうかを再確認できます。
ライセンス ファイルが正しくない
Tenable.com の [Product] ページから取得した
Tenable.scライセンス ファイルを使用していることを確認します。ファイルの内容は PEM 鍵に似ている必要があります。
ライセンスがまだ機能しない場合は、VULN チームでメタバグを開き、これまでに試したトラブルシューティングの手順をすべて含めます。
ページを更新すると、ログイン画面が表示されたら、ライセンスは正常に適用されています。
Tenablesc が完全にブートストラップされました。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 の UI を使用することです。UI では、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 UI にログインします。ログイン時に認証に関する問題が発生した場合は、NES-T0004 に沿って Nessus 認証情報をローテーションし、ログインを再試行します。
ページ上部の [設定] をクリックします。
[設定] ページで、[プラグイン] の情報を確認します。[Plugin Set] の値が定義されていない場合は、NES-T0001 に従って、最新のプラグイン セットをプライマリ Nessus Manager に再適用します。
ページ上部の [センサー] をクリックし、[エージェント クラスタリング] をクリックします。
[Default Agent Group] をクリックして、登録されているすべてのノードを表示します。
グループが空の場合、または組織のノード(子 Nessus インスタンス)がない場合は、子 Nessus インスタンスを再登録する必要があります。