K8S
-
쿠버네티스 Image HardeningK8S 2024. 1. 16. 22:14
쿠버네티스에 한정된 이이기는 아니긴 한데... 이미지를 빌드할때 알아두면 좋은 내용들이다. 당연할 수 있지만, 나중에 또 알아보기 귀찮아서 정리해놓는다. 이미지 하드닝의 중요 전략들 1. Multi-Staging 빌드 사용하기 2. 패키지 특정 버전 사용하기 3. Root로 실행시키지 않기 4. Filesystem은 Read Only로 만들기 5. Shell Access 삭제하기 1. Multi-Staging 빌드 사용하기 멀티 스테이징 빌드를 사용하여 불필요한 파일들이 이미지에 포함되지 않게끔 한다. 이미지의 크기가 줄어들면, container를 더욱 portable하게 사용할 수 있다. FROM ubuntu ARG DEBIAN_FRONTEND=noninteractive RUN apt-get updat..
-
Kubernetes NodeRestriction 플러그인K8S 2023. 12. 30. 14:06
쿠버네티스 클러스터의 보안을 강화하는 데 있어서 NodeRestriction 어드미션 컨트롤러는 필수적인 요소다. 이 기능은 클러스터 내의 노드 간 상호작용을 엄격하게 제어하여 보안 위험을 줄일 수 있다. NodeRestriction 어드미션 컨트롤러의 역할 기본적으로 kube-apiserver에서 --enable-admission-plugin 옵션을 통해 NodeRestriction이 활성화되어 있는 것을 확인할 수 있다. 이 설정은 노드가 할당되지 않은 리소스에 대한 접근을 제한하여 클러스터의 보안을 강화하는 것이다. NodeRestriction를 사용하지 않았을 때 발생할 수 있는 취약점 워커 노드 kubelet 권한을 활용한 공격 발생 가능 - 워커 노드에서 kubelet의 인증 권한을 사용하여 ..
-
Kubernetes API 이용해서 사용자 인증서 및 Context 만들기K8S 2023. 12. 30. 10:24
이번 포스팅은 Kubernetes API를 이용해서 사용자나 서비스에 대한 인증 정보를 생성하고 설정하는 과정에 대해서 다룬다. 수동으로 설정하는 방법은 다음 포스팅을 참고한다. Kubernetes에서 수동으로 사용자 인증서와 Context 만들기 이번 포스팅은 쿠버네티스 클러스터와 상호작용하는 사용자나 서비스에 대한 인증 정보를 수동으로 생성하고 설정하는 과정에 대해서 다룬다. 1. 사용자 키 생성 사용자의 개인 키를 생성하기 seungjuitmemo.tistory.com 1. 사용자 키 생성 사용자의 개인 키를 생성하기 위해 OpenSSL을 사용한다. 이 키는 사용자의 인증서를 생성하는 데 사용된다. openssl genrsa -out test-user.key 2. CSR(인증서 서명 요청) 생성 생..
-
Kubernetes에서 수동으로 사용자 인증서와 Context 만들기K8S 2023. 12. 29. 19:23
이번 포스팅은 쿠버네티스 클러스터와 상호작용하는 사용자나 서비스에 대한 인증 정보를 수동으로 생성하고 설정하는 과정에 대해서 다룬다. K8S API를 통해 사용자 인증서를 생성하는 방법을 알고 싶다면, 다음을 참고한다. Kubernetes API 이용해서 사용자 인증서 및 Context 만들기 이번 포스팅은 Kubernetes API를 이용해서 사용자나 서비스에 대한 인증 정보를 생성하고 설정하는 과정에 대해서 다룬다. 수동으로 설정하는 방법은 다음 포스팅을 참고한다. Kubernetes에서 수동으 seungjuitmemo.tistory.com 1. 사용자 키 생성 사용자의 개인 키를 생성하기 위해 OpenSSL을 사용한다. 이 키는 사용자의 인증서를 생성하는 데 사용된다. openssl genrsa -..
-
K8S 빠른 CLI 커맨드 정리K8S 2023. 12. 29. 17:23
1. clusterrolebinding 생성하기 - ns1에 있는 pipeline serviceaccount를 subject로 등록 - ns2에 있는 pipeline serviceaccount를 subject로 등록 k create clusterrolebinding crb-view --clusterrole view \ --serviceaccount ns1:pipeline \ --serviceaccount ns2:pipeline 2. clusterrole 생성하기 - deployment에 대해 create, delete 권한을 갖는 clusterrole 생성 k create clusterrole cr-deployment \ --verb create,delete \ --resource deployment 3..
-
Kubernetes의 역할 및 바인딩 조합 이해K8S 2023. 12. 29. 16:40
쿠버네티스는 RBAC를 통해 리소스에 대한 접근을 관리한다. 그리고 Role과 RoleBinding, ClusterRole과 ClusterRoleBinding에 대한 조합은 쿠버네티스 클러스터 내에서 다르게 적용된다. 1. Role + RoleBinding (네임스페이스 내에서만 사용 가능, 네임스페이스에 적용) Role은 특정 네임스페이스 내의 리소스에 대한 접근을 제어한다. 그리고 RoleBinding은 해당 Role을 특정 사용자, 그룹, 또는 서비스 어카운트에 연결한다. 예시) 'dev' 네임스페이스에서 파드를 조회하고 생성할 수 있는 권한을 'user1'에게 부여하고자 한다. Role: 'dev' 네임스페이스에서 파드를 조회하고 생성할 수 있는 권한을 정의한다. RoleBinding: 생성된 R..
-
Kube-bench 정리 및 사용 예시K8S 2023. 12. 29. 15:41
Kube-bench란? Kube-bench는 쿠버네티스 클러스터의 보안을 평가하는 도구다. 이 도구는 CIS Kubernetes Benchmark에서 권장하는 베스트 프랙티스에 따라 클러스터의 구성을 검사하고 평가한다. 이를 통해 쿠버네티스 클러스터의 보안 수준을 진단하고, 잠재적인 취약점을 식별할 수 있다. Kube-bench는 쿠버네티스 컴포넌트(예: API 서버, etcd, kubelet 등)의 구성을 자동으로 검사하여, CIS Kubernetes Benchmark의 권장사항과 비교한다. 사용 예시 - 마스터 노드 보안 검사 실행하기 마스터 노드에서 다음 커맨드를 실행해본다. kube-bench run --targets master kube-bench run --targets master 명령어는 ..
-
Kubernetes Network Policy 정리 및 예시K8S 2023. 11. 26. 23:51
CNI 구현체 Network Policy는 Container Network Interface(CNI)에 의해 구현된다. 만약 선택한 CNI가 Network Policy를 지원하지 않는다면, 리소스가 생성되더라도 실제로 적용되지 않는다. 파드 그룹 제어 Network Policy를 사용하여 파드 그룹 간의 인그레스(Ingress)와 이그레스(Egress)를 제한할 수 있다. 이를 통해 파드 간의 네트워크 트래픽을 효과적으로 관리할 수 있다. Selector 사용 Namespace Selector나 Pod Selector를 사용하여 특정 네임스페이스 또는 파드 간의 네트워크 트래픽을 제어할 수 있다. 이는 네트워크 정책을 더욱 세밀하게 적용하는 데 도움을 준다. IPBlock 제어 특정 IP 범위(IPBlo..