[K8s][Security] Mutating, Validating이전에 Admission Controller에 대해 포스팅 한 적이 있다. [K8s][CKS] Admission Controller[K8s][CKS] Admission Controller쿠버네티스의 접근제어에는 크게 3가지가 있다.Authentication접속한 사람의 신분을 시스템이 인증Authorization누가 어떤 권한을 가지고 어떤 행동을 할 수 있는지 확인Admissionheywantodo.tistory.com Admission 컨트롤러는 요청이 인증(Athentic)되고 승인된 후에 Kubernetes API 서버에 대한 요청을 가로채어,객체를 변형(Mutating)하고 검증(Validating)한다. Admission Cont..
[K8s] 쿠버네티스 컴포넌트 정리쿠버네티스는 복잡한 분산 시스템을 효과적으로 관리할 수 있는 다양한 컴포넌트로 구성되어 있다.크게 컨트롤 플레인(Control Plane)과 워커 노드(Worker Node)로 나뉜다. 각 컴포넌트는 특정한 역할을 맡고 있으며, 이들이 상호작용하여 쿠버네티스 클러스터를 구성한다.쿠버네티스 클러스터의 두 핵심 구성요소들의 역할과 기능에 대해 알아보자. 컨트롤 플레인(Control Plane)컨트롤 플레인은 클러스터의 중앙 제어 역할을 담당한다.클러스터 상태를 관리하고, 워커 노드에서 실행되는 애플리케이션의 스케줄링, 상태 모니터링, 유지보수를 수행한다. 컨트롤 플레인의 주요 요소는 다음과 같다. kube-apiserver클러스터와 상호작용하는 모든 요청의 관문 역할 쿠버..
[K8s][CKS] Admission Controller쿠버네티스의 접근제어에는 크게 3가지가 있다.Authentication접속한 사람의 신분을 시스템이 인증Authorization누가 어떤 권한을 가지고 어떤 행동을 할 수 있는지 확인Admission Control인증과 권한 확인 이후에 추가적으로 요청 내용에 대한 검증이나 요청 내용을 수정 할 때 사용 이 중 쿠버네티스의 Admission Control은 요청이 인증되고 권한이 부여된 후에Kubernetes API 서버에 대한 승인한 요청과 관련된 객체를 수정 할 수 있다. Admission Controller PluginsAdmission Controller는 관리자의 특정 정책을 수행하는 주체라고 볼 수 있다.다시 말해 Admission Con..
[K8s] SecurityContextSecurityContext는 pod 또는 컨테이너에 대한 권한 및 액세스 설정을 정의한다.SecurityContext는 다음과 같은 설정들이 포함된다.privileged나 unprivileged로 실행됨임의적 접근 제어: 파일과 같은 객체에 대한 접근 권한은 UID와 GID를 기준으로 결정SELinux: object에 보안 label이 할당됨Linux 기능: 프로세스에 일부 권한을 부여하지만, 루트 사용자의 모든 권한을 부여하진 않음AppArmor: 프로그램 프로필을 사용하여 개별 프로그램의 기능을 제한Seccomp: 프로세스의 시스템 호출을 필터링다음은 pod나 컨테이너에 대한 manifest 파일에 추가가 가능한 파라미터다.allowPrivilegeEscalat..
[K8s][CKS] 감사(auditing)쿠버네티스의 감사는 클러스터의 작업 순서을 문서화하는 보안 관련 시간별 레코드 세트를 제공한다.클러스터는 사용자, 쿠버네티스 API를 사용하는 애플리케이션 및 컨프롤 플레인 자체에서 생성된 활동을 감사한다. 감사기록은 Kube-apiserver 컴포넌트 내에서 수명주기를 시작하며, 각 단계에서 각 요청은 감사 이벤트를 생성하고감사 이벤트는 특정 정책에 따라 사전 처리되고 백엔드에 기록된다. 감사 정책 감사 정책은 기록해야 하는 이벤트와 포함해야 하는 데이터에 대한 규칙을 정의한다.정의된 감사 수준은 다음과 같다.None이 규칙에 해당되는 이벤트는 로깅하지 않는다.Metadata요청 메타데이터는 로깅하지만 요청/응답 본문은 로깅하지 않는다.Request이벤트 메타데..
[Docker] E: Problem executing scripts APT::Update::Post-Invoke 도커 이미지를 빌드 시 apt update 명령어에서 다음과 같은 오류가 발생했다.Problem executing scripts APT::Update::Post-Invoke 'rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true' 확인해보니 도커엔진의 버전이 낮아서 발생하는 오류라고 한다.해당 버전은 10.20.8 버전이였고, 10.20.12 버전으로 업그레이드 해서 진행하니 이미지가 잘 빌드됐다. 업그레이드는 다음과 같이 진행했다. 현재 버전 확인dpkg -li..
[K8s][CKS] 컨테이너의 불변성 보장컨테이너는 기본적으로 변경이 불가능하지만, 내부 업데이트를 수행할 수 있다.파일을 pod에 직접 복사하거나, 셀에 접속해서 변경하는 등 다양한 방법으로 작업을 수행할 수 있다. 이를 방지하기 위해선, pod가 시작된 후에는 파일시스템에 쓸 수 없도록 해야한다.이 때 사용할 수 있는게 security contexts다. Security Contexts불변성 보장하기 위해 readOnlyRootFilesystem=true를 사용한다.다음과 같은 manifest file을 임의로 생성해보자.k run nginx --image=nginx --dry-run=client -o yaml > nginx.yaml 해당 yaml 파일의 container단에 securityConte..
[K8s][CKS] TLS (Cipher-Suites)쿠버네티스에서 클라이언트와 API 서버, 그리고 구성 요소간 통신은 상호 TLS를 통해 이루어진다.🤔 TLS(Transport Layer Security)?전송 계층 보안(TLS)은 인터넷 상의 커뮤니케이션을 위한 개인 정보와 데이터 보안을 용이하게 하기 위해 설계되어 널리 채택된 보안 프로토콜이다. TLS는 공개 키 암호화를 사용하여 작동하며, 새로운 암호가 발견될 때마다 적용이 되어야 한다. 쿠버네티스 보안을 목적으로하는 TLS 소프트웨어 패키지의 경우, 컨트롤 플레인의 구성요소와 etcd가 포함되며, 연결이 설정될 때 사용할 수 있는 암호를 제한하는 기능이 있다. 사용 가능한 암호를 강력한 최신 암호로 제한하면,악용이 가능한 이전 클라이언트 암..
[etc] Containerd쿠버네티스 버전 1.24부터 컨테이너 런타임으로 docker의 지원이 종료되고,containerd로 전환이 되었다. node에 접속해서 생성된 컨테이너 ID를 확인할 일이 있어, 습관적으로 docker ps 명령어를 실행했는데아무것도 없어서 당황했다 ... 😋 node를 조회하면 컨테이너 런타임이 containerd인 것을 확인할 수 있다.k get node -o wide containerd는 ctr 명령어를 확인하여 컨테이너의 정보를 확인할 수 있다.containerd는 쿠버네티스와 같이 네임스페이스를 사용한다. ctr namespace list 다음 명령어를 통해, k8s.io 네임스페이스 내의 컨테이너의 리스트를 확인 할 수 있다.ctr -n k8s.io contain..
[K8s][CKS] Kube-benchCIS benchmarks인터넷 보안 센터(CIS)는 보안 권장 수준을 위한 벤치마크를 출시한다. CIS Kubernetes 벤치마크는 강력한 보안 수준 지원을 위한 쿠버네티스 구성 권장 수준 집합이다. CIS kubernetes 벤치마크는 쿠버네티스 배포용으로 작성되었으며, 배포 간 범용 적용이 가능하도록 고안되었다. CIS Kubernetes BenchmarksDownload our step-by-step checklist to secure your platform: An objective, consensus-driven security guideline for Kubernetes.www.cisecurity.org Kube-bench위 CIS의 벤치마크 요소를 하..
[Docker] 도커 명령어 권한 설정하기 도커 설치 후 docker 명령어를 sudo 권한에서만 사용이 가능할 때가 있다.docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create: dial unix /var/run/docker.sock: connect: permission denied. 일반 유저 (ex. ubuntu) 가 docker 명령어를 사용하게 하고 싶다면, docker 그룹에 일반 유저를 추가해주면 된다.sudo usermod -aG ..
[K8s][CKS] 런타임 클래스 (runtime class)CKS 공부를 하면서 몰랐던 개념들을 정리 컨테이너 런타임파드가 노드에서 실행될 수 있도록 하기위해선 클러스터의 각 노드에 컨테이너 런타임을 설치해야한다.쿠버네티스 1.30에서는 컨테이너 런타임 인터페이스(CRI) 요구사항을 만족하는 런타임을 사용해야 한다. 공용 컨테이너 런타임은 다음과 같다.containerdCRI-O도커 엔진미란티스 컨테이너 런타임 런타임 클래스서로 다른 파드간에 런타임클래스를 설정하여 성능과 보안의 균형을 유지할 수 있다.예를 들어 하드웨어 가상화를 이용하는 컨테이너 런타임으로 파드를 실행하도록 예약할 수 있다. 또한, 런타임 클래스를 사용하여 컨테이너 런타임이 같으나 설정이 다른 여러 파드를 실행할 수 있다. 1. C..