このページでは、実行中のワークロードのコンテナ オペレーティング システム(OS)と言語パッケージに既知の脆弱性がないか自動的にスキャンし、実行可能な緩和戦略(利用可能な場合)を取得する方法について説明します。ワークロードの脆弱性スキャンは、[セキュリティ対策] ダッシュボードの一部です。これは、Google Kubernetes Engine(GKE)クラスタとワークロードのセキュリティ強化に関する独自の情報と推奨事項を提供する一連の機能です。
詳細については、ワークロードの脆弱性スキャンについてをご覧ください。
料金
料金情報については、GKE の [セキュリティ対策] ダッシュボードの料金をご覧ください。
始める前に
始める前に、次の作業が完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
Container Security API を有効にします。
Advanced Vulnerability Insights を使用するには、Container Analysis API を有効にします。
要件
-
ワークロードの脆弱性スキャンの使用に必要な権限を取得するため、Google Cloud プロジェクトに対するセキュリティ ポスチャー閲覧者(
roles/containersecurity.viewer
)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。この事前定義ロールには、ワークロードの脆弱性スキャンを使用するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
ワークロードの脆弱性スキャンを使用するには、次の権限が必要です。
-
resourcemanager.projects.get
-
resourcemanager.projects.list
-
containersecurity.locations.list
-
containersecurity.locations.get
-
containersecurity.clusterSummaries.list
-
containersecurity.findings.list
-
- Advanced Vulnerability Insights には、GKE バージョン 1.27 以降が必要です。
ワークロードの脆弱性スキャンのティア
脆弱性スキャンをティアで有効にすると、各ティアで次のようなスキャン機能が追加されます。Google Kubernetes Engine(GKE)Enterprise エディションを使用してクラスタのフリートを管理する場合は、すべてのメンバー クラスタに適用されるフリートレベルの脆弱性スキャン設定を構成することもできます。手順については、フリートレベルで GKE セキュリティ対策ダッシュボードの機能を構成するをご覧ください。
ティア | 使用可能な機能 | GKE バージョンの要件 |
---|---|---|
Standardstandard |
コンテナ OS の脆弱性スキャン |
|
Advanced Vulnerability Insightsenterprise |
|
|
各機能の詳細については、ワークロードの脆弱性スキャンについてをご覧ください。
コンテナ 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
次のように置き換えます。
CLUSTER_NAME
: 新しいクラスタの名前。LOCATION
: クラスタの Compute Engine のロケーション。
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
Google Kubernetes Engine に移動- [ 作成] をクリックします。
- [GKE Standard] セクションで [構成] をクリックします。
- ナビゲーション パネルで [セキュリティ] をクリックします。
- [セキュリティ] セクションで、[Vulnerability scan] チェックボックスをオンにします。
- [基本] オプションを選択します。
- クラスタの他のオプションを構成し、準備ができたら [作成] をクリックします。
既存のクラスタでコンテナ OS のスキャンを有効にする
gcloud
クラスタを更新します。
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --workload-vulnerability-scanning=standard
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前。LOCATION
: クラスタの Compute Engine のロケーション。
コンソール
Google Cloud コンソールの [セキュリティ対策] ページに移動します。
セキュリティ対策に移動- [設定] タブをクリックします。
- [脆弱性スキャンが有効なクラスタ] セクションで、[クラスタを選択] をクリックします。
- 追加するクラスタのチェックボックスをオンにします。
- [アクションを選択する] プルダウン メニューで [基本に設定] を選択します。
- [適用] をクリックします。
Advanced Vulnerability Insights を有効にする
Advanced Vulnerability Insights を使用すると、実行中のアプリケーションを継続的にスキャンして、次のタイプの脆弱性を検出できます。
- コンテナ OS の脆弱性
- 言語パッケージの脆弱性
Advanced Vulnerability Insights を有効にすると、コンテナ OS の脆弱性スキャン機能が自動的に有効になり、個別に無効にできなくなります。
要件
プロジェクトで Container Analysis API が有効になっていることを確認します。
Container Analysis API を有効にする
新しいクラスタで Advanced Vulnerability Insights を有効にする
gcloud
gcloud CLI を使用して新しい GKE クラスタを作成します。
gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --workload-vulnerability-scanning=enterprise
次のように置き換えます。
CLUSTER_NAME
: 新しいクラスタの名前。LOCATION
: クラスタの Compute Engine のロケーション。
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
Google Kubernetes Engine に移動- [ 作成] をクリックします。
- [GKE Standard] セクションで [構成] をクリックします。
- ナビゲーション パネルで、[詳細設定] をクリックします。Standard クラスタを作成する場合は、代わりに [セキュリティ] をクリックします。
- [セキュリティ] セクションで、[Vulnerability scan] チェックボックスをオンにします。
- [詳細] オプションを選択します。
- クラスタの他のオプションを構成し、準備ができたら [作成] をクリックします。
既存のクラスタで Advanced Vulnerability Insights を有効にする
gcloud
クラスタを更新します。
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --workload-vulnerability-scanning=enterprise
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前。LOCATION
: クラスタの Compute Engine のロケーション。
コンソール
Google Cloud コンソールの [セキュリティ対策] ページに移動します。
セキュリティ対策に移動- [設定] タブをクリックします。
- [脆弱性スキャンが有効なクラスタ] セクションで、[クラスタを選択] をクリックします。
- 追加するクラスタのチェックボックスをオンにします。
- [アクションを選択] プルダウン メニューで、[詳細に設定] を選択します。
- [適用] をクリックします。
テスト ワークロードをデプロイする
次のマニフェストの例には、デモ用に既知の脆弱性が含まれています。実際には、アプリケーションが脆弱であることがわかっている場合は、実行することはないでしょう。
次のマニフェストを
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
次のマニフェストを確認します。このマニフェストには、既知の Maven の脆弱性が含まれています。
必要に応じて、クラスタの認証情報を取得します。
gcloud container clusters get-credentials CLUSTER_NAME \ --region=COMPUTE_REGION
アプリケーションをクラスタにデプロイします。
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 にエントリが自動的に追加されます。
結果を表示する
プロジェクトのクラスタとワークロードで検出された懸念事項の概要を表示する手順は次のとおりです。
Google Cloud コンソールの [セキュリティ対策] ページに移動します。
[懸念事項] タブをクリックします。
[懸念事項のフィルタ] ペインの [問題の種類] セクションで、[脆弱性] チェックボックスをオンにします。
懸念事項の詳細と推奨事項を表示する
特定の脆弱性に関する詳細情報を表示するには、その懸念事項を含む行をクリックします。
[Vulnerability Concern] ペインに次の情報が表示されます。
- 説明: 問題の説明(該当する場合、CVE 番号など)、脆弱性と潜在的な影響についての詳細な説明。
- 推奨される対応: 修正済みパッケージのバージョンや修正の適用先など、実施できる脆弱性への対応。
検出された懸念事項のログを表示する
GKE は、検出された懸念事項ごとに Logging の _Default
ログバケットにエントリを追加します。これらのログは特定の期間のみ保持されます。詳細については、ログの保持期間をご覧ください。
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
ログ エクスプローラに移動[クエリ] フィールドに次のクエリを規定します。
resource.type="k8s_cluster" jsonPayload.@type="type.googleapis.com/cloud.kubernetes.security.containersecurity_logging.Finding" jsonPayload.type="FINDING_TYPE_VULNERABILITY"
[クエリを実行] をクリックします。
GKE が Logging に新しい検出結果を追加したときに通知を受け取るには、このクエリのログベースのアラートを設定します。詳細については、ログベースのアラートの管理をご覧ください。
クリーンアップ
デプロイしたサンプル ワークロードを削除します。
kubectl delete deployment frontend
必要に応じて、使用したクラスタを削除します。
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
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前。LOCATION
: クラスタの Compute Engine のリージョンまたはゾーン。
コンソール
Google Cloud コンソールの [セキュリティ対策] ページに移動します。
セキュリティ対策に移動- [設定] タブをクリックします。
- [脆弱性スキャンが有効なクラスタ] セクションで、[クラスタを選択] をクリックします。
- 削除するクラスタのチェックボックスをオンにします。
- [アクションを選択する] プルダウン メニューで [無効に設定] を選択します。
- [適用] をクリックします。