Kubernetes でのマイクロサービス向け IAST エージェントのデプロイ

AppScan は、Kubernetes クラスターへの IAST エージェントの自動インストールをサポートしています。MutatingAdmissionWebhook を使用すると、IAST エージェントはすべての開始ポッドに自動的にインストールされます。Helm スクリプトまたは Webhook スクリプトを使用して、エージェントをインストールまたは削除できます。

このタスクについて

注: Kubernetes エージェントは、AppScan 360° の FIPS 対応ダウンロードには使用できません。
Kubernetes に IAST エージェントをインストールする手順の図 (Java、.NET、Node.js アプリケーションをサポート)

Kubernetes へのインストールを示す画像

一般的な指示

手順

  1. エージェントのダウンロード:

    ここで説明するように AppScan 360° Kubernetes IAST エージェントをダウンロードし、ZIP ファイルの内容を抽出します。

  2. クラスターに IAST エージェントをインストールする:

    エージェントは、1 つ以上の名前空間にインストールできます。MutatingAdmissionWebhook IAST エージェントが配置され、選択された名前空間で作成されるすべての新しいポッドに自動的にインジェクトされます。名前空間を指定しない場合は、デフォルトの名前空間が使用されます。

    以下のいずれかの方法でエージェントをインストールします。

  3. 既存のポッドの再起動:

    インストール後、IAST エージェントがインジェクトされるように、ターゲットの名前空間で実行中のポッドを再起動します。

  4. 問題のポッド名の表示:

    報告された問題のポッド名は、 「問題の詳細」タブの「追加情報」で確認できます。

  5. オプション: 以下のオプション機能が使用できます。
    1. カスタムエージェント構成: 特定のポッドを除外するには、このオプションを使用してください。
    2. プライベート・レジストリーの使用。
    3. Helm ベースまたはスクリプトベースのインストール方法を使用して、異なる名前空間に複数のエージェントを配置します。
    4. IAST アナライザー: 完全なサービスグラフ・ビューが提供され、誤検出の減少に役立ちます。現在、Node.js と .NET で のみサポートされています。

      Kubernetes ポッドでのコマンド・インジェクションの問題を示すサービス・グラフ。

Helm ベースのインストール

このタスクについて

Helm チャートを使用して Kubernetes クラスター内の IAST エージェントをインストールまたはアンインストールするには、次の手順を実行します。

手順

  1. IAST エージェントのインストール:
    1. デフォルトの名前空間にインストールします。

      helm install secagent helm-secagent --wait

    2. 1 つまたは複数の名前空間にインストールします。
      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 リリースが削除されます。実行中のポッドをすべて再起動して、削除を完了します。

    詳細な設定と完全なマニュアルについては helm-secagent/README.md を参照してください。

スクリプトベースのインストール

このタスクについて

スクリプトを使用して Kubernetes クラスター内の IAST エージェントをインストールまたはアンインストールするには、次の手順を実行します。

手順

  1. IAST エージェントのインストール:
    1. デフォルトの名前空間にインストールします。
      ./install-secagent-webhook.sh
    2. 1 つまたは複数の名前空間にインストールします。
      ./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 インストールから除外する

手順

  1. 含まれている名前空間から特定のポッドを除外します。

    skip-iast-webhook="true" ポッドの YAML 構成にラベルを追加します。

    このラベルを使用して作成された新しいポッドは、IAST mutating webhook では無視されます。
  2. ポッドを再び含めるには、ラベルを削除するか false に設定してから、ポッドを再起動します。
  3. ユーザー構成によるポッドの除外:
    Kubernetes YAML ファイルが編集のためにアクセスできない場合は、ユーザー構成ファイルを使用して IAST 計装からポッドを除外できます。
    サンプルの user-config.json ファイルは、ダウンロードしたパッケージのexamples フォルダーにあります。
    例
    {  
    "name": "demo-app-frontend",  
    "namespace": "default",  
    "ignore": true,  
    "agents": ["java"] 
    }
    フィールドの説明
    • name (必須): ポッドの名前。
    • namespace (必須): ポッドが実行されている名前空間。
    • 無視 (オプション): true に設定すると、IAST はこのポッドの計装をスキップします。
    • エージェント (オプション): 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

制限された環境でのインストール

このタスクについて

インストール・スクリプトは、MutatingAdmissionWebhook が配置されている secagent 名前空間を作成します。
一部の制限された環境では、名前空間の自動作成は許可されていません。例:
  • 管理者のみが名前空間を作成できる、エンタープライズ・クラスターやクラウド・マネージド・クラスターなどのマネージド Kubernetes プラットフォーム。
  • サービス・アカウントまたはスクリプトが名前空間を作成できないようにする厳密な RBAC ポリシーを持つ環境。
  • そのまま使用する必要がある、事前にプロビジョニングされた名前空間を持つクラスター。

手順

  1. 事前に名前空間を手動で作成して構成します。
  2. 前の手順を使用して、必要な名前空間にエージェントをインストールします。secagent という名前空間が既に存在する場合、インストール・スクリプトはそれを検出し、再作成を試行せずに使用します。
  3. アンインストールするには、アンインストール・スクリプトはデフォルトで secagent 名前空間と関連するすべてのリソースを削除することに注意してください。名前空間と関連する RBAC 設定を削除せずに Webhook をアンインストールするには、以下を使用します。
    ./uninstall-secagent-webhook.sh --keep-namespace