33. Men-deploy komponen Nessus

Perkiraan waktu penyelesaian: 1 hari

Pemilik komponen yang dapat dioperasikan: VULN

Profil keterampilan: Deployment engineer

Terakhir diperbarui: 18 Agustus 2025

Nessus adalah pemindai keamanan untuk sistem operasi dan dukungan Google Distributed Cloud (GDC) dengan air gap. Hal ini membantu tim pusat operasi memantau dan merespons kerentanan keamanan di hardware dan software.

Dokumen ini menyajikan langkah-langkah untuk men-deploy Nessus dan mengasumsikan bahwa operator yang mengikutinya melakukan langkah-langkah dari OC Workstation dengan PowerShell dan WSL yang tersedia.

33.1. Sebelum memulai

  • Perlu akses

    • Ikuti IAM-R0005:
      • Dapatkan peran cluster clusterrole/tenable-nessus-admin-root di cluster admin root.
      • Dapatkan peran role/system-artifact-management-admin di namespace gpc-system dari cluster admin root.
  • Alat yang diperlukan

    • kubectl
    • gdcloud
    • helm
    • yq
    • docker
  • Pemberian Lisensi

33.1.1. Praktik Terbaik

33.1.1.1. Upgrade

Untuk upgrade dari versi sebelum 1.14, ikuti "Opsional: Uninstal" di setiap bagian utama panduan ini sebelum melakukan penginstalan apa pun.

Jika ada penginstalan ulang, ikuti bagian "Opsional: Uninstal" di setiap bagian utama panduan ini.

33.1.1.2. Menangani perbedaan versi antara organisasi dan zona

Tidak boleh ada masalah karena perbedaan versi antara organisasi dan zona. Ikuti langkah-langkah khusus organisasi dengan mempertimbangkan versi organisasi. Setiap deployment akan bersifat independen per zona.

33.1.2. Lisensi Tenablesc

Tenable.sc adalah software pihak ketiga berlisensi yang memerlukan file lisensi untuk beroperasi. Lisensi Tenable harus diperoleh sesuai dengan SBOM sebelum melanjutkan. Dalam kasus khusus, kami mungkin dapat memberikan lisensi.

File lisensi harus memiliki nama seperti SecurityCenter-<version>-1000IPs-<uid>.key. Temukan file ini dan catat untuk digunakan nanti karena file ini harus diupload langsung ke UI Tenablesc.

Persyaratan:

  • Satu file lisensi Tenablesc dengan batas IP minimal 1000 dan nama host tenablesc-as1

33.2. Menemukan file deployment Nessus

Sebelum men-deploy Nessus, selesaikan langkah-langkah berikut menggunakan Windows PowerShell untuk menemukan file penginstalan Nessus:

  1. Akses image virtual machine (VM) dan diagram Helm Nessus:

    Dalam OC, fitur ini dapat diakses di \\<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
    
  2. Pindahkan file ini ke workstation lokal Anda untuk digunakan nanti:

    # 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. Menemukan paket pra-aktivasi Nessus

Paket Pra-aktivasi Nessus khusus untuk setiap penginstalan Nessus dan oleh karena itu tidak dapat disertakan dalam paket pusat operasi. Ikuti Panduan Nessus NES-G0004 - How to perform Nessus license preactivation untuk menyiapkan paket praaktivasi "GDCH 1" sebelum melanjutkan.

  1. Di komputer yang terhubung ke internet, dapatkan nessus-preact-gdch1.tar.gz sendiri atau melalui POC Engineering Google.

  2. Transfer file ini ke workstation Anda dan tempatkan di $env:USERPROFILE\tenable-nessus

  3. Direktori $env:USERPROFILE\tenable-nessus harus berisi paket pra-aktivasi:

    $env:USERPROFILE\tenable-nessus
    ├── nessus-preact-gdch1.tar.gz             # GDCH Nessus Preactivation File
    

33.4. Membuka WSL

Langkah-langkah selanjutnya di halaman ini memerlukan WSL untuk semua perintah, kecuali jika dinyatakan lain.

  1. Opsional: Sudo diperlukan. Jika Anda tidak mengetahui sandi pengguna sudo, jalankan perintah berikut untuk menyetel sandi pengguna sudo WSL oc-it:

    /mnt/c/Windows/System32/wsl.exe --distribution "${WSL_DISTRO_NAME}" --user root --exec passwd oc-it
    

33.5. Menetapkan variabel lingkungan

Lakukan langkah-langkah berikut untuk menetapkan variabel lingkungan yang diperlukan:

  1. Tentukan variabel lingkungan ROOT_ADMIN_CLUSTER_KUBECONFIG untuk digunakan nanti di terminal saat ini. Ini harus berupa jalur absolut ke kubeconfig cluster admin yang dibuat sebagai prasyarat:

    ROOT_ADMIN_CLUSTER_KUBECONFIG=
    
  2. Tentukan alias untuk perintah kubectl cluster admin yang dipilih di terminal saat ini:

    alias kra='kubectl --kubeconfig ${ROOT_ADMIN_CLUSTER_KUBECONFIG:?}'
    
  3. Tetapkan variabel USERPROFILE:

    export USERPROFILE=$(wslpath $(cmd.exe /c "<nul set /p=%UserProfile%" 2>/dev/null))
    

    $USERPROFILE kini mengarah ke lokasi yang sama dengan $env:USERPROFILE.

