在 Kubernetes 上部署微服務 IAST 代理程式

AppScan 支援在 Kubernetes 叢集上自動安裝 IAST 代理程式。若使用 MutatingAdmissionWebhook,IAST 代理程式會自動安裝在任何啟動的 Pod 中。您可以使用 Helm 或 Webhook 指令碼安裝或移除代理程式。

執行這項作業的原因和時機

在 Kubernetes 上安裝 IAST 代理程式的步驟圖例,支援 Java、.NET 與 Node.js 應用程式。

顯示在 Kubernetes 上安裝的影像

一般說明

程序

  1. 下載代理程式:

    依此處說明下載 ASoC Kubernetes IAST 代理程式,並解壓縮 ZIP 檔案內容。

  2. 在叢集中安裝 IAST 代理程式:

    此代理程式可安裝於一或多個名稱空間。系統會部署 MutatingAdmissionWebhook,並自動將 IAST 代理程式注入至所選名稱空間中建立的每個新 Pod。如果未指定名稱空間,則會使用預設名稱空間。

    使用下列其中一項方法安裝代理程式:

  3. 重新啟動現有 Pod:

    安裝完成後,重新啟動目標名稱空間中任何正在執行的 Pod,以確保 IAST 代理程式已成功注入。

  4. 在問題中檢視 Pod 名稱:

    已回報問題的 Pod 名稱可在問題詳細資料標籤中的其他資訊下看到。

  5. 選擇性的: 提供下列選用功能:
    1. 自訂代理程式配置:可用此選項排除特定 Pod。
    2. 使用私有登錄。
    3. 使用以 Helm 為基礎或以指令碼為基礎的安裝方法,在不同的命名空間中部署多個代理程式。
    4. IAST 分析工具:提供完整的服務圖形視圖,可協助減少誤報。目前僅支援 Node.js 和 .NET。

      顯示 Kubernetes Pod 指令注入問題的服務圖表。

以 Helm 為基礎的安裝

執行這項作業的原因和時機

若要使用 Helm 圖表在 Kubernetes 叢集中安裝或解除安裝 IAST 代理程式,請依照下列步驟操作。

程序

  1. 安裝 IAST 代理程式:
    1. 在預設名稱空間中安裝:

      helm install secagent helm-secagent --wait

    2. 在一或多個名稱空間中安裝:
      helm install secagent helm-secagent --wait --set 
      config.namespaceConfig.namespaces={my-namespace1,my-namespace2}
    3. 在同一個叢集中安裝多個代理程式(不同的名稱空間):
      1. 使用前面的步驟,在所需的名稱空間中安裝第一個代理程式。
      2. 若要安裝另一個代理程式,請下載不同的代理程式套件,然後使用相同的指令進行安裝。
        helm upgrade secagent helm-secagent --wait --set 
        config.namespaceConfig.namespaces={my-namespace3,my-namespace4}
    4. 選擇性的: 在啟用分析工具的情況下安裝:
      helm install secagent helm-secagent --wait \
       --set config.namespaceConfig.namespaces={my-namespace} \
       --set analyzer.enabled=true 
  2. 解除安裝 IAST 代理程式:執行此指令:
    helm uninstall secagent

    此操作會移除名為 secagent 的 Helm 版本。接著,重新啟動所有正在執行的 Pod 以完成移除作業。

    如需進階配置與完整文件,請參閱 helm-secagent/README.md。

以指令碼為基礎的安裝

執行這項作業的原因和時機

若要使用指令碼在 Kubernetes 叢集中安裝或解除安裝 IAST 代理程式,請依照下列步驟操作。

程序

  1. 安裝 IAST 代理程式:
    1. 在預設名稱空間中安裝:
      ./install-secagent-webhook.sh
    2. 在一或多個名稱空間中安裝:
      ./install-secagent-webhook.sh -n my-namespace1 -n my-namespace2
    3. 在同一個叢集中安裝多個代理程式(不同的名稱空間):
      1. 使用前面的步驟,在所需的名稱空間中安裝第一個代理程式。
      2. 若要安裝另一個代理程式,請下載不同的代理程式套件,然後使用相同的指令進行安裝。
        ./install-secagent-webhook.sh -n my-namespace3 -n my-namespace4
    4. 選擇性的: 在啟用分析工具的情況下安裝:
      ./install-secagent-webhook.sh -n my-namespace --with-analyzer
  2. 解除安裝 IAST 代理程式:執行此指令:
    ./uninstall-secagent-webhook.sh

    指令碼執行完成後,重新啟動所有正在執行的 Pod 以完成移除作業。

