Kubernetes/Certificates 8

[CKS] 취득 후기

첫 시도 5/15에 CKS 시험을 치뤘으며, 결과만 먼저 얘기하자면 66%로 커트라인인 67%를 넘기지 못하여 불합격 처리되었다. 전체 15문제 중 배점이 높은 ImagePolicyWebhook을 제대로 설정하지 못했고, 몇몇 문제에 말려서 시간을 허비하는 바람에 답안을 충분히 검토할 시간이 부족했다. 다 풀고 나니 5분 밖에 남지 않은 상황이라 아무 것도 할 수가 없었다. 아마 Manifest 파일 정의까지만 해놓은 상태에서 깜빡하고 적용을 하지 않은 답안들이 꽤 있었을 것이다. 게다가 시험 환경에서 제공하는 Notepad가 있는줄 모르고, 계속 vim을 들락날락 하면서 복사/붙여넣기 하느라 불필요한 시간을 낭비했다. CKA나 CKAD와는 달리, 대부분의 문제가 단순히 리소스 하나만 정의하는데서 끝나지..

[CKS] Supply Chain Security

Image Footprint 다음과 같은 Dockerfile이 있다고 가정한다. FROM ubuntu ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y golang-go COPY app.go . RUN CGO_ENABLED=0 go build app.go CMD ["./app"] 'app.go' 파일은 아래와 같다. 1초마다 현재 사용자의 이름과 UID를 출력하며, 만약 위와 같이 따로 User를 특정하지 않는다면 root를 사용할 것이다. package main import ( "fmt" "time" "os/user" ) func main () { user, err := user.Current() if err != n..

[CKS] Runtime Security

Behavioral Analytics strace strace는 Debugging 목적으로 프로세스의 system call 호출을 intercept하여 로그를 남기는 Linux 명령어이다. 다음은 'ls' 에서 어떤 system call을 사용하는지 strace로 확인한 내용이다. 비교적 간단한 프로세스임에도 불구하고 fstat, mmap 등수많은 system call을 사용하고 있음을 알 수 있다. '-cw' 옵션을 추가하면 다음과 같이 해당 프로세스의 system call 사용 현황을 요약하여 볼 수 있다. 현재 실행중인 ETCD 컨테이너 안의 etcd 프로세스의 PID를 확인해보자. ps aux | grep etcd command를 확인하면, etcd의 PID가 3623인 것을 알 수 있다. str..

[CKS] Minimize Microservice Vulnerabilities

Secret 데이터 암호화 ETCD에 Secret을 저장할 때, API서버에서 Encryption/Decryption을 수행하는 기능에 대해 다룬다. 내용이 꽤 있으므로, 따로 정리해놓은 페이지를 참고하기 바란다. ETCD Encryption Kubernetes Secret 일반적으로 K8s 환경에서 Password, Access Token와 같이 보안에 민감한 데이터를 Secret 리소스로 관리한다. 다음은 간단한 Secret을 생성하는 예시이다. kubectl create secret generic secre.. cwal.tistory.com Container Runtime Sandbox Container는 Host와 Kernel을 공유하도록 설계되어있다. 예를 들어, 다음 명령어를 Container..

[CKS] System Hardening

AppArmor K8s Pod에 AppArmor 적용 K8s에서 AppArmor 기능을 사용하기 위해선 다음과 같은 요구사항을 충족해야 한다. Container Runtime이 AppArmor를 지원 모든 Node에 AppArmor 설치 모든 Node에 AppArmor 프로필 존재 컨테이너 단위로 AppArmor 프로필 명시 다음과 같이 Pod Manifest 파일을 작성한다. kubectl run secure --image=nginx -oyaml --dry-run=client > secure-pod.yaml vim secure-pod.yaml apiVersion: v1 kind: Pod metadata: creationTimestamp: null annotations: container.apparmor..

[CKS] Cluster Hardening

RBAC Role과 RoleBinding 다음과 같은 시나리오를 진행한다. 1. 네임스페이스 red, blue 생성 kubectl create ns red kubectl create ns blue 2. User 'john'은 red 네임스페이스의 'secret' 리소스에 대해 'get' 동작을 수행할 수 있다. #Role 'secret-manager' 생성 kubectl -n red create role secret-manager --verb=get --resource=secrets #User 'john'과 Role 'secret-manager'를 Binding kubectl -n red create rolebinding secret-manager --role=secret-manager --user=jo..

[CKS] Cluster Setup

Network Policy Default Deny default 네임스페이스에 속한 모든 Pod의 트래픽(ingress, egress)을 차단하는 기본 Network Policy를 아래와 같이 정의한다. apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny spec: podSelector: {} policyTypes: - Egress - Ingress 위 설정은 DNS 서버(ex: coredns)의 접근도 거부되므로, 아래와 같이 DNS 포트는 허용할 수 있다. apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny spec: podSelector: ..

Certified Kubernetes Security Specialist (CKS)

현재 CNCF에서 공인하는 Kubernetes 관련 자격증은 CKA, CKAD, CKS 총 3개이다. 필자는 작년에 CKA, CKAD를 취득했으나, 올해 새로운 학습 목표로 DevSecOps를 공부할겸 CKS 시험도 마저 통과하고자 한다. 자격 개요 Container 기반 어플리케이션 및 Kubernetes 플랫폼에 대한 보안 역량을 검증하는 테스트이다. CNCF에서 주관하는 다른 K8s 자격증(CKA, CKAD)과 동일하게, 별도 구축된 시험 환경에서 각 문제마다 제시하는 요구사항에 맞게 K8s 클러스터를 설정하거나, 리소스를 생성하는 등 단순 이론보다 실제 수행 능력을 평가한다. 2시간 동안 15~20개의 문제를 풀어야 하며, 총 100% 중 67% 이상 득점해야 통과로 문제 난이도에 따라 점수가 다..