---
# System prepended metadata

title: NeuVector Onboarding and Best Practices Guide
tags: [neuvector]

---

# NeuVector Onboarding and Best Practices Guide

<style>
.indent-title-1{
  margin-left: 1em;
}
.indent-title-2{
  margin-left: 2em;
}
.indent-title-3{
  margin-left: 3em;
}
</style>

## Preface

<div class="indent-title-1">

可以透過點擊展開以下目錄，選擇想看的內容，跳轉至特定章節

:::warning

:::spoiler 文章目錄

[TOC]

:::

</div>


## Neuvector 各 Container 所扮演的角色

- **Manager**: 顯示 web-based console 的 stateless container。通常只需要一個，而且可以在任何地方執行。Manager 失敗不會影響 Controller 或 enforcer 的任何作業。但是，一些通知（事件）和最近的連線資料會被 Manager 快取到記憶體中，因此檢視這些資料會受到影響。
- **Controller**: NeuVector 的 「control plane」，應該部署在 HA 的架構中，以便在節點故障時不會遺失設定。Controller 可在任何地方執行，但在許多情況下，由於其關鍵性，客戶會選擇將其放置在「management」、master node或 infra node 上。
- **enforcer**: 此 container 作為 daemonset 部署，因此每個要保護的節點上都有一個 Enforcer。通常會部署到每個 Worker 節點，但也可以部屬到 master 和 infra 節點。注意：如果 Enforcer 不在叢集中的節點上，且連線來自該節點上的 Pod，這些 workloads 在 NeuVector 中會顯示為「unmanaged」workloads。
- **scanner**: 根據 Controller 的指示，使用內建的 CVE 資料庫執行弱點掃描。可部署多個 scanner 以增加掃描容量。 scanner 可在任何地方執行，但通常在 Controller 執行的節點上執行。scanner 節點的大小考量請參閱下文。當 scanner 用於建立階段掃描時，也可以獨立調用，例如在 pipeline 中觸發掃描、擷取結果並停止 scanner 。 scanner 包含最新的 CVE 資料庫，因此應每日更新。
- **updater**: 當需要更新 CVE 資料庫時，updater 會透過 Kubernetes cron job 觸發 scanner 的更新。請務必針對您的環境進行設定。



## Architecture

<div class="indent-title-1">

最簡單的部署模式是讓 Kubernetes 或 orchestrator 根據每個 Container 的記憶體（可能還有 cpu）需求，決定將每個 Contiainer 放置在哪裡。對於每個節點資源相近的叢集，而且可以保證所有 workloads 都有足夠的空間，這樣就沒問題了。其他考慮因素，例如獨立節點的維護週期、網路隔離和大小，都可能影響 NeuVector containers 的放置位置（在每個受保護節點上執行的 Enforcer 除外）。 下圖顯示了部署模式範例以及 NeuVector 部署的彈性 : 