33.5.1. Menetapkan variabel lingkungan untuk organisasi v1

  1. Tentukan variabel lingkungan ORG_ADMIN_KUBECONFIG untuk digunakan nanti di terminal saat ini. Ini harus berupa jalur absolut ke kubeconfig cluster admin org yang dipilih yang dibuat sebagai prasyarat:

    ORG_ADMIN_KUBECONFIG=
    
  2. Tentukan alias untuk perintah kubectl cluster admin org yang dipilih di terminal saat ini:

    alias kna='kubectl --kubeconfig ${ORG_ADMIN_KUBECONFIG:?}'
    
  3. Tentukan variabel lingkungan ORG_SYSTEM_KUBECONFIG untuk digunakan nanti di terminal saat ini. Ini harus berupa jalur absolut ke kubeconfig cluster sistem yang dipilih yang dibuat sebagai prasyarat:

    ORG_SYSTEM_KUBECONFIG=
    
  4. Tentukan alias untuk perintah kubectl cluster sistem yang dipilih di terminal saat ini:

    alias knu='kubectl --kubeconfig ${ORG_SYSTEM_KUBECONFIG:?}'
    

33.5.2. Menetapkan variabel lingkungan untuk organisasi v2

  1. Tentukan variabel lingkungan ORG_MGMT_KUBECONFIG untuk digunakan nanti di terminal saat ini. Ini harus berupa jalur absolut ke kubeconfig server API bidang pengelolaan organisasi v2 yang dipilih, yang dibuat sebagai prasyarat:

    ORG_MGMT_KUBECONFIG=
    
  2. Tentukan alias untuk perintah kubectl cluster admin org yang dipilih di terminal saat ini:

    alias kna='kubectl --kubeconfig ${ORG_MGMT_KUBECONFIG:?}'
    
  3. Tentukan variabel lingkungan ORG_INFRA_KUBECONFIG untuk digunakan nanti di terminal saat ini. Ini harus berupa jalur absolut ke kubeconfig server API bidang kontrol organisasi v2 yang dipilih yang dibuat sebagai prasyarat:

    ORG_INFRA_KUBECONFIG=
    
  4. Tentukan alias untuk perintah kubectl cluster sistem yang dipilih di terminal saat ini:

    alias knu='kubectl --kubeconfig ${ORG_INFRA_KUBECONFIG:?}'
    

33.6. Mengupload paket praaktivasi

Lakukan langkah-langkah berikut untuk mengupload registry Harbor artefak.

  1. Konversi paket ke format OCI dengan metadata yang sesuai:

    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"
    
  2. Instal sertifikat CA Harbor:

    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"
    

    Temukan sistem operasi:

    sudo sh -c "hostnamectl"
    

    Untuk Rocky Linux sebagai sistem operasi, jalankan:

    sudo update-ca-trust extract
    

    Untuk Ubuntu sebagai sistem operasi, jalankan:

    sudo update-ca-certificates
    
  3. Upload paket pra-aktivasi ke Harbor:

    • Metode ideal: autentikasi menggunakan 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
      
    • Metode pencadangan: menggunakan 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. Menginstal Nessus

  1. Memicu penginstalan 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
    
  2. Tunggu sekitar 1,5 jam hingga penginstalan selesai.

33.7.1. Opsional: Uninstal Nessus

