ワークロードの既知の脆弱性を自動的にスキャンする


このページでは、実行中のワークロードのコンテナ オペレーティング システム(OS)と言語パッケージに既知の脆弱性がないか自動的にスキャンし、実行可能な緩和戦略(利用可能な場合)を取得する方法について説明します。ワークロードの脆弱性スキャンは、[セキュリティ対策] ダッシュボードの一部です。これは、Google Kubernetes Engine(GKE)クラスタとワークロードのセキュリティ強化に関する独自の情報と推奨事項を提供する一連の機能です。

詳細については、ワークロードの脆弱性スキャンについてをご覧ください。

料金

料金情報については、GKE の [セキュリティ対策] ダッシュボードの料金をご覧ください。

始める前に

作業を始める前に、次のことを確認してください。

  • Google Kubernetes Engine API を有効にします。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化します。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得します。

要件

  • ワークロードの脆弱性スキャンを使用するために必要な権限を取得するには、Google Cloud プロジェクトでのセキュリティ対策閲覧者roles/containersecurity.viewer)IAM ロールの付与を管理者に依頼してください。ロールの付与の詳細については、アクセス権の管理に関する記事をご覧ください。

    この事前定義されたロールには、ワークロードの脆弱性スキャンを使用するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

    必要な権限

    ワークロードの脆弱性スキャンを使用するには、次の権限が必要です。

    • resourcemanager.projects.get
    • resourcemanager.projects.list
    • containersecurity.locations.list
    • containersecurity.locations.get
    • containersecurity.clusterSummaries.list
    • containersecurity.findings.list

    カスタムロールや他の事前定義ロールを使用して、これらの権限を取得できる可能性もあります。

  • コンテナ OS の脆弱性スキャンには、GKE バージョン 1.23.5-gke.700 以降が必要です。Advanced Vulnerability Insights には、GKE バージョン 1.27 以降が必要です。

ワークロードの脆弱性スキャンのティア

脆弱性スキャンをティアで有効にすると、各ティアで次のようなスキャン機能が追加されます。Google Kubernetes Engine(GKE)Enterprise エディションを使用してクラスタのフリートを管理する場合は、すべてのメンバー クラスタに適用されるフリートレベルの脆弱性スキャン設定を構成することもできます。手順については、フリートレベルで GKE セキュリティ対策ダッシュボードの機能を構成するをご覧ください。

ティア 使用可能な機能 GKE バージョンの要件
Standard
standard
コンテナ OS の脆弱性スキャン
  • バージョン 1.23.5-gke.700 以降が必要
  • バージョン 1.27 以降を実行している Autopilot クラスタではデフォルトで有効
  • Standard クラスタではデフォルトで無効
Advanced Vulnerability Insights
enterprise
  • コンテナ OS の脆弱性スキャン
  • 言語パッケージの脆弱性スキャン
  • バージョン 1.27 以降が必要
  • Autopilot と Standard ではデフォルトで無効

各機能の詳細については、ワークロードの脆弱性スキャンについてをご覧ください。

コンテナ OS の脆弱性スキャンを有効にする

バージョン 1.27 以降を実行している新しい Autopilot クラスタでは、Container OS の脆弱性スキャンがデフォルトで有効になっています。このセクションでは、新しい Standard クラスタと、1.27 より前のバージョンを実行している Autopilot クラスタでこの機能を有効にする方法について説明します。

新しいクラスタでコンテナ OS のスキャンを有効にする

gcloud

gcloud CLI を使用して新しい GKE クラスタを作成します。

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --workload-vulnerability-scanning=standard

次のように置き換えます。

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動
  2. [ 作成] をクリックします。
  3. [GKE Standard] セクションで [構成] をクリックします。
  4. ナビゲーション パネルで [セキュリティ] をクリックします。
  5. [セキュリティ] セクションで、[Vulnerability scan] チェックボックスをオンにします。
  6. [基本] オプションを選択します。
  7. クラスタの他のオプションを構成し、準備ができたら [作成] をクリックします。

既存のクラスタでコンテナ OS のスキャンを有効にする

gcloud

クラスタを更新します。

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --workload-vulnerability-scanning=standard

次のように置き換えます。

コンソール

  1. Google Cloud コンソールの [セキュリティ対策] ページに移動します。

    セキュリティ対策に移動
  2. [設定] タブをクリックします。
  3. [脆弱性スキャンが有効なクラスタ] セクションで、[クラスタを選択] をクリックします。
  4. 追加するクラスタのチェックボックスをオンにします。
  5. [アクションを選択する] プルダウン メニューで [基本に設定] を選択します。
  6. [適用] をクリックします。

Advanced Vulnerability Insights を有効にする

Advanced Vulnerability Insights を使用すると、実行中のアプリケーションを継続的にスキャンして、次のタイプの脆弱性を検出できます。

  • コンテナ OS の脆弱性
  • 言語パッケージの脆弱性

Advanced Vulnerability Insights を有効にすると、コンテナ OS の脆弱性スキャン機能が自動的に有効になり、個別に無効にできなくなります。

要件

新しいクラスタで Advanced Vulnerability Insights を有効にする

gcloud

gcloud CLI を使用して新しい GKE クラスタを作成します。

gcloud container clusters create-auto CLUSTER_NAME \
    --location=LOCATION \
    --workload-vulnerability-scanning=enterprise

次のように置き換えます。

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動
  2. [ 作成] をクリックします。
  3. [GKE Standard] セクションで [構成] をクリックします。
  4. ナビゲーション パネルで、[詳細設定] をクリックします。Standard クラスタを作成する場合は、代わりに [セキュリティ] をクリックします。
  5. [セキュリティ] セクションで、[Vulnerability scan] チェックボックスをオンにします。
  6. [詳細] オプションを選択します。
  7. クラスタの他のオプションを構成し、準備ができたら [作成] をクリックします。

