1. 소개
이 실습에서는 애플리케이션을 Cloud Run 및 GKE 클러스터에 배포하고 Software Delivery Shield 보안
학습할 내용
- Artifact Registry 보안 통계
- Cloud Run 보안 통계
- GKE Security Posture
2. 설정 및 요구사항
Cloud 프로젝트 설정
- Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.



- 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로
PROJECT_ID로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다. - 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
- 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 전체 프로젝트를 삭제하면 됩니다. Google Cloud 새 사용자에게는 미화 $300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.
환경 설정
검색창 오른쪽에 있는 아이콘을 클릭하여 Cloud Shell을 활성화합니다.

Cloud Shell에서 이 실습에 필요한 API를 사용 설정합니다.
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
container.googleapis.com \
containersecurity.googleapis.com
승인하라는 메시지가 표시되면 '승인'을 클릭하여 계속합니다.

그러면 다음과 비슷한 성공 메시지가 표시될 것입니다.
Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.
명령어를 실행하여 GKE 클러스터를 비동기식으로 만듭니다. 이 값은 실습 후반부에서 사용됩니다.
gcloud beta container clusters create gke-cluster \
--zone us-central1-a \
--async
3. 애플리케이션 준비
먼저 HTTP 요청에 응답하는 간단한 Express 기반 Node.js 애플리케이션을 준비합니다.
Cloud Shell에서 starter-nodejs이라는 새 디렉터리를 만든 다음 해당 디렉터리로 변경합니다.
mkdir starter-nodejs
cd starter-nodejs
아래 명령어를 실행하여 package.json 파일을 만듭니다.
cat > ./package.json << EOF
{
"name": "cloudrun-starter-app",
"version": "1.0.0",
"description": "Node.js Starter Application",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "Apache-2.0",
"dependencies": {
"express": "^4.18.2"
}
}
EOF
위 파일에는 Express 웹 애플리케이션 프레임워크에 대한 종속 항목과 시작 스크립트 명령어가 포함되어 있습니다.
그런 다음 동일한 디렉터리에서 아래 명령어를 실행하여 index.js 파일을 만듭니다.
cat > ./index.js << EOF
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log('Received a request.');
res.send("Hello Cloud Run!");
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log('Listening on port', port);
});
EOF
이 코드는 PORT 환경 변수로 정의한 포트를 리슨하는 기본 웹 서버를 생성합니다. 앱이 완성되었으며 이제 컨테이너화하여 배포할 준비가 되었습니다.
4. Cloud Run 애플리케이션 배포
아래 명령어를 실행하여 애플리케이션을 배포합니다.
gcloud run deploy starter-app \
--source . \
--region us-central1 \
--allow-unauthenticated \
--max-instances=3
Artifact Registry 저장소 생성을 확인합니다.
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created. Do you want to continue (Y/n)? y
5. Artifact Registry 및 Cloud Build 보안 통계
빌드가 완료되는 데 몇 분 정도 걸립니다.
Cloud Build를 열고 최신 빌드의 빌드 아티팩트를 검토합니다.
Google Cloud 콘솔의 Cloud Build UI에는 SLSA 수준, 종속 항목의 취약점, 빌드 출처 기록 등 보안과 관련된 보안 정보를 표시하는 Software Delivery Shield 보안 통계 패널이 있습니다.

생성된 컨테이너 이미지의 보안 통계를 검토합니다. 스캔된 아티팩트의 링크를 따라 Artifact Registry에서 이 이미지의 취약점 세부정보를 확인합니다.
Cloud Shell 콘솔로 돌아가서 Cloud Run 애플리케이션 배포가 완료되었는지 확인합니다.
Done. Service [starter-app] revision [starter-app-00001-maw] has been deployed and is serving 100 percent of traffic. Service URL: https://starter-app-nin5jpgefq-uc.a.run.app
6. Cloud Run 보안 통계
Cloud Run에는 보안 패널 (미리보기)이 포함되어 있습니다. 이 패널은 SLSA 빌드 수준 규정 준수 정보, 빌드 출처, 실행 중인 서비스에서 발견된 취약점과 같은 소프트웨어 공급망 보안 통계를 표시합니다.
Cloud Run을 열고 버전 / 보안 탭에서 보안 통계를 검토합니다.

