쿠버네티스 07. 보안
4주 과정, 하루 1시간

쿠버네티스 07. 보안

클러스터를 공격자 시각으로 보고, 인증부터 인가, 어드미션, 파드 하드닝, 시크릿, 공급망, 런타임 탐지까지 방어선을 층층이 쌓는 과정입니다. CKS 시험 범위를 실습으로 관통합니다.

다음 할 일

…

실습 방법 보기
전체 진행0 / 0
진행 상황: 이 브라우저에 저장

공부하는 방법

매일 1시간몰아서 8시간보다 매일 1시간이 오래 남습니다. 과제마다 예상 시간이 적혀 있습니다.
읽기 20%, 손 80%개념을 읽었으면 바로 kubectl로 눈으로 확인하고, 막았다면 일부러 뚫어 보며 정말 막혔는지 검증합니다.
일부러 부수기설정을 틀리게 바꾸고, 에러 메시지만 보고 원인을 찾습니다.
소리 내 설명하기단계 끝의 자가 점검에 답을 보지 않고 말해 봅니다. 막히면 그 과제로 돌아갑니다.
맥북에서 실습하기Windows에서 한다면 건너뛰세요

맥에서는 Ubuntu 가상 머신(VM)을 하나 띄워 그 안에서 실습합니다. 그러면 이 사이트의 명령을 Windows(WSL)와 똑같이 쓸 수 있습니다. 사이트에 "WSL Ubuntu 터미널"이라고 나오면 "VM 터미널"로 읽으세요.

  1. Homebrew 설치 (맥용 설치 관리자)회사 맥이면 설치 전에 IT팀 승인을 확인하세요.
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. Ubuntu 가상 머신 만들고 들어가기Multipass는 무료입니다. 이 VM이 Windows의 WSL 역할을 합니다.
    brew install --cask multipass                                  # 가상 머신 관리 도구 설치
    multipass launch --name ubuntu --cpus 2 --memory 4G --disk 20G  # Ubuntu VM 만들기 (쿠버네티스는 --memory 8G 권장)
    multipass shell ubuntu                                          # VM 터미널로 들어가기
    # 여기서부터 사이트의 "WSL Ubuntu 터미널" 명령을 그대로 실행
  3. 맥 브라우저에서 VM 안의 서비스 열기WSL과 달리 localhost가 자동으로 연결되지 않습니다.
    multipass info ubuntu | grep IPv4  # VM의 IP 확인 (예: 192.168.64.5)
    # 브라우저에서 localhost 대신 http://<VM IP>:<포트> 로 접속
    # kubectl port-forward 는 --address 0.0.0.0 을 붙여야 맥에서 열림
  4. 끝나면 정리VM은 켜 두면 맥의 메모리를 계속 씁니다.
    multipass stop ubuntu            # VM 끄기 (내용은 남음)
    multipass start ubuntu           # 다시 켜기
    multipass delete --purge ubuntu  # 완전히 삭제

kind 클러스터와 Docker는 VM 안에서 설치하고 만듭니다. 멀티 노드 실습은 VM 메모리를 8G 이상으로 주세요.

WSL 설치, PowerShell 명령건너뜁니다. 위 2번 VM이 대신합니다.
Apple Silicon(M1 이후) 맥VM에서 uname -m이 aarch64면 다운로드 주소의 amd64를 arm64로 바꿉니다. arm64 버전이 없는 이미지는 exec format error가 날 수 있습니다.
Docker Desktop맥도 큰 회사는 유료입니다. VM 안의 Docker Engine을 쓰고, 맥에서 직접 쓰려면 무료인 Colima를 씁니다.
파일 주고받기multipass transfer 파일 ubuntu: 또는 multipass mount ~/study ubuntu:/home/ubuntu/study
브라우저로 열기localhost 대신 VM IP를 씁니다 (위 3번).

