안녕하세요, Twodragon입니다.
이번 포스트에서는 클라우드 보안 과정 6기의 Dcoker 및 Kubernetes 이해에 관련된 내용을 다루고자 합니다. 이 과정은 게더 타운에서 진행되며, 각 세션은 20분 강의 후 5분 휴식으로 구성되어 있습니다. 이러한 구성은 온라인 강의의 특성상 눈의 피로를 줄이고, 멘티 분들의 집중력을 최대화하기 위함입니다. 여러분들과 함께 다양한 Dcoker 및 Kubernetes 관련 주제를 깊이 있게 다루어 보고자 합니다.
10:00 - 10:20 근황 토크 & 과제 피드백
- 한 주간의 근황 공유 및 토론
- 영상 & 과제 피드백: 어려웠던 점, 개선점 공유
- 보안 이슈 논의
10:25 - 11:00 컨테이너와 Docker, Kubernetes
- Docker 이해
- Kubernetes 이해
11:10 - 11:40 Kubernetes 네트워크 및 보안
- Kubernetes 네트워크
- Kubernetes 보안
11:50 - 12:00 필수적인 실습을 통한 이론 정리
최신 보안 업데이트 권고사항
- 금융보안원이 금융회사의 안전한 클라우드서비스 이용을 지원하기 위해 주요 국내·외 9개 클라우드 서비스 제공업체(CSP)와 협업하여 「금융분야 상용 클라우드서비스 보안 관리 참고서」를 발간했습니다. 이 참고서는 클라우드 보안 관리를 위한 5개 분야와 32개 기준으로 구성되어 있으며, 각 분야별로 가상자원 관리, 네트워크 관리, 계정 및 권한 관리, 암호키 관리, 로깅 및 모니터링 관리 등을 포함합니다. 참고서에는 보안 관리 기준별 설명, 예시, 우수 사례 등을 제공합니다.
- Oracle社는 Oracle Agile PLM Framework의 인증되지 않은 파일 공개 취약점(CVE-2024-21287)을 해결하는 보안 업데이트를 발표했습니다. 영향을 받는 버전(9.3.6 이하)을 사용 중인 사용자는 패치 37280434가 포함된 최신 버전 9.3.6으로 업데이트할 것을 권장합니다.
- Broadcom社는 VMware vCenter Server의 힙 오버플로우(CVE-2024-38812) 및 권한 상승(CVE-2024-38813) 취약점을 해결하는 보안 업데이트를 발표했습니다. 영향을 받는 버전(8.0, 7.0 등)을 사용 중인 사용자는 지정된 해결 버전(예: 8.0.3.00400, 7.0.3.02200)으로 업데이트할 것을 권장합니다.
- PostgreSQL 재단은 PL/Perl의 임의 코드 실행 취약점(CVE-2024-10979)을 해결하는 보안 업데이트를 발표했습니다. 영향을 받는 버전(17.1 미만 등)을 사용 중인 사용자는 최신 버전(17.1, 16.5 등)으로 업데이트할 것을 권장합니다.
- Redis社는 원격 코드 실행(RCE) 취약점(CVE-2024-31449)을 해결하는 보안 업데이트를 발표했습니다. 모든 Redis 소프트웨어 릴리스 사용자는 지정된 해결 버전(예: 7.4.2-169 이상, 6.4.2-110 이상 등)으로 업데이트할 것을 권장합니다.
컨테이너와 Docker, Kubernetes
- 컨테이너와 Docker의 흐름 : https://www.inflearn.com/blogs/3576
- DevOps 한방 정리 : https://www.inflearn.com/blogs/4047
- Docker: 컨테이너 기반 애플리케이션을 쉽게 만들고 배포할 수 있게 해주는 오픈 소스 플랫폼입니다. Docker를 사용하면 개발자가 애플리케이션을 컨테이너 이미지로 패키징하고, 이를 어디서나 실행할 수 있게 됩니다.
- VM vs 컨테이너: VM은 하이퍼바이저를 통해 완전한 운영체제를 가상화하여 각기 다른 환경을 제공합니다. 반면, 컨테이너는 호스트 운영체제의 커널을 공유하여 더 경량화된 환경을 제공합니다.
- 컨테이너와 DevOps: 컨테이너는 CI/CD 파이프라인에서 중요한 역할을 합니다. 개발, 테스트, 배포의 각 단계에서 동일한 환경을 제공하여 일관성을 유지할 수 있습니다.
- Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈 소스 시스템입니다. Google에서 개발하였으며, 현재는 CNCF(Cloud Native Computing Foundation)에서 관리하고 있습니다.
Kubernetes와 Docker의 차이점
- Docker는 컨테이너 생성 및 관리를 위한 도구
- Kubernetes는 이러한 컨테이너들을 오케스트레이션하여 대규모 분산 시스템을 관리
- Docker는 단일 노드 환경에서의 애플리케이션 실행을 중점
- Kubernetes는 다중 노드 환경에서의 애플리케이션 배포, 확장, 자가 복구 등을 자동화
Minikube를 이용한 Kubernetes 실습
Minikube는 로컬에서 Kubernetes 클러스터를 실행할 수 있게 해주는 도구입니다. 이를 통해 Kubernetes의 기본 개념과 동작 방식을 쉽게 이해할 수 있습니다.
#minikube 설치 및 시작
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube start
#Pod생성
kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080
kubectl expose deployment hello-minikube --type=NodePort
#Pod확인
kubectl get pod
Kubernetes 네트워크
- Pod: 쿠버네티스에서 가장 작은 배포 단위로, 하나 이상의 컨테이너로 구성됩니다. 각 Pod는 고유한 IP 주소를 가지며, 이 IP를 통해 다른 Pod와 통신할 수 있습니다.
- Network Namespace: 각 Pod는 고유의 네트워크 네임스페이스를 가지며, 이 네트워크 네임스페이스를 통해 다른 Pod와 격리됩니다.
- 서비스(Service): 여러 Pod를 하나의 네트워크 엔드포인트로 묶는 추상화 계층입니다. 서비스는 클러스터 내에서 안정적인 네트워크 접점을 제공하여, Pod가 삭제되거나 생성되어도 항상 동일한 주소로 접근할 수 있게 합니다.
- ClusterIP: 기본 서비스 유형으로, 클러스터 내에서만 접근 가능한 가상 IP를 제공합니다.
- NodePort: ClusterIP에 추가하여, 클러스터 외부에서 노드의 특정 포트를 통해 접근할 수 있게 합니다.
- Load Balancer: 클라우드 제공자의 로드 밸런서를 사용하여 외부에서 접근할 수 있는 서비스를 제공합니다.
- DNS: 쿠버네티스는 DNS를 사용하여 서비스 디스커버리를 지원합니다. 각 서비스는 DNS 엔트리를 가지며, 이를 통해 서비스 이름으로 다른 서비스에 접근할 수 있습니다.
- 네트워크 플러그인 CNI(Container Network Interface): 다양한 네트워크 플러그인을 지원하는 표준 인터페이스입니다. 일반적인 CNI 플러그인으로는 Calico, Flannel, Weave 등이 있습니다. 각 플러그인은 네트워크 격리, 네트워크 정책, IPAM(IP Address Management) 등을 제공합니다.
- 네트워크 정책: 네트워크 트래픽을 제어하기 위한 규칙 집합으로, 어떤 Pod가 다른 Pod에 접근할 수 있는지 정의합니다. 이를 통해 보안을 강화할 수 있습니다.
쿠버네티스 네트워크의 주요 특성
- IP-per-Pod: 각 Pod는 고유한 IP를 가지며, 같은 네임스페이스 내에서 직접 통신할 수 있습니다.
예시) 각 방은 고유의 전화번호를 가지고 서로 통화할 수 있습니다. - Flat Network: 모든 Pod는 평면 네트워크를 구성하며, 같은 네임스페이스 내에서 서로 통신할 수 있습니다.
예시) 방 A에서 방 B로 이동하려면 복도만 지나면 됩니다. - 포트 충돌 없음: 각 Pod가 고유한 IP를 가지므로, 포트 충돌 없이 동일한 포트를 사용할 수 있습니다.
예시) 방 A와 방 B가 모두 1234번을 사용하더라도, 방 A의 전화는 101-1234, 방 B의 전화는 102-1234로 각각 고유하게 구분됩니다.
이러한 네트워크 특성 및 구성 요소를 통해 쿠버네티스는 확장성과 유연성을 제공하며, 클러스터 내 다양한 애플리케이션이 원활하게 통신할 수 있도록 지원합니다.
컨테이너 및 Kubernetes 보안
Kubernetes 환경에서 보안은 매우 중요합니다. 다음은 보안 강화를 위한 몇 가지 팁입니다.
- 네트워크 보안 (네트워크 정책 설정): 네트워크 정책을 통해 Pod 간의 통신을 제어합니다.
예시) 특정 네임스페이스 내의 Pod들만 서로 통신할 수 있도록 하거나, 특정 IP 범위에서만 접근할 수 있도록 제한합니다. - 접근 제어 (RBAC, Role-Based Access Control): 사용자와 서비스의 권한을 최소화하여 관리합니다.
예시) 개발자는 애플리케이션 배포 권한만, 운영자는 클러스터 관리 권한만 가지도록 설정합니다. - 컨테이너 이미지 보안 (컨테이너 이미지 서명): 신뢰할 수 있는 컨테이너 이미지만 사용하도록 이미지 서명을 검증합니다.
예시) Notary, Cosign과 같은 도구를 사용하여 컨테이너 이미지 서명을 검증합니다. - 런타임 보안 Pod Security Admission (PSA): Pod의 보안 설정을 검토하고 제한하는 메커니즘으로, Pod Security Policies(PSP)를 대체합니다. PSA를 통해 Pod가 생성되기 전에 보안 규칙을 적용합니다.
예시) Pod가 루트 권한으로 실행되지 않도록 하거나, 특정 네트워크 접근을 제한하는 규칙을 설정합니다. - 시크릿 및 구성 관리 (Kubernetes Secrets): 시크릿을 사용하여 암호, 토큰, 키와 같은 민감한 데이터를 안전하게 저장하고 관리합니
예시) 애플리케이션의 데이터베이스 암호를 시크릿으로 저장하여 환경 변수로 불러와 사용합니다. - 모니터링 및 감사 : 클러스터의 활동을 모니터링하고 로그를 수집하여 이상 징후를 조기에 탐지합니다. 그리고, 쿠버네티스의 감사 로그를 활성화하여 클러스터에서 발생하는 모든 이벤트를 기록하고 분석합니다.
예시) Prometheus, Grafana, ELK 스택 등을 사용하여 클러스터 상태와 로그를 모니터링합니다. 그리고, kubectl 커맨드 사용 기록, API 요청 등의 활동을 감사 로그에 기록하여 보안 분석에 활용합니다. - 자동화된 보안 도구 (CI/CD 파이프라인 보안 및 보안 툴): CI/CD 파이프라인에서 이미지 스캔을 자동화하여 취약점이 있는 이미지를 배포하지 않도록 합니다. 그리고, 다양한 보안 도구를 사용하여 클러스터와 컨테이너의 보안을 강화합니다.
예시) Jenkins, GitLab CI, CircleCI 등의 파이프라인에서 Clair, Trivy와 같은 도구를 사용하여 이미지 스캔을 통합합니다. 그리고, Aqua Security, Twistlock, Sysdig Secure 등의 도구를 사용하여 런타임 보안, 이미지 스캔, 네트워크 보안 등을 강화합니다.
종합적으로 쿠버네티스 및 컨테이너 보안을 위해서는 네트워크 정책, 접근 제어, 이미지 서명 검증, 런타임 보안, 시크릿 관리, 모니터링 및 감사, 자동화된 보안 도구 등의 다양한 전략을 통합적으로 적용하는 것이 중요합니다. 이러한 방법들을 통해 쿠버네티스 환경의 보안을 전반적으로 강화할 수 있습니다.
필수적인 실습을 통한 이론 정리
- [VM vs Container](https://born-dev.tistory.com/39)
- [컨테이너와 DevOps](https://www.samsungsds.com/kr/insights/middleware_in_containers.html)
- [Kubernetes와 Docker 이해](https://www.codestates.com/blog/content/쿠버네티스)
- AWS 아키텍처 및 보안 관련 모임 자료 참고 : https://github.com/awskrug/security-group/tree/main
- 컨테이너 이해 : 초보를 위한 도커 안내서 - 설치하고 컨테이너 실행하기 (subicura.com)
- Minikube 데모 : 튜토리얼 | Kubernetes
- 쿠버네티스 보안 : 삼성 SDS 쿠버네티스 보안 블로그
이번 포스팅에서는 Docker와 Kubernetes에 대해 알아보았습니다. Docker는 컨테이너를 사용하여 애플리케이션의 이식성을 높이고, Kubernetes는 이러한 컨테이너를 효과적으로 관리합니다. 두 기술을 활용하면 클라우드 환경에서의 애플리케이션 배포와 관리를 자동화할 수 있습니다. 실습을 통해 직접 경험해 보시기 바랍니다.
'* Twodragon > 보안 강의 (Course)' 카테고리의 다른 글
클라우드 시큐리티 과정 6기 - 9주차 클라우드 보안 통합 정리 (0) | 2024.12.06 |
---|---|
클라우드 시큐리티 과정 6기 - 8주차 CI/CD 및 쿠버네티스 보안 이해 (0) | 2024.11.28 |
클라우드 시큐리티 과정 6기 - 6주차 AWS 보안 모니터링 및 대응 (0) | 2024.11.15 |
클라우드 시큐리티 과정 6기 - 5주차 AWS Control Tower 및 Okta, 제로트러스트 아키텍처 (0) | 2024.11.07 |