이 패널에는 다음과 같은 정보가 표시됩니다.
- ID 및 암호화: 기본 Compute Engine 서비스 계정의 이메일 주소 및 배포에 사용되는 암호화 키.
- SLSA 등급: 이 빌드는 SLSA 등급 3입니다. SLSA 등급 3은 SLSA 사양에 따라 소프트웨어 빌드 프로세스의 성숙도 수준을 식별합니다.
- 취약점: 애플리케이션 종속 항목에서 발견된 모든 취약점.
- 빌드 세부정보: 빌더 및 로그 보기 링크와 같은 빌드 세부정보입니다.
- 빌드 출처: 빌드의 출처로, 빌드에 대한 검증 가능한 메타데이터의 모음입니다. 빌드된 이미지의 다이제스트, 입력 소스 위치, 빌드 도구 모음, 빌드 단계, 빌드 기간과 같은 세부정보가 포함됩니다.
7. GKE Security Posture
GKE는 컨테이너 보안 상태를 평가하고 클러스터 설정, 워크로드 구성, 취약점에 대한 적극적인 안내를 제공합니다. 여기에는 GKE 클러스터 및 워크로드를 스캔하여 보안 상태를 개선할 수 있는 실행 가능한 독자적인 권장사항이 제공되는 보안 상태 대시보드 (미리보기)가 포함됩니다.
다음 단계에서는 애플리케이션을 GKE 클러스터에 배포하고 GKE 보안 상황 대시보드에서 보안 통계를 검토합니다.
다음 명령어를 실행하여 클러스터가 준비되었는지 확인합니다.
gcloud beta container clusters list
샘플 출력:
NAME: gke-cluster LOCATION: us-central1-a MASTER_VERSION: 1.24.9-gke.3200 MASTER_IP: 34.29.226.228 MACHINE_TYPE: e2-medium NODE_VERSION: 1.24.9-gke.3200 NUM_NODES: 3 STATUS: RUNNING
GKE 클러스터의 사용자 인증 정보와 구성을 가져옵니다.
gcloud container clusters get-credentials gke-cluster \
--region=us-central1-a
이전 단계에서 빌드된 이미지를 사용하여 애플리케이션을 배포하는 명령어를 실행합니다.
export PROJECT_ID=$(gcloud config get-value project)
kubectl run starter-app \
--image us-central1-docker.pkg.dev/${PROJECT_ID}/cloud-run-source-deploy/starter-app:latest \
--port 8080
GKE 워크로드는 공격 지점을 제한하는 강화된 구성이 있어야 합니다. 클러스터에서 워크로드를 검사하여 구성 문제를 확인하는 것은 대규모인 경우 수동으로 수행하기 어려울 수 있습니다. 보안 상태 대시보드를 사용하여 여러 클러스터에 걸쳐서 실행 중인 모든 워크로드의 구성을 자동으로 스캔하고 보안 상태 개선을 위해 실행 가능하고 점수가 매겨진 결과와 설득력 있는 권장사항을 반환할 수 있습니다.
워크로드 구성 스캔을 사용 설정합니다.
gcloud beta container clusters update gke-cluster \
--region=us-central1-a \
--enable-workload-config-audit
워크로드 구성 스캔 외에도 워크로드 취약점 스캔을 사용 설정하고 GKE 클러스터 및 워크로드 보안 향상을 위해 설득력 있는 정보 및 권장사항을 제공하는 기능 집합인 보안 상태 대시보드에서 결과를 검토할 수 있습니다.
GKE는 NIST와 같은 공개 CVE 데이터베이스의 취약점 데이터를 사용하여 GKE 클러스터에서 실행되는 모든 적격한 포드의 컨테이너 이미지에서 알려진 취약점을 자동으로 스캔합니다.
컨테이너 이미지에서 취약점이 발견되면 GKE가 심각도 등급을 할당하고 Google Cloud 콘솔의 보안 상황 대시보드에 결과를 표시합니다. GKE는 또한 감사 및 추적을 위해 Cloud Logging에 항목을 추가합니다.
워크로드 취약점 스캔을 사용 설정합니다.
gcloud beta container clusters update gke-cluster \
--region=us-central1-a \
--enable-workload-vulnerability-scanning \
--async
GKE 보안 상황 페이지를 엽니다.
워크로드 감사가 완료될 때까지 몇 분 정도 기다린 후 결과를 검토합니다.

구성 문제 및 영향을 받는 워크로드를 검토합니다.

보안 상태 대시보드를 사용하는 이유
보안 상황 대시보드는 적격한 GKE 클러스터에 대해 사용 설정할 수 있는 기본적인 보안 방법입니다. Google Cloud는 다음 이유로 모든 클러스터에서 보안 상황 대시보드를 사용할 것을 권장합니다.
- 최소한의 중단: 기능이 실행 중인 워크로드를 방해하거나 중단하지 않습니다.
- 실행 가능한 권장사항: 사용 가능한 경우 보안 상태 대시보드는 검색된 문제를 해결하기 위한 작업 항목을 제공합니다. 이러한 작업에는 실행할 수 있는 명령, 수행할 구성 변경사항 예시, 취약점 해결을 위해 수행할 작업에 대한 조언이 포함됩니다.
- 시각화: 보안 상태 대시보드는 프로젝트 전반에 걸쳐 클러스터에 영향을 주는 문제를 개략적으로 시각화하고 각 문제에 대한 진행 상황과 잠재적인 영향을 보여주는 차트 및 그래프를 포함합니다.
- 설득력 있는 결과: GKE는 Google 보안팀의 전문 기술 및 업계 표준을 기반으로 검색된 문제에 심각도 등급을 할당합니다.
- 감사 가능한 이벤트 로그: GKE는 보고 및 관측 성능 향상을 위해 검색된 모든 문제를 Logging에 추가합니다.
8. 축하합니다.
축하합니다. Codelab을 완료했습니다.
학습한 내용
- Cloud Run 및 GKE에서 실행되는 빌드 아티팩트 및 애플리케이션의 보안 통계 정보
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
프로젝트 삭제
비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.
—
최종 업데이트: 2023년 3월 21일