既存のクラスタで Advanced Vulnerability Insights を有効にする

gcloud

クラスタを更新します。

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --workload-vulnerability-scanning=enterprise

次のように置き換えます。

コンソール

  1. Google Cloud コンソールの [セキュリティ対策] ページに移動します。

    セキュリティ対策に移動
  2. [設定] タブをクリックします。
  3. [脆弱性スキャンが有効なクラスタ] セクションで、[クラスタを選択] をクリックします。
  4. 追加するクラスタのチェックボックスをオンにします。
  5. [アクションを選択] プルダウン メニューで、[詳細に設定] を選択します。
  6. [適用] をクリックします。

テスト ワークロードをデプロイする

次のマニフェストの例には、デモ用に既知の脆弱性が含まれています。実際には、アプリケーションが脆弱であることがわかっている場合は、実行することはないでしょう。

  1. 次のマニフェストを os-vuln-sample.yaml として保存します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: frontend
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: guestbook
          tier: frontend
      template:
        metadata:
          labels:
            app: guestbook
            tier: frontend
        spec:
          containers:
          - name: php-redis
            image: us-docker.pkg.dev/google-samples/containers/gke/gb-frontend@sha256:dc8de8e0d569d2f828b187528c9317bd6b605c273ac5a282aebe471f630420fc
            env:
            - name: GET_HOSTS_FROM
              value: "dns"
            resources:
              requests:
                cpu: 100m
                memory: 100Mi
            ports:
            - containerPort: 80
    
  2. 次のマニフェストを確認します。このマニフェストには、既知の Maven の脆弱性が含まれています。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: maven-vulns
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mavenvulns
      template:
        metadata:
          labels:
            app: mavenvulns
        spec:
          containers:
          - name: maven-vulns-app
            image: us-docker.pkg.dev/google-samples/containers/gke/security/maven-vulns
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
              - name: PORT
                value: "8080"
            resources:
              requests:
                memory: "1Gi"
                cpu: "500m"
                ephemeral-storage: "1Gi"
              limits:
                memory: "1Gi"
                cpu: "500m"
                ephemeral-storage: "1Gi"
  3. 必要に応じて、クラスタの認証情報を取得します。

    gcloud container clusters get-credentials CLUSTER_NAME \
        --region=COMPUTE_REGION
    
  4. アプリケーションをクラスタにデプロイします。

    kubectl apply -f os-vuln-sample.yaml
    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/security/language-vulns/maven/deployment.yaml
    

その他の脆弱性をテストするには、nginx などの古いバージョンのイメージをステージング環境にデプロイしてみてください。

結果を表示して対応する

最初のスキャンの結果が返されるまでに少なくとも 15 分かかります。これは、スキャンするワークロードの数によって異なります。GKE で [セキュリティ対策] ダッシュボードに結果が表示され、Logging にエントリが自動的に追加されます。

結果を表示する

プロジェクトのクラスタとワークロードで検出された懸念事項の概要を表示する手順は次のとおりです。

  1. Google Cloud コンソールの [セキュリティ対策] ページに移動します。

    [セキュリティ対策] に移動

  2. [懸念事項] タブをクリックします。

  3. [懸念事項のフィルタ] ペインの [問題の種類] セクションで、[脆弱性] チェックボックスをオンにします。

懸念事項の詳細と推奨事項を表示する

特定の脆弱性に関する詳細情報を表示するには、その懸念事項を含む行をクリックします。

[Vulnerability Concern] ペインに次の情報が表示されます。

  • 説明: 問題の説明(該当する場合、CVE 番号など)、脆弱性と潜在的な影響についての詳細な説明。
  • 推奨される対応: 修正済みパッケージのバージョンや修正の適用先など、実施できる脆弱性への対応。

検出された懸念事項のログを表示する

GKE は、検出された各懸念事項について Logging にエントリを追加します。

  1. Google Cloud コンソールで [ログ エクスプローラ] に移動します。

    [ログ エクスプローラ] に移動

  2. [クエリ] フィールドに次のクエリを指定します。

    resource.type="k8s_cluster"
    jsonPayload.@type="type.googleapis.com/cloud.kubernetes.security.containersecurity_logging.Finding"
    jsonPayload.type="FINDING_TYPE_VULNERABILITY"
    
  3. [クエリを実行] をクリックします。

クリーンアップ

  1. デプロイしたサンプル ワークロードを削除します。

    kubectl delete deployment frontend
    
  2. 必要に応じて、使用したクラスタを削除します。

    gcloud container clusters delete CLUSTER_NAME \
        --region=COMPUTE_REGION
    

ワークロードの脆弱性スキャンを無効にする

ワークロードの脆弱性スキャンを無効にするには、gcloud CLI または Google Cloud コンソールを使用します。

gcloud

次のコマンドを実行します。

gcloud container clusters update CLUSTER_NAME \
    --region=LOCATION \
    --workload-vulnerability-scanning=disabled

次のように置き換えます。

コンソール

  1. Google Cloud コンソールの [セキュリティ対策] ページに移動します。

    セキュリティ対策に移動
  2. [設定] タブをクリックします。
  3. [脆弱性スキャンが有効なクラスタ] セクションで、[クラスタを選択] をクリックします。
  4. 削除するクラスタのチェックボックスをオンにします。
  5. [アクションを選択する] プルダウン メニューで [無効に設定] を選択します。
  6. [適用] をクリックします。

次のステップ