VM 없이 맥에서 바로 하고 싶다면 brew install kubectl kind helm colima docker 로 도구를 깔 수 있습니다. 단, 리눅스 내부(namespace, cgroup, systemd, iptables)를 들여다보는 실습은 VM에서만 됩니다.

처음 보는 용어

4C 보안 모델Cloud, Cluster, Container, Code 네 계층으로 나눠 보는 클라우드 네이티브 보안 관점입니다. 안쪽 계층은 바깥 계층의 보안 위에 섭니다.
인증(Authentication)요청자가 누구인지 신원을 확인하는 단계입니다. 클라이언트 인증서, 베어러 토큰, OIDC 등을 씁니다.
인가(Authorization)확인된 신원이 이 동작을 할 권한이 있는지 판단하는 단계입니다. 주로 RBAC와 Node authorizer가 담당합니다.
어드미션(Admission)인증과 인가를 통과한 요청의 내용을 검사하거나 수정하는 마지막 단계입니다. PSA와 정책 엔진이 여기서 동작합니다.
RBAC역할 기반 접근 제어. Role과 ClusterRole로 권한을 정의하고 바인딩으로 주체에 연결합니다. 허용만 누적하고 명시적 거부는 없습니다.
Node authorizerkubelet이 자기 노드에 필요한 리소스에만 접근하도록 제한하는 특수 인가 모듈입니다.
subresourcepods/log, pods/exec처럼 리소스에 딸린 하위 동작 대상입니다. 상위 리소스 권한과 별도로 허용해야 합니다.
escalate/bind/impersonate각각 자기보다 넓은 Role 생성, 임의 Role 부여, 다른 사용자 위장을 뜻하는 위험 verb입니다. 사실상 권한 상승 통로입니다.
ServiceAccount파드 안 워크로드가 API 서버에 접근할 때 쓰는 계정입니다. 로봇 직원의 사원증에 해당합니다.
바운드 토큰파드에 묶여 파드 수명 동안만 유효한 projected SA 토큰입니다. 파드가 사라지면 무효가 됩니다.
automountServiceAccountToken파드에 SA 토큰을 자동 주입할지 정하는 설정입니다. false면 토큰이 들어가지 않아 공격 표면이 줍니다.
Pod Security Admission(PSA)네임스페이스 라벨로 privileged, baseline, restricted 표준을 enforce, audit, warn 모드로 강제하는 내장 어드미션입니다.
securityContext파드와 컨테이너의 보안 설정입니다. 실행 사용자, 파일시스템 읽기 전용, capability, seccomp 등을 정합니다.
capabilities루트 권한을 잘게 나눈 리눅스 기능 단위입니다. 대부분 drop ALL 후 필요한 것만 add하는 것이 안전합니다.
seccompProfile컨테이너가 호출할 수 있는 시스템 콜을 제한하는 설정입니다. RuntimeDefault는 런타임이 제공하는 안전한 기본 목록입니다.
ValidatingAdmissionPolicy웹훅 없이 API 서버 안에서 CEL로 요청을 검증하는 내장 어드미션 정책입니다. 정책과 바인딩으로 나뉩니다.
CELCommon Expression Language. 어드미션 정책에서 조건을 짧게 표현하는 언어입니다.
EncryptionConfigurationAPI 서버가 Secret 등을 etcd에 쓰기 전 암호화하도록 정하는 설정 파일입니다. KMS provider와 함께 쓸 수 있습니다.
SBOM소프트웨어 자재 명세서. 이미지에 든 패키지 목록으로, 새 취약점이 나왔을 때 영향 범위를 빠르게 찾습니다.
cosign컨테이너 이미지에 서명하고 검증하는 도구입니다. 이미지 출처와 무결성을 보장합니다.
kube-bench클러스터가 CIS 쿠버네티스 벤치마크를 지키는지 자동 점검하는 도구입니다.
Falco실행 중 컨테이너의 시스템 콜을 지켜보다 의심 행동을 규칙으로 탐지해 경보하는 런타임 보안 도구입니다.

계속 쓰게 될 자료