Bagian ini berisi perintah untuk menghapus deployment Nessus dari semua cluster yang diperlukan.

  1. Uninstal Nessus dari cluster admin root:

    helm list -n tenable-nessus-system -q --kubeconfig ${ROOT_ADMIN_CLUSTER_KUBECONFIG:?} | xargs helm uninstall -n tenable-nessus-system --kubeconfig ${ROOT_ADMIN_CLUSTER_KUBECONFIG:?}
    
  2. Untuk arsitektur org v1:

    1. Uninstal Nessus dari cluster admin org:

      helm list -n tenable-nessus-system -q --kubeconfig ${ORG_ADMIN_KUBECONFIG:?} | xargs helm uninstall -n tenable-nessus-system --kubeconfig ${ORG_ADMIN_KUBECONFIG:?}
      
    2. Uninstal Nessus dari cluster sistem org:

      helm list -n tenable-nessus-system -q --kubeconfig ${ORG_SYSTEM_KUBECONFIG:?} | xargs helm uninstall -n tenable-nessus-system --kubeconfig ${ORG_SYSTEM_KUBECONFIG:?}
      
  3. Untuk arsitektur organisasi v2:

    1. Uninstal Nessus dari cluster pengelolaan org:

      helm list -n tenable-nessus-system -q --kubeconfig ${ORG_MGMT_KUBECONFIG:?} | xargs helm uninstall -n tenable-nessus-system --kubeconfig ${ORG_MGMT_KUBECONFIG:?}
      
    2. Uninstal Nessus dari cluster infrastruktur org:

      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. Memverifikasi Nessus di cluster admin root

  1. Pastikan kunci dan sertifikat dipublikasikan:

    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')"
    
  2. Verifikasi bahwa Nessus Manager induk dalam kondisi baik:

    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
    
  3. Jika Nessus Manager induk dilaporkan tidak sehat, seperti output dari salah satu perintah sebelumnya adalah salah (false), mulai ulang Nessus Manager induk dengan perintah berikut:

    kra rollout restart deployment vuln-parent-nessus-backend-app -n tenable-nessus-system
    
  4. Tunggu sekitar 1,5 jam, lalu periksa kembali statusnya.

  5. Jika Nessus Manager induk masih dilaporkan tidak sehat setelah 1,5 jam, eskalasikan masalah ini ke petugas yang bertugas.

    1. Sertakan informasi berikut setelah menjalankan kueri yang diberikan dari UI Grafana:

      {pod="<pod_name>"}
      
    2. Sertakan konfigurasi Nessus Manager induk:

      kra get pnm -A -o yaml
      
  6. Verifikasi bahwa Nessus Manager turunan dalam kondisi baik:

    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
    
  7. Jika Nessus Manager turunan dilaporkan tidak sehat, mulai ulang Nessus Manager turunan dengan perintah berikut, tunggu 20 menit, lalu periksa status lagi:

    kra rollout restart deployment vuln-managed-nessus-backend-app -n tenable-nessus-system
    
  8. Jika setelah 20 menit, pengelola Child Nessus masih dilaporkan tidak sehat, eskalasikan masalah dan sertakan informasi berikut setelah menjalankan kueri yang diberikan dari UI Grafana.

    1. Sertakan informasi berikut setelah menjalankan kueri yang diberikan dari UI Grafana:

      {pod="<pod_name>"}
      
    2. Sertakan konfigurasi Nessus Manager turunan:

      kra get cnm -A -o yaml
      
  9. Pastikan tidak ada agen yang tidak sehat:

    echo "Nodes with unhealthy agents:"\
    $(kra get nessusagent -A -o yaml | yq '.items[] | select(.status.conditions[] | select(.type == "Heartbeat" and .status == "False")) | .spec.nodeRef')
    
  10. Untuk semua agen yang tercantum dalam daftar tidak sehat, tetapkan variabel NESSUS_AGENT_NAME dan jalankan perintah berikut untuk semuanya:

    NESSUS_AGENT_NAME=
    kra delete nessusagent ${NESSUS_AGENT_NAME} -n tenable-nessus-system
    
  11. Jika setelah 20 menit agen yang tidak sehat masih dilaporkan dalam daftar, lakukan hal berikut untuk setiap agen:

    • Periksa log pod install-<node_name> di grafana dan jika ada log error ansible-playbook error: one or more host failed, buat koneksi SSH ke node bare metal menggunakan PLATAUTH-G0001.

    • Setelah membuat koneksi SSH ke node bare metal, pindahkan /etc/yum.repos.d ke /etc/ yum.repos.d.back (untuk menghapus yum repos conf secara efektif).

  12. Jika setelah 20 menit agen yang tidak sehat masih dilaporkan dalam daftar, eskalasikan masalah dan sertakan informasi berikut setelah menjalankan kueri yang diberikan dari UI Grafana.

    1. Sertakan informasi berikut setelah menjalankan kueri yang diberikan dari UI Grafana.

      {pod="<pod_name>"}
      
    2. Sertakan status agen Nessus:

      kra get nessusagent/${NESSUS_AGENT_NAME} -n tenable-nessus-system -o yaml
      
    3. Sertakan konfigurasi agen Nessus:

      kra get nessusagentconfig/nessus-agent-config -n tenable-nessus-system -o yaml
      

33.8. Nessus Manager - verifikasi organisasi

Bagian ini membahas langkah-langkah yang diperlukan untuk memverifikasi Nessus dalam organisasi Distributed Cloud.

Untuk memastikan verifikasi Nessus berhasil dan selesai, jalankan prosedur ini untuk setiap cluster organisasi Distributed Cloud, termasuk cluster organisasi IT Operations Center.

Mencantumkan organisasi yang tersedia:

kra get -n gpc-system organization

Lakukan langkah-langkah berikut untuk setiap organisasi, selain organisasi root yang sudah dibahas.

33.8.1. Prasyarat

  • Akses diperlukan untuk organisasi v1

    • Ikuti IAM-R0005:
      • Dapatkan peran cluster clusterrole/tenable-nessus-admin-root di cluster admin root.
    • Ikuti IAM-R0004:

      • Buat KUBECONFIG untuk cluster admin root.
    • Ikuti IAM-R0005:

      • Dapatkan peran cluster clusterrole/tenable-nessus-admin-org-legacy di cluster admin org target.
    • Ikuti IAM-R0004:

      • Buat KUBECONFIG untuk cluster admin organisasi target.
    • Ikuti IAM-R0005:

      • Dapatkan peran cluster clusterrole/tenable-nessus-admin-system-legacy di cluster sistem target.
    • Ikuti IAM-R0004:

      • Buat KUBECONFIG untuk cluster sistem target.
  • Akses diperlukan untuk organisasi v2

    • Ikuti IAM-R0005:
      • Dapatkan peran cluster clusterrole/tenable-nessus-admin-root di cluster admin root.
    • Ikuti IAM-R0004:
      • Buat KUBECONFIG untuk cluster admin root.
    • Ikuti IAM-R0005:
      • Dapatkan peran cluster clusterrole/tenable-nessus-admin-infra-mp di cluster target.
    • Ikuti IAM-R0004:
      • Buat KUBECONFIG mp untuk cluster infrastruktur target.
    • Ikuti IAM-R0005:
      • Dapatkan peran cluster clusterrole/tenable-nessus-admin-infra-cp di server kube API bidang kontrol infrastruktur target.
    • Ikuti IAM-R0004:
      • Buat KUBECONFIG cp untuk cluster infrastruktur.

Ikuti Setel Variabel Lingkungan untuk menyiapkan akses ke cluster organisasi, dan tentukan alias command line kna dan knu.