![image](https://hackmd.io/_uploads/HyLNwZmoC.png)

1. Kubernetes 可以將 NeuVector Container 放置在任何節點 (在此例中為 worker 節點) 上的部署，除非也啟用了調度至 Master node。在 EKS、AKS 等公有雲管理服務中，NeuVector 只能在 worker 節點上執行。最常見的部署。

![image](https://hackmd.io/_uploads/SkZiv-XiC.png)

2. NeuVector control plane 的 Container 和 scanner 是透過 taints/tolerations 或 labels 放置在 Master node 上。Master node 可根據 control plane 的需求適當調整 node 資源的大小。


![image](https://hackmd.io/_uploads/HJgDuW7oA.png)

3. 類似於 2，但會選擇 node 來執行 NeuVector control plane 和 scanners。這些節點可以是 worker node，而且大小適當。請注意，其中一個 NeuVector node 也允許 workloads 在上面執行，而其他節點則不允許 workloads 在上面執行。

![image](https://hackmd.io/_uploads/H1Cgtbms0.png)

NeuVectorcontrol plane 和 scanners 在 Master node 或 專用節點上執行，但由於 Master node 或專用節點上沒有 workloads ，因此不會在主節點或專用節點上部署 Enforcer。在這種情況下，NeuVector 不會監控在主節點上執行的 system containers，這與公有雲的情況類似。

</div>

### Q&A

* Q: 是否可以在同一個節點上執行兩個或兩個以上的 Controller？
A: 可以，但如果節點領便當，該節點上的所有 Controller 都會丟失。範例部署的 yaml 中有一個「affinity」設定，預設會偏好在不同節點上部署 Controller。
    ```yaml=
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: neuvector-controller-pod
      namespace: neuvector
    spec:
      template:
        spec:
          affinity:
            podAntiAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
              - weight: 100
                podAffinityTerm:
                  labelSelector:
                    matchExpressions:
                    - key: app
                      operator: In
                      values:
                      - neuvector-controller-pod
                  topologyKey: "kubernetes.io/hostname"
    ```
    > 這個 AntiAffinity 規則告訴 Kubernetes 的 scheduler，當指派新的 Pod 時，應該儘量避免將它們指派到已經有標籤 `app=neuvector-controller-pod` 的 Pod 所在的節點上。
* Q: 我們應該在 master 節點和 infra 節點上部署 Enforcer 嗎？
A: 是的，如果可能，建議這樣做，這樣它也可以監控這些節點上的 Container 和網路流量。


## Sizing and Scale

<div class="indent-title-1">

NeuVector Containers 需要足夠的記憶體和 cpu 才能正常運作。這是規劃部署架構時最重要的考量。確保每種 NeuVector Containers 的最低需求 (通常為 1GB RAM) 已經分配且可用。在某些情況下，這應該增加，例如 :
* **Large image scanning**。Scanner Containers 必須有足夠的記憶體，才能將要掃描的 Container images 拉入記憶體並展開。如果要掃瞄大於 1GB 的 Container images ，請將掃瞄機的記憶體增加至略高於預期的最大 Container images 大小。
* **在保護模式下，預期網路連線數很高**。Enforcer 在保護（線上防火牆封鎖）模式下需要 CPU 和記憶體來保持和檢查連線及可能的有效負載 (DLP)。增加記憶體並將一個 CPU 核心專用於 Enforcer 可確保足夠的封包過濾能力。


:::info
Tip： 在 NeuVector Container 上設定不足的 Pod 資源限制，可能會導致意想不到的行為。我們建議您不要在 NeuVector Pod 上設定任何記憶體或 CPU 約束（最大值），如果有需要，請確保根據 staging/production 環境（目標 workloads 規模）中的實際效能特性，有足夠的可用空間。
:::

</div>

### 其他擴充考量

* **K8s 叢集中的節點數量**。隨著叢集中節點數量的增加，從每個 enforcer 到 controllers 的網路連接將共同增加。此外，在 Web 控制台中檢視節點的實際管理可能會變得更具挑戰性。
* **節點上的 Pod（ workloads ）數量**。節點上 Pod 的數量會影響資源消耗，並可能影響網路流量 (節點上 Pod 與 Pod 之間或與其他節點之間的網路流量)。NeuVector Enforcer 也將會有更多的 Pods 來收集掃描資料和合規性資料，以傳送給 controllers。
* 叢集中的 Namespaces、Containers 和其他資產數量。隨著 Containers、 Namespaces、群組和其他資產的增加，主控台中的各種顯示會變得更繁忙，可能需要更多的時間來載入。大多數畫面都有篩選器可用，以快速隔離要檢視的 Namespaces或 Containers/pod。
* Registry 中要掃描 Container images 的數量。如果 Registry 中的 Container images 數量超過一千個，且/或掃描或重新掃描整個 Registry/repository 所需的時間超過預期，請考慮在不同節點上部署多個 scanner pod。請記住，每個 scanner pod 會在掃描期間消耗其主機上的資源。自動擴展功能可設定為自動擴展可用 scanner pod 的數量，以滿足需求。
* 聯邦中的叢集數量。多叢集 Primary 會在其與遠端叢集之間啟動雙向連線。此外，如果部署了聯邦規則，這些規則會在發生任何變更時推送至所有遠端叢集。

<div class="indent-title-1">

:::info
提示： 在與預期生產環境相似的環境中，觀察所有 pod（包括 NeuVector）的記憶體和 CPU 消耗統計，以確保沒有觀察到任何不利影響。
:::


:::info
提示：在網路拓樸中，選擇一個或多個 namespaces 和核取標記，以將檢視限制為選取的物件。這將使地圖的載入速度更快。
:::

</div>

### Q&A

* Q：運行 Controller 的 Host 主機最低規格為何？
A：假設 Controller 將與其他系統的 Containers 或 workloads 一起執行，我們建議至少使用 16 GB RAM 和 4 個 CPU 核心。
* Q：NeuVector 最多可支援多少節點？
A：NeuVector 沒有硬性的限制，但是根據環境和主機資源的不同，超過 500 個節點的叢集可能會遇到實際的困難。


## Deployment and Initial Configuration

### Q&A

* Q：樣本部署預設值需要做哪些變更？
A：變更可能包括： 
    1. Manager Service 的存取方法。Loadbalancer、nodeport、ingress controllers ...等。
    2. 如果從不同的 Registries 拉取重新命名或重新標記的 Container Image。就要修改 Container Image Path's/Registries/names/version。
    3. Container run-time 的 volume mounts。預設 containerd、CRI-O、docker 及其他需要變更磁碟區掛載的 run-times。
    4. 多叢集 (主叢集/遠端叢集)。如果需要多叢集，請啟用 service access。
    5. Controller、scanner Replicas 的數量。Controller 的 Replcas 預設值為 3。
    6. 用於 Control-plane 節點部署的 Taints/tolerations。用於控制 Controller 被部署在哪些節點，或 enforcers 是否應該部署在 master node 上。


## Managing NeuVector

<div class="indent-title-1">

大多數 NeuVector 部署至少部分是透過網頁式主控台來管理。然而，REST API、CLI、configMaps 和 CRD 都可用於 non-console-based (非控制台管理)。


:::info
Tip： 在「My Profile」功能表 (右上方) 中，增加「Session Timeout」，這樣您就不會在 5 分鐘後登出。
:::


簡單的部署可以使用整合式 load balancer (例如 EKS、AKS、GKE、IKS 上的 load balancer) 來啟用 Manager 服務的外部存取，或是開放一個 nodePort 供存取。請注意，nodePort 存取有其安全性考量，因為它會在每個節點上開放連接埠供外部存取，而不是強制透過 load balancer 或 ingress controller 進入入口。


:::info
Tip： 使用 load balancer 或 ingress controller (例如 nginx) 來控制 NeuVector console 的存取。
:::



:::info
Tip：SSL 連線可以在入口 ingress controller 終止，並使用 HTTP 連線到 manager。在 Manager deployment 的 YAML 檔中使用環境變數關閉到 manager 的 SSL
:::

</div>

### Q&A


* Q：Manager container 可以在叢集外執行嗎？
A：可以，但這並不常見。Manager 需要將 controller 的 REST API 暴露在叢集之外。
* Q：NeuVector Manager 服務可以使用 Istio 等 service mesh 類型的 ingress controller 嗎？
A：不支援。請使用其他 Kubernetes ingress 方法。
* Q：Manager 可以管理多個叢集嗎？
A：可以，這需要部署 Multi-cluster federation (多叢集聯邦)的 controllers。可能還需要單獨的授權。
* Q：自簽證書可以更換嗎？
A：可以。


## Policy Modes – Discover, Monitor, Protect

<div class="indent-title-1">

每個 Group 的 policy 模式會決定 NeuVector 在偵測到 processes、網路連線和檔案活動時會做什麼。一般而言，「Discover」模式應該用於測試和暫存環境，以建立保護應用程式 workloads 的白名單規則。Monitor 或 Protect 模式應在生產環境中使用，以回應 Security Events (安全事件)。也可在測試/暫存環境中使用「Monitor」或「Protect」模式，觀察 NeuVector 在生產環境中的預期 run-time 行為。

:::info
Tip： 在「Discover」模式下部署 workloads 後，執行測試 script 或流量，以運用 Container 中的所有功能（網路連線、process、檔案）。當幾天未建立新規則時，請將群組切換至 Monitor 模式，並觀察至少一週。尋找 Notification -> Security Events，看看合法活動是否被警告。加入適當的網路或程序規則，將合法活動列入白名單。如果需要 Protect (封鎖) 模式，請將群組切換至 Protect 模式，並在接下來幾天特別注意任何被封鎖的活動。
:::

:::info
Tip：預設會啟用 Container 中的程序和檔案保護的 Zero-drift 模式。這對於允許有限 functions/processes 的強化 Container 非常有用。
:::

</div>

### Q&A

* Q：在轉移至「Monitor」或「Protect」模式之前，我應該讓群組處於「Discover」模式多久？
A：在執行所有應用程式測試，並確定 NeuVector 已學會所有網路連線和程序之後，最快也要幾個小時。也可能需要數天或一週的時間。舉例來說，有些開放原始碼工具會定期與外部連線以檢查更新，而您可能看不到這些連線。您應該決定是否允許這些外部連線，如果允許，就為它們加入白名單規則。好的做法是將規則匯出為 CRD yaml 檔案，並與應用程式開發人員一起檢閱，以確認預期的行為。

## Backups and Persistent Data

<div class="indent-title-1">

NeuVector 的設定以及任何狀態資料 (連線、通知等) 都會在可用的 controllers 之間同步。但是，如果所有 controllers 都領便當，設定和狀態資料就會遺失。若要讓 NeuVector 在領便當後自動復原叢集的組態，請啟用 persistent volume。當 controllers 啟動時，它們會從 persistent volume 中提取最新備份的設定資訊。

:::info
Tip： 建立 RWX persistent volume 來自動備份 NeuVector 設定，並在任何 NeuVector、主機作業系統或 orchestrator 更新（重新開機）之前，定期透過 Web Console 或 REST API 進行手動匯出備份。某些公共雲端儲存系統不支援 RWX，因此可能需要部署 NFS 等獨立儲存設備。
:::

</div>

### Q&A

* Q：匯出的備份檔案可以匯入不同的群集進行設定嗎？
A：不建議這樣做，因為名稱、namespace、IP 位址、system container 或其他組態設定的變更，可能在目標群集中無法運作。請使用 Helm、configMaps 和 CRD 來自動設定叢集。


## Integration Into CI/CD Pipeline

<div class="indent-title-1">

安全應該儘可能整合並自動化到 CI/CD pipeline 中。漏洞與合規性管理將在下一節說明。整合可使用 NeuVector 的 plug-ins (外掛程式)與支援介面，或使用 REST API 自訂。 Admission control 是 Pipeline 與生產環境之間的重要橋樑，建議啟用。


:::info
Tip：在 Policy -> Admission Control 中啟用並測試 admission controller。然後建立一些簡單的規則來阻止未經授權的部署。即使尚未設定 registry scan，根據 registry 的名稱、namespace 或其他一般條件的規則，也可針對 Container image 的部署提供保障。
:::

</div>

## Enterprise Integration: Alerts, Notifications, SIEM/SYSLOG, Webhooks

<div class="indent-title-1">

NeuVector 在「Notifications」功能表中顯示 alerts，並透過 SYSLOG、webhooks 或 Prometheus exporter 匯出事件。事件也可以使用 REST API 匯出。NeuVector 會顯示每種事件類型 (security events、risk reports 及一般事件) 的最新事件。不過，這些資料僅限於每種類型最近的 4K 事件。預期事件將透過 SYSLOG 或其他方式匯出，以進行永久儲存、alerting 及進階處理。

:::info
Tip：使用 webhooks 將特殊事件通知直接傳送至 webhook endpoint (例如 Slack) 或叢集內的自訂 webhook receptor container，以便進行額外處理。
:::

:::info
Tip: 提示： 若要與 alerting/paging 系統、case management (案件管理)系統或 SIEM 自訂整合，請使用 REST API、webhooks 或其組合。
:::

</div>

## Policy Migration – Staging to Production

<div class="indent-title-1">

一旦應用程式經過測試，且 NeuVector 的執行時 security rules 經過驗證，就應該將規則複製到生產環境中。

:::info
Tip：使用 NeuVector CRD 將 security rules 從暫存環境匯出、檢閱、登入及遷移到生產環境。 
:::

:::info
Tip：在生產環境中，在「Settings」->「Configuration」中將「New Services Mode」設定為「Monitor」或「Protect」，以防止任何未知服務啟動而不產生警示。在部署任何新的 workloads 之前，請確保透過 CRD、REST API 或主控台部署白名單規則 (程序、網路、檔案)，以便 workloads 可以在受保護狀態下不中斷地開始執行。
:::

</div>

### Q&A

* Q：在轉移到生產環境之前，我們應該在暫存環境中運行多久？
A：確保您的暫存環境擁有與生產環境相同的 node、orchestrator、system containers 及其他重要資產。也應該測試預期在生產中的 Initial application workloads，但預期新的和更新的應用程式會持續發生。對於初始部署，這通常需要在暫存環境中進行幾週的測試，而對於新增或更新的 application workloads，則需要幾天到幾週的時間。


* Q：我們應該在生產中以「Monitor」或「Protect」模式執行嗎？
A：一開始，我們建議您在生產中以 Monitor 模式執行所有群組數天或數週，直到您對通知中偵測到的任何安全事件感到滿意為止。然後，您可以切換到 Protect 模式，只針對希望 NeuVector 阻擋網路、程序和檔案違規的群組。這可以根據具有出口連線的群組、關鍵資料庫，或是您 100% 確信所有預期行為都已列入白名單的 workloads 來決定。

* Q：我可以使用「Settings」->「Configuration」中的 export/import 設定檔案來進行遷移嗎？
答：不建議這樣做，因為名稱、namespace、IP 位址、system containers 或其他設定可能有變，無法在目標叢集中運作。使用 CRD 來進行遷移，方法是匯出群組規則，並在 yamls 中編輯這些規則，以反映生產環境中的任何變更，然後再進行部署。ConfigMaps 可用於在暫存環境和生產環境中一致配置其他設定。

<div class="indent-title-1">

> References
>* Using CRD: https://open-docs.neuvector.com/policy/usingcrd

</div>

## Vulnerability and Compliance Management

<div class="indent-title-1">

每家公司都會有不同的流程和標準來管理  Vulnerability (漏洞)和 Compliance (合規性) 測試。NeuVector 可彈性適應您的流程。

弱點與法規遵循管理的主要最佳實務包括：
* 要求開發人員在有修復方法時修復關鍵弱點，並盡可能在建立階段就停止或警示。
* 如果在 registry 中的現有 (已核准) Container images 或生產環境的 Container 中發現新的弱點，通知開發人員或適當的團隊。
* 提供寬限期，讓開發人員修復關鍵弱點，但確保運作中的 workloads 受到 NeuVector 白名單規則與「virtual patching」的保護。請參閱以下有關 virtual patching 的 Q&A 與參考連結， virtual patching 可保護執行漏洞的容器。
* 允許開發人員與 devops 團隊申請政策的例外情況，並能夠忽略某些漏洞掃描警示 (根據 CVE 編號)。

:::info
Tip：利用欄位「已修復」、「發佈日期」和自訂「Author/developer」 的 metadata，自動執行政策，要求開發者修復已發佈超過 7 天 (寬限期) 的弱點 (已修復)。
:::

</div>

### Q&A

* Q：為什麼 NeuVector 的掃描報告與我使用的其他 scanner 不同？
A：每家掃描廠商都維護自己的 CVE 資料庫，以及對 CVE 來源的詮釋，例如嚴重性/關鍵性等級。
* Q：NeuVector 是否可以在 Container images 推送到 registry 時立即進行掃描？
A：有些 registry (例如 Openshift) 支援 imagestreams，可讓 NeuVector 在 Container images 推送時自動掃描。對於其他 registry，則可設定定期掃描，每隔幾分鐘或幾小時掃描一次新 Container images。對於真正的按需掃描，可使用 REST API 在特定 Container images 推送至 registry 後觸發掃描。
* Q：什麼是 Virtual Patching (虛擬修補)？
A：NeuVector 所使用的這個詞彙，是指在生產環境中運行的  Container，如果存在 critical 的漏洞，NeuVector 在 Monitor 或 Protect 模式下運行時，會對其進行「virtually patched (虛擬修補)」，因為任何利用漏洞的嘗試都會立即被偵測到並封鎖，因為它會創建未經授權的 process、網路連線或檔案存取。

## Compliance Management

<div class="indent-title-1">

NeuVector 的 Compliance (合規性)檢查包括 CIS benchmarks (docker、kubernetes、openshift 等) 以及自訂合規性檢查 (在 Container 或主機上執行的 script)。這些都可以針對 PCI、GDPR 等各種產業標準進行 tag 與報告。

</div>

### Q&A

* Q：我可以自訂合規性報告嗎？
A：可以，透過標記適當的合規檢查，可以建立 PCI、GDPR 及其他的標準報告。每項報告都可以自訂，以包含或排除某些檢查。

## Improving the Security Risk Score in the Dashboard

<div class="indent-title-1">

Dashboard 提供整體安全風險評分，該評分根據 Container 的 Policy 模式、ingress/egress 連線、vulnerabilities (弱點)、privileged/root Container 和 admission
control。使用分數旁邊的精靈工具來逐步改善您的分數。


:::info
Tip：通常不可能將風險分數降至零，因為任何執行中的 Container、Kubernetes system container 或 egress 連線都代表風險。任何在「良好」範圍（小於 20）內的分數都被認為是可以接受的。
:::

</div>

## Network Rules – Ingress, Egress, Segmentation

<div class="indent-title-1">

網路 Segmentation (分割)、檢查和保護是 run-time 最重要的安全防護措施。應仔細檢閱和調整網路規則，以達到所需的行為（允許、警示、封鎖）。NeuVector 在「發現」模式下學習到的網路規則，在某些情況下會變得支離破碎，例如 : 

* 連線來源或目的地總是在變，因為使用的是隨機連接埠，例如透過 load balancer 或 ingress 連接
* 部屬同一應用程式的 Pod 或同一應用程式的新版本在命名慣例中有版本號或隨機字串，導致 NeuVector 認為這是一個新應用程式，並為其建立新規則。

:::info
Tip： 透過在 Policy -> Network Rules 中篩選應用程式，檢視並編輯影響每個應用程式的網路規則。如果您注意到許多規則重複出現，且出發地或目的地的 IP 位址、連接埠或節點不斷變更，請考慮如何根據通訊協定、標籤或其他條件 (有或沒有通配符) 建立更高層級的網路規則，以整合這些規則。
:::

Egress 的連接可能是高風險的來源，因此應加以評估，並在可能的情況下，聲明只允許存取特定目的地。

:::info
Tip： 為需要存取叢及外部的 workloads 建立自訂出口規則。使用 `address=<destination>` 建立目標 (目的地) 自訂群組，並建立相對應的網路規則，允許從 Pod 群組存取到目標群組，可能的話使用應用程式通訊協定 (例如 MySQL、redis、mongodb、SSL 等)。
:::

在部署過程中套用的 Pod 標籤也可以用來強制執行規則。舉例來說，`scope=cde`、`scope=non_cde`、`external_access=allowed` 都是標籤的範例，這些標籤可以套用到 Pod，並在 NeuVector 中為這些 Pod 建立規則。可以建立符合標籤的自訂群組，並將規則套用至該群組。

</div>
</div>

### Q&A

* Q：網路規則可以訂製嗎？
A：可以，自訂和學習的網路規則可以透過 console 或 REST API 排序。聯邦規則和 CRD 建立的規則無法編輯，且總是先進行評估（即優先於其他規則）。
* Q：建立自訂群組時，可以使用通配符嗎？
Q：可以，通配符通常支援在條件中使用，例如 `address=*.google.com`。如果需要更靈活的匹配，也可以使用 regex 表達式，用 `~` 符號表示，例如 `label~my.label*-xyz`。
* Q：我可以將自訂群組的 `policymode` 變更為 Monitor 或 Protect 嗎？
A：目前自訂群組的政策模式是無法設定的，因為所引用的底層 Pod 可能處於不同的模式 (Discover、Monitor、Protect)。
* Q：DLP 網路 payload 檢查 regex 引擎可否用於其他政策？
A：可以，它可以用於 secrets 檢查、檢查 HTTP 標頭或路徑，或其他用途。
* Q：某些群組可以設定為 block，而其他群組只設定為警示嗎？
A：可以，NeuVector 中每個已學習的「Group」都可以有不同的模式：「Discover」、「Monitor」或「Protect」。
* Q：是否可以將「Group」設定為封鎖外部 egress 連線，但只在叢集或 namespace 中的其他 pod 違規時發出警示？
A：目前不可以。群組對於所有流量只能使用一種模式。我們正考慮在未來的版本中使用更細緻的政策。


## Automation – REST API

<div class="indent-title-1">

使用 REST API 可直接在 Controller 上執行任何動作，而無需透過 Web console。Manager  container 使用 REST API 存取 Controller。REST API 的預設連接埠為 `10443`，可從叢集內部存取。若要從群集外部對 Controller 進行呼叫，請在外部將 REST API expose 為服務。


:::info
Tip：在 script 中使用 REST API 來自動執行 Policy 備份、根據可疑活動的封包擷取、觸發 Container images 掃描、讀取掃描結果等工作。
:::

</div>

### Q&A

* Q： authentication (驗證) 和 authorization (授權) 如何執行？
A：api token 請求需要使用者帳號和密碼進行驗證。使用者的角色決定該使用者可透過 api 進行哪些動作。
* Q：token 可使用多久？
A：token 的持續時間與使用者個人資料中設定的使用者逾時時間相同。例如，如果超時設定為 10 分鐘 (600 秒)，只要在 10 分鐘內使用，token 就會有效。10 分鐘未使用後，它就會過期。


## Automation – Security Policy, CRD 

<div class="indent-title-1">

NeuVector Custom Resource Definition (CRD) 提供了一個強大的機制，可在 NeuVector 中宣告並自動化 security rules (安全規則)。它可讓安全、開發與開發人員協同討論與檢視允許的應用程式行為。

:::info
Tip：使用 NeuVector 來學習應用程式在 staging/test 中的行為，然後將規則匯出為 CRD，以便與開發人員和 devops 團隊一起檢閱與核准。然後檢查 CRD，像管理其他「code (程式碼)」一樣管理安全政策。
:::

CRD 用來「宣告」一組 Groups、rules 和 NeuVector objects 的 policy 模式。一旦宣告後，就只能套用更新的 CRD 來編輯。

:::info
Tip：使用 CRD 設定不與特定應用程式行為掛鉤的「global」安全規則，例如在「所有 Container」上防止 SSH 或 SCP (Container 是 NeuVector 中的保留群組名稱，可用於此)。或是允許外部 api 存取特定標籤的 Pod。 
:::

</div>

### Q&A

* Q：如何匯出應用程式的 CRD？
A：移至 Groups，選擇要匯出的 Group，然後按一下匯出 Group Policy。選取 Groups 的所有 rules，以及相關 Groups (即在 network rules [網路規則] 中定義為選取群組的來源或目的地的群組) 將會匯出。
* Q：在 CRD 中應用之前，我可以變更自訂群組的「policy mode」嗎？
A：目前，自訂 Group 的 policy mode 必須為 `null`，因為所引用的底層 Pod 可能處於不同的模式 (Discover、Monitor、Protect)。

## Reviewing Notifications and Reducing False Positives

<div class="indent-title-1">

在 NeuVector 部署的最初幾天或幾週內，應檢查事件以確定它們是否為誤報。有幾種方法可以減少誤報：
1. 檢視「Notifications」中的事件，如果適用，選擇「Review Rule」按鈕，立即新增違規事件的白名單規則。
2. 檢閱事件通知後，在適當的政策功能表中手動建立白名單規則 - admission control、process (Group 下)、network rules 等。
3. 建立 Response rule，以「抑制通知」這些類型的事件。


:::info
Tip： 盡可能建立白名單規則，以允許被報告為違反的行為。若要暫時壓制通知，請使用 Response rule，此規則稍後可輕鬆停用或移除。
:::

</div>

## Updating – NeuVector, Nodes, Host OS, Orchestrator Platforms

<div class="indent-title-1">

NeuVector 支援對 critical containers 進行滾動式的更新，但對於環境的任何更新，都應該特別小心。controllers 之間會維持一個狀態，如果所有 controllers 同時不可用，這個狀態就會消失。因此，在升級 hosts/nodes (重新開機) 或 orchestrator (例如 Kubernetes) 時，請特別小心，即使已啟用節點 draining process。


:::info
Tip： 對於主機作業系統或如 Kubernetes 等 orchestrator 平台的更新，需要重新啟動節點或排出 Pod 時，請確保至少有一個 NeuVector Controller 一直處於活動狀態。當重新啟動有 Controller 的節點時，請觀察新 Controller，以確保它至少有 60 秒（幾分鐘更好）處於 available (可用) 的狀態，以確保它有時間與領導 Controller 同步狀態，然後再重新啟動下一個有 Controller 的節點。
:::


:::info
Tip： 在更新 NeuVector、其運行的主機或 orchestrator 之前，請務必手動備份整個設定檔。您可以在 `Settings` -> `Configuration` -> `Export All` 中匯出備份。
:::

</div>

## Appendix - Pre-Deployment Checklist


1. 收集所需的資訊
    * [ ] NeuVector 版本和 K8s 版本。
    * [ ] 拉取 NeuVector Container image 的 Dockerhub ID。
    * [ ] 目標節點的 CPU/記憶體 設定文件。
    * [ ] 正在使用的 Container run-time。
    * [ ] manager 使用 Ingress 的方法對外。
    * [ ] SYSLOG servers、LDAP/AD、SSO/SAML servers 的整合資訊。
2. 檢閱 [NeuVector 官方文件](https://open-docs.neuvector.com/)
    * [ ] 特別是第 1 節 [Deployment Preparation](https://open-docs.neuvector.com/basics/installation/native)
    * [ ] 第 2 節 [Deploying](https://open-docs.neuvector.com/deploying/production)。每個協調平台也在本節有特定的部署說明。
3. 準備目標環境
    * [ ] 如果不是從 NeuVector docker hub registry 動態拉取，請預先拉取 images。
    * [ ] 建立 RWX 儲存空間（如果使用持久化儲存空間來備份設定） ‧ 
4. 確保網路連通性
    * [ ] 測試從 Cluster 到 Registry 或 docker hub 拉取映像的能力。
    * [ ] 啟用並測試從集群內部存取 Registry 以進行 Registry 掃描（如適用）。
    * [ ] 透過 load balancer、route、IP/port（預設埠 8443），存取集群中的 manager service 的控制台。
    * [ ] 檢查網路或本機防火牆（如 firewalld）是否阻擋 NeuVector 所需連接埠的存取。
    * [ ] 啟用 SYSLOG（預設埠514）和 webhook 通知所需的 outbound connections。
5. 建立部署流程與範本
    * [ ] 決定部署方法： `Helm`、`kubectl/yaml` 檔案、`Operator`...
    * [ ] 檢閱範例 yaml 檔案和 值 與設定選項
    * [ ] Kubernetes - https://open-docs.neuvector.com/deploying/kubernetes
    * [ ] 從 Rancher Manager 部署 - https://opendocs.neuvector.com/deploying/rancher
    * [ ] Openshift - https://open-docs.neuvector.com/deploying/openshift
    * [ ] 在 Helm 中編輯 yamls 或部署值（如適用）：
        * [ ] Manager 存取方式 - LoadBalancer、ingress、NodePort...
        * [ ] 啟用/停用多叢集 master 和 remote services 
        * [ ] Container Images 名稱、版本標籤或 NeuVector images 的路徑
        * [ ] 若為 containerd 或 CRI-O 則為 Container run-time
        * [ ] 控制 NeuVector Pod 部署位置的 Taints/tolerations 或節點標籤。


## Ref

- [NeuVector Onboarding and Best Practices Guide
](https://open-docs.neuvector.com/assets/files/NV_Onboarding_5.0-e780f27e1cde02dad5ebf3650377aff0.pdf)








