在 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 的安装

关于此任务

要在 Kubernetes 集群中使用 Helm 图表安装或卸载 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。

    将标签 skip-iast-webhook="true" 添加到 Pod 的 YAML 配置中。

    IAST 突变 webhook 将忽略使用此标签创建的任何新 Pod。
  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