33.8.2. Verifikasi Nessus di cluster admin org di organisasi v1 dan server kube API bidang pengelolaan infrastruktur di organisasi v2

  1. Pastikan tidak ada agen yang tidak sehat:

    echo "Nodes with unhealthy agents:"\
    $(kna get nessusagent -A -o yaml | yq '.items[] | select(.status.conditions[] | select(.type == "Heartbeat" and .status == "False")) | .spec.nodeRef')
    
  2. Untuk semua agen yang tercantum dalam daftar tidak sehat, tetapkan variabel NESSUS_AGENT_NAME dan jalankan perintah berikut untuk semua-

    NESSUS_AGENT_NAME=
    kna delete nessusagent ${NESSUS_AGENT_NAME} -n tenable-nessus-system
    
  3. Jika setelah 20 menit agen yang tidak sehat masih dilaporkan dalam daftar, lakukan hal berikut untuk setiap agen:

    • Periksa log pod install-<node_name> di grafana dan jika ada log error ansible-playbook error: one or more host failed, buat koneksi SSH ke node bare metal menggunakan PLATAUTH-G0001.

    • Setelah membuat koneksi SSH ke node bare metal, pindahkan /etc/yum.repos.d ke /etc/ yum.repos.d.back (untuk menghapus yum repos conf secara efektif).

  4. Jika setelah 20 menit agen yang tidak sehat masih dilaporkan dalam daftar, eskalasikan masalah dan sertakan informasi berikut setelah menjalankan kueri yang diberikan dari UI Grafana.

    {pod="<pod_name>"}
    

33.8.3. Memverifikasi Nessus di cluster sistem dalam organisasi v1 dan server kube API bidang kontrol infrastruktur dalam organisasi v2

  1. Verifikasi bahwa Nessus Manager turunan dalam kondisi baik:

    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
    
  2. Jika Nessus Manager turunan dilaporkan tidak sehat, mulai ulang Nessus Manager turunan dengan perintah berikut, tunggu 20 menit, lalu periksa status lagi:

    knu rollout restart deployment vuln-managed-nessus-backend-app -n tenable-nessus-system
    
  3. Jika setelah 20 menit, pengelola Child Nessus masih dilaporkan tidak sehat, eskalasikan masalah dan sertakan informasi berikut setelah menjalankan kueri yang diberikan dari UI Grafana.

    1. Sertakan informasi berikut setelah menjalankan kueri yang diberikan dari UI Grafana.

      {pod="<pod_name>"}
      
    2. Sertakan konfigurasi Nessus Manager anak.

      knu get cnm -A -o yaml
      
  4. Pastikan tidak ada agen yang tidak sehat:

    echo "Nodes with unhealthy agents:"\
    $(knu get nessusagent -A -o yaml | yq '.items[] | select(.status.conditions[] | select(.type == "Heartbeat" and .status == "False")) | .spec.nodeRef')
    
  5. Untuk semua agen yang tercantum dalam daftar tidak sehat, tetapkan variabel NESSUS_AGENT_NAME dan jalankan perintah berikut untuk semuanya:

    NESSUS_AGENT_NAME=
    knu delete nessusagent ${NESSUS_AGENT_NAME} -n tenable-nessus-system
    
  6. Jika setelah 20 menit agen yang tidak sehat masih dilaporkan dalam daftar, lakukan hal berikut untuk setiap agen:

    • Periksa log pod install-<node_name> di grafana dan jika ada log error ansible-playbook error: one or more host failed, buat koneksi SSH ke node bare metal menggunakan PLATAUTH-G0001.

    • Setelah membuat koneksi SSH ke node bare metal, pindahkan /etc/yum.repos.d ke /etc/ yum.repos.d.back (untuk menghapus yum repos conf secara efektif).

  7. Jika setelah 20 menit agen yang tidak sehat masih dilaporkan dalam daftar, eskalasikan masalah dan sertakan informasi berikut setelah menjalankan kueri yang diberikan dari UI Grafana.

    1. Sertakan informasi berikut setelah menjalankan kueri yang diberikan dari UI Grafana:

      {pod="<pod_name>"}
      
    2. Sertakan status agen Nessus:

      knu get nessusagent/${NESSUS_AGENT_NAME} -n tenable-nessus-system -o yaml
      
    3. Sertakan konfigurasi agen Nessus:

      knu get nessusagentconfig/nessus-agent-config -n tenable-nessus-system -o yaml
      

33.9. Menginstal Tenable.sc

Bagian ini berisi langkah-langkah untuk menginstal atau mengupgrade VM Tenable.sc yang ada dalam organisasi IT Operations Center.

33.9.1. Prasyarat

  • Perlu akses

    • Untuk arsitektur org v1:
      • Ikuti IAM-R0005:
        • Dapatkan peran cluster clusterrole/tenable-nessus-admin-root di cluster admin root.
      • Ikuti IAM-R0004:
        • Buat KUBECONFIG untuk cluster admin root.
      • Ikuti IAM-R0005:
        • Dapatkan peran cluster clusterrole/tenable-nessus-admin-org-legacy di cluster admin gdchservices.
      • Ikuti IAM-R0004:
        • Buat KUBECONFIG untuk cluster admin gdchservices.
      • Ikuti IAM-R0005:
        • Dapatkan peran cluster clusterrole/tenable-nessus-admin-system-legacy di cluster sistem gdchservices.
      • Ikuti IAM-R0004:
        • Buat KUBECONFIG untuk cluster sistem gdchservices.
    • Untuk arsitektur organisasi v2:
      • Ikuti IAM-R0005:
        • Dapatkan peran cluster clusterrole/tenable-nessus-admin-root di cluster admin root.
      • Ikuti IAM-R0004:
        • Buat KUBECONFIG untuk cluster admin root.
      • Ikuti IAM-R0005:
        • Dapatkan peran cluster clusterrole/tenable-nessus-admin-infra-mp di cluster gdchservices-management.
      • Ikuti IAM-R0004:
        • Buat KUBECONFIG untuk cluster gdchservices-management.
      • Ikuti IAM-R0005:
        • Dapatkan peran cluster clusterrole/tenable-nessus-admin-infra-cp di cluster gdchservices-infra.
      • Ikuti IAM-R0004:
        • Buat KUBECONFIG untuk cluster gdchservices-infra.

