On-Demand Scanning API を使用すると、お使いのパソコン、Container Registry、または Artifact Registry に格納されているローカル イメージをスキャンできます。これにより、脆弱性をスキャンするコンテナを細かく制御できます。レジストリにイメージを保存するかどうかを判断する前に、オンデマンド スキャンを使用して CI/CD パイプライン内のイメージをスキャンできます。
料金情報については、料金ページをご覧ください。
このページでは、オンデマンド スキャンを使用してコンテナ イメージを手動でスキャンする方法について説明します。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the On-Demand Scanning API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the On-Demand Scanning API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Cloud SDK インストールに local-extract コンポーネントを追加する
Cloud SDK コンポーネント マネージャーの使用
スキャン コマンドを初めて実行したときに、必須コンポーネントのインストールを求めるプロンプトがコンポーネント マネージャーに表示されます。
システム パッケージ マネージャーを使用する
-
Debian/Ubuntu の場合:
sudo apt install google-cloud-sdk-local-extract
-
Red Hat/Fedora/CentOS の場合:
sudo dnf install google-cloud-sdk-local-extract
または、前のコマンドの
dnf
をyum
に置き換えることもできます。
-
Debian/Ubuntu の場合:
- オンデマンド スキャンで使用するユーザーまたはサービス アカウントに、IAM 役割のオンデマンド スキャン管理者を付与します。プロジェクトのオーナーを実行するためにスキャンを実行する場合、この手順はスキップできます。
コンテナ イメージのスキャン
コンテナ イメージをスキャンするには、次のコマンドを使用します。
gcloud artifacts docker images scan IMAGE_URI [--remote] [--location=(us,europe,asia)] [--async]
ここで
--remote
はオプションのイメージです。Artifact Registry または Container Registry でイメージがリモートでホストされている場合に使用します。 リモート イメージには、IMAGE_URI で次のいずれかの形式を使用します。HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID@sha256:HASH
HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID:HASH
HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID
HOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASH
HOSTNAME/PROJECT_ID/IMAGE_ID:HASH
HOSTNAME/PROJECT_ID/IMAGE_ID
Artifact Registry 内のイメージの場合、IMAGE_URI には
REPOSTIORY_ID
を含める必要があります。ローカル イメージの場合は、
--remote
フラグを省略し、IMAGE_URI で次のいずれかの形式を使用します。IMAGE_ID:TAG
IMAGE_ID
--location
は、スキャンを実行するマルチリージョンを手動で選択するためのオプションのフラグです。物理的なロケーションに近いマルチリージョンに近いリージョンを選択すると、レイテンシを最小限に抑えることができます。指定できるロケーションは、us
、europe
、asia
です。デフォルトの場所はus
です。--async
は、スキャン プロセスを非同期で実行するオプションのフラグです。このフラグを省略すると、デバイスはスキャン プロセスが完了するまでブロックされます。
同期スキャン
次の例は、--async
フラグなしの同期スキャンの出力を示しています。
$ gcloud artifacts docker images scan ubuntu:latest ✓ Scanning container image ✓ Locally extracting packages and versions from local container image ✓ Remotely initiating analysis of packages and versions ✓ Waiting for analysis operation to complete [projects/my-project/locations/us/operations/87d2e137-1d1c-4790-8e5e-daf6c96ae7d7] Done. done: true metadata: '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata createTime: '2021-01-05T23:03:04.185261Z' resourceUri: ubuntu:latest name: projects/my-project/locations/us/operations/87d2e137-1d1c-4790-8e5e-daf6c96ae7d7 response: '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesResponse scan: projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a
スキャン名を使用して脆弱性の結果を取得します。名前は、出力メッセージの最後の行にある scan
の値です。
非同期スキャン
次の例は、非同期スキャンを実行した結果を示しています。
$ gcloud artifacts docker images scan ubuntu:latest --async ✓ Scanning container image ✓ Locally extracting packages and versions from local container image ✓ Remotely initiating analysis of packages and versions Done. Check operation [projects/cloud-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16] for status. metadata: '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata createTime: '2021-01-05T23:04:54.393510Z' resourceUri: ubuntu:latest name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16
これにより、長時間実行オペレーションが起動され、ターミナルをブロックせずにその ID が返されます。演算 ID を使用できます。値はname
出力メッセージの最後の行にオペレーションをポーリングするを使用して Google Cloud Storage とやり取りできます。
長時間実行オペレーションのポーリング
非同期スキャン コマンドの出力のオペレーション ID を使用してオペレーションのステータスを確認します。
gcloud artifacts docker images get-operation LRO_ID
ここで、LRO_ID は長時間実行オペレーション ID です。
非同期スキャンのセクションの例を続け、オペレーションのステータスを確認します。
$ gcloud artifacts docker images get-operation \ projects/cloud-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16 done: true metadata: '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata createTime: '2021-01-05T23:04:54.393510Z' resourceUri: ubuntu:latest name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16 response: '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesResponse scan: projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a
出力に行 done: true
が含まれている場合、スキャン オペレーションは完了しています。 スキャン名を使用して脆弱性の結果を取得します。名前は、出力メッセージの最後の行にある scan
の値です。
スキャン結果の取得
スキャン操作の完了後にスキャン結果を取得するには、次のコマンドを使用します。
gcloud artifacts docker images list-vulnerabilities SCAN_NAME [--limit=X]
ここで
- SCAN_NAME はスキャン名です。これは、長時間実行オペレーションをポーリングしたときに、スキャンが終了した後に表示されます。
--limit=X
は、出力に表示されるオカレンスの数を制限するオプションのフラグです。
次に例を示します。
gcloud artifacts docker images list-vulnerabilities \ projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a createTime: '2021-01-05T23:05:42.956227Z' kind: VULNERABILITY name: projects/my-project/locations/us/occurrences/f82a1efd-a261-4973-acbd-f9854d8b8135 noteName: projects/goog-vulnz/notes/CVE-2018-1000654 resourceUri: ubuntu:latest updateTime: '2021-01-05T23:05:42.956227Z' vulnerability: cvssScore: 7.1 effectiveSeverity: LOW packageIssue: - affectedCpeUri: cpe:/o:canonical:ubuntu_linux:20.04 affectedPackage: libtasn1-6 affectedVersion: kind: NORMAL name: 4.16.0 revision: '2' fixedCpeUri: cpe:/o:canonical:ubuntu_linux:20.04 fixedPackage: libtasn1-6 fixedVersion: kind: MAXIMUM severity: HIGH
このコマンドの出力は、Grafeas 形式のオカレンスのリストです。この場合、イメージで見つかった重大度の高い脆弱性が表示されます。
スキャン結果は、スキャン操作が完了してから 48 時間使用可能です。
次のステップ
- オンデマンド スキャンのコンセプトを確認する。
- Artifact Analysis を使用して、Artifact Registry と Container Registry に格納されているイメージの脆弱性情報をスキャンし、継続的に更新します。