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가 반환됩니다. 출력 메시지의 마지막 줄에 있는 name
의 값인 작업 ID를 사용하여 작업을 폴링합니다.
장기 실행 작업 폴링
비동기 스캔 명령어의 출력에서 작업 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에 저장된 이미지의 취약점 정보를 검사하고 지속적으로 업데이트합니다.