33.9.2. Menetapkan variabel lingkungan

Lakukan langkah-langkah berikut untuk menetapkan variabel lingkungan yang diperlukan:

  1. Tentukan variabel lingkungan ROOT_ADMIN_CLUSTER_KUBECONFIG untuk digunakan nanti di terminal saat ini. Ini harus berupa jalur absolut ke kubeconfig cluster admin yang dibuat sebagai prasyarat:

    ROOT_ADMIN_CLUSTER_KUBECONFIG=
    
  2. Tentukan alias untuk perintah kubectl cluster admin root di terminal saat ini:

    alias kra='kubectl --kubeconfig ${ROOT_ADMIN_CLUSTER_KUBECONFIG:?}'
    
  3. Tentukan variabel lingkungan untuk kubeconfig bidang pengelolaan org gdchservices:

    • Untuk arsitektur org v1: Tentukan variabel lingkungan ORG_ADMIN_KUBECONFIG untuk digunakan nanti di terminal saat ini. Ini harus berupa jalur absolut ke kubeconfig cluster admin gdchservices yang dibuat sebagai prasyarat:

      ORG_ADMIN_KUBECONFIG=
      
    • Untuk arsitektur org v2: Tentukan variabel lingkungan ORG_MGMT_KUBECONFIG untuk digunakan nanti di terminal saat ini. Ini harus berupa jalur absolut ke kubeconfig cluster pengelolaan gdchservices yang dibuat sebagai prasyarat:

      ORG_MGMT_KUBECONFIG=
      
  4. Buat alias untuk perintah kubectl menggunakan kubeconfig di atas:

    • Untuk arsitektur org v1: Tentukan alias untuk perintah kubectl cluster admin gdchservices di terminal saat ini:

      alias kna='kubectl --kubeconfig ${ORG_ADMIN_KUBECONFIG:?}'
      
    • Untuk arsitektur org v2: Tentukan alias untuk perintah kubectl cluster admin gdchservices di terminal saat ini:

      alias kna='kubectl --kubeconfig ${ORG_MGMT_KUBECONFIG:?}'
      
  5. Tentukan variabel lingkungan untuk kubeconfig bidang kontrol org gdchservices:

    • Untuk arsitektur org v1: Tentukan variabel lingkungan ORG_SYSTEM_KUBECONFIG untuk digunakan nanti di terminal saat ini. Ini harus berupa jalur absolut ke kubeconfig cluster sistem gdchservices yang dibuat sebagai prasyarat:

      ORG_SYSTEM_KUBECONFIG=
      
    • Untuk arsitektur org v2: Tentukan variabel lingkungan ORG_INFRA_KUBECONFIG untuk digunakan nanti di terminal saat ini. Ini harus berupa jalur absolut ke kubeconfig cluster gdchservices infra yang dibuat sebagai prasyarat:

      ORG_INFRA_KUBECONFIG=
      
  6. Buat alias untuk perintah kubectl menggunakan kubeconfig di atas:

    • Untuk arsitektur org v1: Tentukan alias untuk perintah kubectl cluster sistem gdchservices di terminal saat ini:

      alias knu='kubectl --kubeconfig ${ORG_SYSTEM_KUBECONFIG:?}'
      
    • Untuk arsitektur org v2: Tentukan alias untuk perintah kubectl cluster infrastruktur gdchservices di terminal saat ini:

      alias knu='kubectl --kubeconfig ${ORG_INFRA_KUBECONFIG:?}'
      
  7. Tetapkan variabel USERPROFILE:

    export USERPROFILE=$(wslpath $(cmd.exe /c "<nul set /p=%UserProfile%" 2>/dev/null))
    

    $USERPROFILE kini mengarah ke lokasi yang sama dengan $env:USERPROFILE.

  8. Tentukan nama organisasi tempat Tenable.sc di-deploy:

    ORG=gdchservices
    

33.9.3. Bersiap untuk menginstal

