런타임 보안 통계

1. 소개

이 실습에서는 Cloud Run 및 GKE 클러스터에 애플리케이션을 배포하고 Software Delivery Shield Security에서 배포에 대한 보안 통계를 확인합니다.

학습할 내용

  • Artifact Registry 보안 통계
  • Cloud Run 보안 통계
  • GKE Security Posture

2. 설정 및 요구사항

Cloud 프로젝트 설정

  1. Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

환경 설정

검색창 오른쪽에 있는 아이콘을 클릭하여 Cloud Shell을 활성화합니다.

ecdc43ada29e91b.png

Cloud Shell에서 이 실습에 필요한 API를 사용 설정합니다.

gcloud services enable run.googleapis.com \
  cloudbuild.googleapis.com \
  artifactregistry.googleapis.com \
  container.googleapis.com \
  containersecurity.googleapis.com

승인하라는 메시지가 표시되면 '승인'을 클릭합니다. 계속하려면

6356559df3eccdda.png

그러면 다음과 비슷한 성공 메시지가 표시될 것입니다.

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 요청에 응답하는 간단한 익스프레스 기반 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 보안 통계 패널이 포함되어 있습니다.

7d9fd2213f3704c4.png

생성된 컨테이너 이미지에 대한 보안 통계를 검토합니다. 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을 열고 버전 / 보안 탭에서 보안 통계를 검토합니다.

62a9f5d26207e58e.png

이 패널에는 다음과 같은 정보가 표시됩니다.

  • ID 및 암호화: 기본 Compute Engine 서비스 계정의 이메일 주소와 배포에 사용된 암호화 키입니다.
  • SLSA 레벨: 이 빌드는 SLSA 레벨 3이며 SLSA 사양에 따른 소프트웨어 빌드 프로세스의 성숙도 수준을 식별합니다.
  • 취약점: 애플리케이션 종속 항목에서 발견된 모든 취약점
  • 빌드 세부정보: 빌더 및 로그를 볼 수 있는 링크 등 빌드의 세부정보입니다.
  • 빌드 출처: 빌드의 출처로, 빌드에 대해 검증 가능한 메타데이터 모음입니다. 여기에는 빌드된 이미지의 다이제스트, 입력 소스 위치, 빌드 도구 모음, 빌드 단계, 빌드 기간과 같은 세부정보가 포함됩니다.

7. GKE Security Posture

GKE는 컨테이너 보안 상황을 평가하고 클러스터 설정, 워크로드 구성, 취약점에 대한 적극적인 안내를 제공할 수 있습니다. GKE 클러스터 및 워크로드를 스캔하여 보안 상황을 개선하기 위한 독자적이고 실행 가능한 추천을 제공하는 보안 상황 대시보드 (미리보기)가 포함됩니다.

다음 단계에서는 GKE 클러스터에 애플리케이션을 배포하고 GKE Security Posture 대시보드에서 보안 통계를 검토합니다.

다음 명령어를 실행하여 클러스터가 준비되었는지 확인합니다.

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 Security Posture 페이지를 엽니다.

워크로드 감사가 완료될 때까지 몇 분 정도 기다린 후 결과를 검토합니다.

5b1b8158bc55ce67.png

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

58e6f4b6d8eaa99a.png

보안 상태 대시보드를 사용하는 이유

보안 상황 대시보드는 요건을 충족하는 모든 GKE 클러스터에 사용 설정할 수 있는 기본 보안 조치입니다. Google Cloud는 다음과 같은 이유로 모든 클러스터에서 보안 상황 대시보드를 사용하는 것이 좋습니다.

  • 서비스 중단 최소화: 기능이 실행 중인 워크로드를 방해하거나 중단하지 않습니다.
  • 실행 가능한 권고 사항: 보안 상황 대시보드는 가능한 경우, 발견된 문제를 해결하기 위한 작업 항목을 제공합니다. 이러한 작업에는 실행할 수 있는 명령어, 변경할 구성 변경의 예, 취약점을 완화하기 위해 취해야 할 조치에 대한 조언이 포함됩니다.
  • 시각화: 보안 상황 대시보드는 프로젝트 전체의 클러스터에 영향을 미치는 문제를 개략적으로 시각화하며, 진행 상황과 각 문제의 잠재적 영향을 보여주는 차트와 그래프를 포함합니다.
  • 주관적 결과: GKE는 Google 보안팀의 전문성과 업계 표준을 토대로 발견된 문제에 심각도 등급을 부여합니다.
  • 감사 가능한 이벤트 로그: GKE는 발견된 모든 문제를 Logging에 추가하여 보고 가능성과 관측 가능성을 개선합니다.

8. 축하합니다.

축하합니다. Codelab을 완료했습니다.

학습한 내용

  • Cloud Run 및 GKE에서 실행되는 빌드 아티팩트 및 애플리케이션에 대한 보안 통계 정보

삭제

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.

최종 업데이트: 2023년 3월 21일