從 IAST 安裝中排除 Pod

程序

  1. 在已納入的名稱空間中排除特定 Pod。

    在 Pod 的 YAML 配置中新增 skip-iast-webhook="true" 標籤。

    任何使用此標籤建立的新 Pod 都會被 IAST 變化 Webhook 忽略。
  2. 若要再次納入該 Pod,請移除此標籤或將其設為 false,然後重新啟動 Pod。
  3. 透過使用者配置排除 Pod:
    如果無法存取或編輯 Kubernetes YAML 檔案,就可以運用使用者配置檔案,從 IAST 檢測中排除 Pod。
    下載的套件 examples 資料夾中,提供了一個範例 user-config.json 檔案。
    範例
    {  
    "name": "demo-app-frontend",  
    "namespace": "default",  
    "ignore": true,  
    "agents": ["java"] 
    }
    欄位說明
    • 名稱(必填):Pod 的名稱。
    • 名稱空間(必填):Pod 執行所在的名稱空間。
    • 忽略(必填):設定為 true 時,IAST 會跳過對此 Pod 的檢測
    • 代理程式(必填):指定 IAST 應嘗試安裝哪些代理程式。如果未提供,IAST 將會嘗試所有支援的代理程式類型。值: [java, net-core, nodejs]

使用私有登錄

執行這項作業的原因和時機

IAST 映像儲存在公開 Azure 登錄中。要在實體隔離環境中執行 IAST,必須將映像載入私有登錄中。

程序

  1. 從公開 IAST 登錄中提取映像:
    docker pull iastappscan.azurecr.io/webhook-certificate:latest
    docker pull iastappscan.azurecr.io/webhook-server:latest
    docker pull iastappscan.azurecr.io/secagent-sidecar:latest
  2. 將映像推送到您的私有登錄。
    Example:
    docker tag iastappscan.azurecr.io/secagent-sidecar:latest 
    my.registry.com/secagent-sidecar:latest
    Docker push my.registry.com/secagent-sidecar:latest
  3. 使用下列參數來執行移轉指令碼:
    ./install-secagent-webhook.sh -n my-namespace --registry=my.registry.com 
    或者,使用 Helm 圖表進行安裝:
     helm install secagent helm-secagent --wait \
    --set config.namespaceConfig.namespaces={test-ns1,test-ns2,test-ns3} \
    --set registry=my.registry.com 
  4. 如果私有登錄需要身分鑑別,請按照下列步驟操作:
    1. 建立 JSON 機密文件:

      JSON 機密文件

    2. 執行指令碼或 Helm 圖表,如下所示:
      Script:
      ./install-secagent-webhook.sh -n my-namespace --registry=my.registry.com  
      --registry-config-file=/path/to/registry-credentials.json
      Helm chart:
       helm install secagent helm-secagent --wait \
      --set config.namespaceConfig.namespaces={test-ns1,test-ns2,test-ns3} \
        --set registry=my.registry.com \
      --set-file registryConfigFile

在受限環境中安裝

執行這項作業的原因和時機

安裝指令碼建立了 secagent 名稱空間,在其中部署了MutatingAdmissionWebhook。
在某些受限制的環境中,不允許自動建立名稱空間。例如:
  • 託管式 Kubernetes 平台,例如企業或雲端管理的叢集,只有管理員才能建立名稱空間。
  • 具備 RBAC 策略的嚴格環境,這些策略會阻止服務帳戶或指令碼建立名稱空間。
  • 已預先配置名稱空間的叢集,必須按現狀使用。

程序

  1. 提前手動建立並配置名稱空間。
  2. 使用前面的步驟,在所需的名稱空間中安裝代理程式。如果名為 secagent 的命名空間已經存在,安裝指令碼會檢測並使用它,但不嘗試重新建立它。
  3. 若要解除安裝,請注意在預設情況下,解除安裝指令碼會刪除 secagent 名稱空間和所有關聯資源。若要解除安裝 Webhook 但不刪除名稱空間和相關 RBAC 配置,請使用:
    ./uninstall-secagent-webhook.sh --keep-namespace