Lakukan langkah-langkah berikut untuk menyiapkan organisasi.

  1. Buat project 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
    
  2. Setelah dua menit, verifikasi bahwa namespace ada di cluster admin org dan sistem.

    kna get namespace tenablesc-system -o yaml
    
    knu get namespace tenablesc-system -o yaml
    

    Perhatikan bahwa label project resourcemanager.gdc.goog/attach-all-user-clusters: "true" menyebabkan namespace juga dibuat di semua cluster pengguna organisasi.

  3. Buat dan simpan kredensial pengguna Admin dan Manager Tenablesc sebagai secret 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. Diagram penginstalan admin

  1. Tetapkan variabel lingkungan berikut untuk mempersiapkan penginstalan:

    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
    
  2. Terapkan diagram helm admin.

    • Untuk arsitektur org 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:?}
      
    • Untuk arsitektur organisasi v2:

      Tetapkan OCIT_NESSUS_MANAGER_PREFIXES sebagai daftar yang dipisahkan koma, seperti "{dc1-nessus1,dc1-nessus2}", yang menunjukkan awalan VM OCIT.

      Tetapkan OCIT_NESSUS_URL_SUFFIX yang menunjukkan akhiran VM OCIT.

      Terapkan update helm untuk Bidang pengelolaan:

      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:?}
      

      Terapkan update helm untuk bidang Infrastruktur:

      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:?}
      

      Terapkan kebijakan otorisasi 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
      

      Buat entri layanan:

      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
      

      Buat pendaftaran 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
      

      Simpan FQDN dalam variabel lingkungan setelah menunggu selama lima menit:

      TENABLE_SC_INTERNAL_FQDN=$(kna get dnsregistrations.network.private.gdc.goog -n tenablesc-system tenablesc-internal -o jsonpath='{.status.fqdn}')
      

      Patch layanan virtual dan gateway untuk menambahkan FQDN internal Tenable SC:

      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:?}"'"}]'
      

      Patch resource prober untuk menyelidiki endpoint yang benar:

      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:?}"'"}]'
      
  3. Verifikasi deployment.

    Tinjau output perintah berikut untuk mengonfirmasi bahwa deployment tenablesc-admin berhasil:

    • Untuk arsitektur org v1:

      helm ls --namespace tenablesc-system --kubeconfig ${ORG_ADMIN_KUBECONFIG:?}
      
    • Untuk arsitektur organisasi v2:

      helm ls --namespace tenablesc-system --kubeconfig ${ORG_MGMT_KUBECONFIG:?}
      
  4. Pastikan layanan virtual ada.

    • Untuk arsitektur org v1:

      kna get virtualservice -n tenablesc-system
      
    • Untuk arsitektur organisasi v2:

      knu get virtualservice -n tenablesc-system
      
  5. Pastikan entri DNS ada.

    echo $(kna get dnsregistrations.network.private.gdc.goog -n tenablesc-system tenablesc -o jsonpath='{.status.fqdn}')
    
  6. Pastikan AuditLoggingTarget sudah siap, yang diperkirakan akan memerlukan waktu beberapa menit.

    kna get auditloggingtarget/tenablesc-audit-logging-target -n tenablesc-system -o jsonpath='{ .status }' |  jq
    

    • Error berikut mungkin terjadi:

      Error: failed to copy secret to project: namespace "tenablesc-system" not found in cluster <user_cluster>

      Jika ya, namespace tenablesc-system harus dibuat di cluster yang ditentukan. Untuk melanjutkan, buat namespace, lalu buka bug meta untuk memicu penyelidikan terkait penyebab error ini. Sertakan output tenablesc-system Project describe dalam tiket.

      kna describe project tenablesc-system
      
    • Error berikut mungkin terjadi:

      Error from server (NotFound): auditloggingtargets.logging.private.gdc.goog "tenablesc-audit-logging-target" not found

      Jika ya, buat AuditLoggingTarget yang tidak ada secara manual:

      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
      

      Setelah lima menit, output yang diharapkan akan terlihat seperti berikut:

      {
          "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
      }
      

      Setelah 10 menit, jika output status masih terlihat salah, berarti platform Observability mungkin tidak berfungsi dengan baik. Buka bug meta dengan informasi status yang tersedia untuk membantu proses debug.

33.9.5. Diagram penginstalan VM

  1. Tetapkan variabel lingkungan berikut untuk mempersiapkan penginstalan:

    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
    
    • Untuk arsitektur org 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 }')
      
    • Untuk arsitektur organisasi 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 }')
      
  2. Tetapkan jenis virtual machine:

    1. Mendapatkan nama semua jenis virtual machine:

      kna get virtualmachinetypes.virtualmachine.gdc.goog -n vm-system
      
    2. Pilih jenis virtual machine dengan kolom Supported sebagai true dan simpan di variabel lingkungan. Lebih disukai: n2-standard-4-gdc dan n3-standard-4-gdc.

      VIRTUAL_MACHINE_TYPE=
      
  3. ProjectNetworkPolicy diperlukan agar log Tenable.sc dikirim ke instance Loki infra-obs.

    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
    
  4. Terapkan diagram helm VM.

    • Untuk arsitektur org 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:?}
      
    • Untuk arsitektur organisasi 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:?}
      

    Saat menerapkan diagram helm, Anda mungkin mengalami masalah berikut:

    • Webhook gagal: connect: connection refused

      Error: 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
      

      Perbaikan: Jalankan perintah upgrade helm lagi.

  5. Verifikasi deployment. Tinjau output perintah berikut untuk mengonfirmasi bahwa deployment tenablesc-vm berhasil:

    helm ls --namespace tenablesc-system --kubeconfig ${ORG_ADMIN_KUBECONFIG:?}
    
  6. Tunggu hingga Tenablesc mulai berjalan.

    Periksa status mesin virtual:

    kna get virtualmachines.virtualmachine.gdc.goog -n tenablesc-system
    

    Contoh output yang menunjukkan bahwa VM masih dalam proses penyediaan:

    NAME            STATUS    AGE
    tenablesc-as1   Pending   55s
    

    Contoh output yang menunjukkan bahwa VM sedang berjalan:

    NAME            STATUS    AGE
    tenablesc-as1   Running   8m25s
    

    Jika VM tidak berjalan setelah 60 menit, tinjau peristiwa namespace untuk menemukan error yang tidak biasa.

    knu get -n tenablesc-system events -o wide
    

    Kumpulkan peringatan dan error penting, lalu laporkan dengan metabug.

  7. VirtualService dan DestinationRule diperlukan untuk mengakses UI Tenable.sc.

    • Untuk arsitektur org v1: Tidak ada perubahan yang diperlukan.

    • Untuk arsitektur organisasi v2:

      • Tetapkan nama layanan sebagai variabel lingkungan untuk digunakan nanti:

        TENABLE_SC_SERVICE=$(knu get service -n tenablesc-system | awk '($1 ~ /^g-svc-/) && ($0 ~ /443/) {print $1}'s)
        
      • Edit CR VirtualService dan DestinationRule:

        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"}}'
        
  8. Pastikan DNS diselesaikan ke 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:?}
    
  9. Verifikasi layanan diselesaikan melalui DNS.

    Hasil yang diharapkan adalah kode respons 200 dan beberapa output HTML.

    curl -kv https://${TENABLE_SC_HOST:?}
    

