콘텐츠로 이동

환경 준비 (전체 OS) — clone에서 첫 채점까지

이 한 페이지면 빈 클론에서 M0 첫 PASS까지 갈 수 있다. 트랙은 둘로 나뉜다:

  • Track A — 클러스터 불필요 (M0 · M1 · M6): Python만 있으면 된다. 여기부터 시작하라.
  • Track B — 클러스터 필요 (M2 · M3 · M4 · M5): Docker + kind 스택. RAM이 든다(아래).

빠른 점검: 무엇이 준비됐고 무엇이 빠졌는지 한 번에 보려면 — powershell -File scripts\doctor.ps1


Track A — Python 랩 (M0/M1/M6) · 5분

macOS / Linux / Codespaces — make로 한 번에:

git clone https://github.com/dsaedsae/cloudsec-policy-stack && cd cloudsec-policy-stack
make setup     # .venv 생성 + 의존성 설치 (cedarpy, checkov ...)
make m0        # M0 첫 채점 (처음엔 6/11; m0 타깃은 --ext 포함)
GitHub Codespaces(Code ▸ Codespaces)면 위가 브라우저에서 그대로 돈다. 아래는 Windows(PowerShell) 기준.

먼저 저장소를 클론하고 그 안으로 들어간다 — 이하 모든 명령은 repo 루트(cloudsec-policy-stack/)에서 실행한다(.venv\Scripts\python.exe 경로가 그 기준이다):

git clone https://github.com/dsaedsae/cloudsec-policy-stack
cd cloudsec-policy-stack

.venv/.gitignore라 클론엔 없다. 한 번만 만든다 (PowerShell):

# 1) Python 3.12 가상환경 생성 (winget install Python.Python.3.12; python이 MS Store를 열면 설치 후 py -3.12 -m venv .venv)
python -m venv .venv

# 2) 의존성 설치 (cedarpy, checkov 등)
.venv\Scripts\python.exe -m pip install -r requirements-dev.txt

# 3) 동작 확인 — 목표 상태(8/8)가 보이면 준비 완료
.venv\Scripts\python.exe cedar\authz.py

이제 M0을 시작한다: .venv\Scripts\python.exe labs\m0\grade.py (처음엔 5/8).

  • M1은 위 .venv면 충분(checkov 포함). 이미지 스캔까지 해보려면 trivy(선택): winget install AquaSecurity.Trivy.
  • M6 Part B(ReBAC)Docker Desktop이 필요하다(OpenFGA를 docker로 실행). Docker가 없으면 Part A(Cedar 17/17)만 채점되고 졸업 표시가 안 뜬다.

Linux/CI 형식(./.venv/bin/python ...)은 저장소 루트 README.md의 Quickstart 절을 참고.


Track B — 클러스터 랩 (M2–M5)

설치할 것

먼저 Chocolatey가 필요하다 — 아래 표의 choco install ...은 Chocolatey 패키지 매니저를 쓴다. winget은 Windows 11 내장이지만 kind·cilium-cli는 winget에 없어 choco로 받는다. choco는 기본 탑재가 아니므로 관리자 PowerShell에서 한 번 설치하라(https://chocolatey.org/install): Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

도구 용도 Windows 설치
Docker Desktop kind 노드가 도는 엔진 winget install Docker.DockerDesktop (실행해 두기)
Git for Windows .sh 채점기를 도는 Git Bash winget install Git.Git
kind 로컬 k8s 클러스터 choco install kind
kubectl k8s CLI choco install kubernetes-cli
helm Cilium/Tetragon 차트 choco install kubernetes-helm
cilium-cli up.ps1cilium status (CNI와 다른 별도 바이너리) choco install cilium-cli
terraform kind+Cilium 프로비저닝 winget install Hashicorp.Terraform

.ps1은 PowerShell, .sh는 Git Bash. PowerShell에서 bash를 치면 WSL로 연결돼 실패한다 — 클러스터 채점기는 반드시 Git Bash 창에서 bash labs/mN/grade.sh (forward slash).

RAM

3노드 kind + Cilium/Hubble + Tetragon(eBPF) + SPIRE + WireGuard는 실측 ~6–8GB를 쓴다. Docker Desktop > Settings > Resources > Memory를 최소 8GB로 두라. (3노드인 이유: api/db를 다른 노드에 강제 배치해 M5 크로스노드 WireGuard 증명을 가능케 한다.)

한 세션으로 (RAM 규율)

운영 상세(모듈별 기대결과·OOM 복구·다른 클러스터 보존)는 런북 00 — 랩 클러스터 세션.

M2–M5는 클러스터를 한 번 띄워 연속으로 한 뒤 내린다:

scripts\up.ps1                       # PowerShell — kind+Cilium+... (~5–10분)
kubectl cluster-info --context kind-cloudsec   # 떴는지 확인 (에러면 다시 up.ps1)
# 그다음 Git Bash 창에서 (PowerShell 아님):
bash labs/m2/grade.sh    # 5/5
bash labs/m3/grade.sh    # 7/7
bash labs/m4/grade.sh    # id=0 + sh=137
bash labs/m5/grade.sh    # ET1 PASS
scripts\down.ps1                     # 끝나면 PowerShell — RAM 회수 (다른 클러스터는 보존)

막히면

  • up.ps1이 rollout timeout(180s)으로 FAILED → kubectl --context kind-cloudsec get pods -A로 Pending/OOMKilled/CrashLoopBackOff 확인. 보이면 Docker 메모리를 올리거나 앱을 닫고 scripts\down.ps1scripts\up.ps1 재실행(멱등).
  • bash: command not found → Git for Windows 미설치 (위 표).
  • 채점기가 SKIP: ... 컨텍스트 없음up.ps1을 아직 안 했거나 활성 컨텍스트가 다름 (kubectl config get-contexts).

각 모듈의 채점 명령과 졸업 기준은 트랙 개요의 모듈 사다리에 있다.