33.9.6. Menyiapkan Kredensial SSH VM Tenablesc

Lakukan langkah-langkah berikut untuk menyiapkan SSH guna mengakses VM Tenable.

  1. Buat kunci SSH.

    Kunci SSH ini hanya akan digunakan sementara untuk mengakses VM.

    rm /tmp/tenablesc
    ssh-keygen -t rsa -b 4096 -f /tmp/tenablesc -N ""
    
  2. Tetapkan variabel lingkungan berikut.

    export VM_PUBLIC_KEY=$(cat /tmp/tenablesc.pub)
    
    export VM_NAME=tenablesc-as1
    
  3. Buat VirtualMachineRequest sementara (24 jam).

    VirtualMachineRequest digunakan untuk menginstal sertifikat SSH yang dibuat di 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:?}
    EOF
    
  4. Ekspor IP SSH VM sebagai variabel lingkungan lokal.

    INGRESS_IP=$(kna get vmexternalaccess tenablesc-as1 -n tenablesc-system -o jsonpath='{.status.ingressIP}')
    
    echo "VM SSH IP: ${INGRESS_IP:?}"
    
  5. Uji apakah koneksi SSH berfungsi:

    ssh -i /tmp/tenablesc -o "StrictHostKeyChecking no" alice@${INGRESS_IP:?} whoami
    

    Output yang diharapkan adalah alice, yang merupakan nama pengguna SSH.

    Jika koneksi SSH kehabisan waktu, berarti kebijakan ingress tidak ada. Buat kebijakan ingress dengan perintah berikut, lalu coba lagi.

  6. Buat kebijakan 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
    
  7. Sediakan pod iotools di namespace tenablesc-system:

    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
    
  8. Transfer kunci pribadi ke pod iotools:

  9. Transfer kunci pribadi ke pod iotools:

    knu -n tenablesc-system cp /tmp/tenablesc iotools:/tmp/tenablesc
    

33.9.7. Menginstal sertifikat layanan web

Ikuti langkah-langkah berikut untuk menginstal sertifikat layanan web Tenablesc.

  1. Ekspor alamat IP SSH VM sebagai variabel lingkungan lokal:

    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:?}"
    
  2. Siapkan sertifikat dan kunci server web.

    Perintah berikut akan menginstal sertifikat dan kunci TLS yang akan digunakan untuk menayangkan UI Tenable.

    1. Tetapkan nama Sertifikat TLS

      TLS_SECRET_NAME=nessus-tls
      
    2. Simpan sertifikat nessus-tls secara lokal:

      knu get secret ${TLS_SECRET_NAME:?} -n tenable-nessus-system -o yaml > nessus-tls.yaml
      
    3. Salin sertifikat nessus-tls ke pod iotools:

      knu -n tenablesc-system cp nessus-tls.yaml iotools:/tmp/nessus-tls.yaml
      
    4. Siapkan Sertifikat 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\""
      
    5. Siapkan kunci pribadi 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\""
      
    6. Siapkan Sertifikat CA TLS.

      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\""
      
  3. Siapkan skrip penginstalan sertifikat.

    Simpan kode berikut ke /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
    
  4. Salin skrip ke pod iotools:

    knu -n tenablesc-system cp /tmp/tenable-sc-install-web-tls.sh iotools:/tmp/tenable-sc-install-web-tls.sh
    
  5. Instal sertifikat dan kunci server web.

    Jalankan install-web-tls.sh di VM Tenable.sc.

    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"
    

    Layanan Tenablesc kini menggunakan sertifikat dan kunci TLS yang sesuai.

33.9.8. Mengaktifkan penerusan log di Tenablesc

  1. Ikuti NES-R0002 untuk login ke UI Tenablesc.

  2. Di panel navigasi, buka Sistem > Konfigurasi.

  3. Di halaman Configurations, klik Miscellaneous.

  4. Buka bagian Syslog:

    1. Aktifkan Aktifkan penerusan.
    2. Tetapkan Fasilitas ke pengguna.
    3. Di bagian Tingkat keparahan, pilih Pilih Semua.
  5. Klik Submit untuk menyimpan konfigurasi.

    33.9.9. Mengaktifkan konektivitas jaringan OIC ke GDC

Selesaikan langkah-langkah berikut untuk VM nessus1 dan nessus2:

  1. Siapkan variabel lingkungan berikut:

    SITE_ID=
    OIC_DNS_SUFFIX=
    NESSUS_SUFFIX=
    GDC_SERVICES_ORG_URL_SUFFIX=$(kna get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}')
    
  2. Publikasikan konfigurasi ke bidang pengelolaan layanan 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
    
  3. Publikasikan konfigurasi ke bidang kontrol 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. Pembersihan

Hapus direktori Nessus sementara.

rm -rf /tmp/nessus

33.9.11. Pengaktifan lisensi

Bagian ini memberikan detail tentang cara menerapkan lisensi Tenablesc.

  1. Buka UI web Tenablesc menggunakan URL berikut:

    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:?}"
    
  2. Sebelum lisensi diterapkan, UI menampilkan wizard penyiapan.

    Jika UI menampilkan perintah login, berarti lisensi telah diterapkan dan langkah-langkah yang tersisa di bagian ini harus dilewati.

  3. Klik Berikutnya.

  4. Upload file lisensi Tenablesc SecurityCenter-<version>-<number>IPs-<uid>.key.

    Potensi masalah:

    • Error Activating License File. License Is Invalid. No Valid License Found.:

      Error ini berarti file lisensi yang diberikan tidak valid. Cari tahu kemungkinan penyebab berikut:

      1. Nama host salah

        Nama host yang salah ditetapkan di halaman Produk Tenabe.com untuk lisensi ini. Periksa apakah nama host lisensi di halaman Produk Tenable.com adalah tenablesc-as1. Jika nama host tidak cocok: setel ke tenablesc-as1, download lisensi baru, dan gunakan file lisensi baru.

      2. Format file salah

        File lisensi mungkin telah diubah selama transfer: Mirip dengan file praaktivasi Nessus, file lisensi ini tidak dapat diubah selama dalam proses transfer. File persis yang didownload dari halaman Produk Tenable.com harus diupload ke UI Tenable. Anda dapat memeriksa kembali apakah file dimodifikasi dengan membandingkan SHA file sebelum dan sesudah ditransfer.

      3. File lisensi salah

        Pastikan Anda menggunakan Tenable.scfile lisensi yang diperoleh dari halaman Produk Tenable.com. Konten file harus mirip dengan kunci PEM.

      Jika lisensi masih tidak berfungsi, buka metabug dengan tim VULN dan sertakan langkah-langkah pemecahan masalah yang telah dicoba sejauh ini.

  5. Muat ulang halaman. Jika Anda melihat layar login, berarti lisensi berhasil diterapkan.

Tenablesc kini telah sepenuhnya di-bootstrap. Langkah-langkah lebih lanjut untuk mengonfigurasi dan menggunakan Tenablesc tersedia dalam manual operator, yang diharapkan akan diselesaikan nanti setelah bootstrap.

33.9.12. Opsional: Uninstal

Bagian ini berisi perintah untuk menghapus deployment Tenable.sc.

Lakukan langkah-langkah berikut untuk menghapus instalasi diagram Helm dari cluster:

  1. Uninstal diagram Helm dari cluster infrastruktur org:

    helm uninstall --namespace tenablesc-system tenablesc-system --kubeconfig ${ORG_INFRA_KUBECONFIG:?}
    
  2. Uninstal diagram Helm dari server Management API:

    helm uninstall --namespace tenablesc-system tenablesc-admin --kubeconfig ${ORG_MGMT_KUBECONFIG:?}
    
  3. Uninstal diagram Helm untuk VM Tenable SC dari server API pengelolaan:

    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. Penyiapan Tenable.SC

Ikuti NES-G0001 - set up Tenable.SC untuk menyiapkan Tenable.sc.

33.10. Memvalidasi deployment Nessus

Bagian ini menjelaskan langkah-langkah untuk memvalidasi bahwa pengelola dan agen Nessus berjalan dan ditautkan bersama seperti yang diharapkan serta memberikan langkah-langkah untuk memperbaiki potensi masalah umum.

Bagian ini dimaksudkan untuk dijalankan di akhir penginstalan, tetapi sebaiknya juga jalankan langkah-langkah validasi ini sebelum melakukan pemindaian. Langkah-langkah untuk melakukan pemindaian tercakup dalam panduan operator.

Sebelum memulai, ikuti Setel Variabel Lingkungan untuk menyiapkan akses ke cluster admin root dan tentukan alias command line kra.

33.10.1. Memvalidasi pengelompokan

Cara utama untuk memvalidasi bahwa Nessus Manager dan agen ditautkan bersama adalah melalui UI Nessus Manager utama. Di UI, turunan Nessus harus tercantum dalam grup cluster default pengelompokan agen, dan semua agen Nessus harus tercantum dalam grup agen default.

  1. Dapatkan DNS untuk UI Nessus Manager utama:

    echo Nessus Manager UI: https://$(kra get dnsregistration \
        -n tenable-nessus-system nessus -o jsonpath='{.status.fqdn}')
    
  2. Buka browser internet dan buka link dari langkah-langkah sebelumnya. Tindakan ini akan mengarahkan Anda ke UI Nessus Manager utama.

  3. Login ke UI Nessus Manager dengan nama pengguna admin dan sandi default admin.

    Jika terjadi masalah autentikasi saat login, ikuti NES-T0004 untuk mengganti kredensial Nessus dan coba login lagi.

  4. Klik Setelan di bagian atas halaman.

    Di halaman Setelan, tinjau informasi Plugin. Jika nilai untuk Plugin Set tidak ditentukan, ikuti NES-T0001 untuk menerapkan kembali plugin set terbaru ke Nessus Manager utama.

  5. Klik Sensor di bagian atas halaman, lalu klik Pengelompokan Agen.

  6. Klik Default Agent Group untuk melihat semua node terdaftar.

    Jika grup kosong atau node (instance Nessus turunan) untuk organisasi mana pun tidak ada, instance Nessus turunan harus didaftarkan ulang.