Translated ['', 'src/pentesting-cloud/kubernetes-security/kubernetes-har

This commit is contained in:
Translator
2025-11-17 12:20:14 +00:00
parent b8740f1257
commit 7c25baa1e4

View File

@@ -1,12 +1,12 @@
# Kubernetes Hardening
# Kubernetes 보안 강화
{{#include ../../../banners/hacktricks-training.md}}
## Tools to analyse a cluster
## 클러스터 분석 도구
### [**Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance)
### [Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance)
Kubernetes 클러스터에 대**여러 준수 검사를 수행합니다**. CIS, 국가안보국(NSA) 및 사이버 보안 및 인프라 보안국(CISA)의 Kubernetes 하드닝을 위한 사이버 보안 기술 보고서를 지원합니다.
이 도구는 **Kubernetes 클러스터에 대한 여러 규정 준수 검사를 수행합니다**. CIS, National Security Agency (NSA),Cybersecurity and Infrastructure Security Agency (CISA)의 Kubernetes 보안 강화를 위한 Cybersecurity 기술 보고서를 지원합니다.
```bash
# Install Steampipe
brew install turbot/tap/powerpipe
@@ -27,130 +27,177 @@ powerpipe server
```
### [**Kubescape**](https://github.com/armosec/kubescape)
[**Kubescape**](https://github.com/armosec/kubescape)는 위험 분석, 보안 준수, RBAC 시각화 및 이미지 취약점 스을 포함한 다중 클라우드 K8s 단일 대시보드를 제공하는 K8s 오픈 소스 도구입니다. Kubescape는 K8s 클러스터, YAML 파일 HELM 차트 스캔하여 여러 프레임워크(예: [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo), [MITRE ATT\&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/))에 따라 잘못된 구성, 소프트웨어 취약점 및 RBAC(역할 기반 접근 제어) 위반을 CI/CD 파이프라인 초기 단계에서지하고, 즉시 위험 점수를 계산하며 시간에 따른 위험 추세를 보여줍니다.
[**Kubescape**](https://github.com/armosec/kubescape)는 리스크 분석, 보안 컴플라이언스, RBAC 시각화 및 이미지 취약점 스캐닝을 포함하는 멀티-클라우드 K8s 단일 관리 창(single pane of glass)을 제공하는 K8s 오픈소스 도구입니다. Kubescape는 K8s 클러스터, YAML 파일, HELM 차트 등을 스캔하여 여러 프레임워크 (such as the [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo) , [MITRE ATT\&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)), 소프트웨어 취약점, 및 CI/CD 파이프라인 초기 단계에서의 RBAC (role-based-access-control) 위반을 탐지하고 즉시 리스크 점수를 계산하며 시간에 따른 리스크 추세를 보여줍니다.
```bash
curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash
kubescape scan --verbose
```
### [**Popeye**](https://github.com/derailed/popeye)
[**Popeye**](https://github.com/derailed/popeye)는 라이브 Kubernetes 클러스터를 스캔하고 **배포된 리소스 및 구성 잠재적 문제를 보고하는** 유틸리티입니다. 디스크에 있는 이 아니라 배포된 내용을 기반으로 클러스터를 정리합니다. 클러스터를 스캔함으로써 잘못된 구성을 감지하고 모범 사례가 적용되도록 도와주어 향후 문제를 예방합니다. 이는 실제 환경에서 Kubernetes 클러스터를 운영할 때 직면하는 인지적 \_over_load를 줄이는 것을 목표로 합니다. 또한 클러스터가 메트릭 서버를 사용하는 경우, 잠재적인 리소스 과/부족 할당을 보고하고 클러스터 용량이 부족해질 경우 경고하려 시도합니다.
[**Popeye**](https://github.com/derailed/popeye)는 라이브 Kubernetes 클러스터를 스캔하고 **배포된 리소스 및 구성에서 발생할 수 있는 잠재적 문제를 보고**하는 유틸리티입니다. 디스크에 있는 내용이 아니라 실제로 배포된 것에 기반 클러스터를 정리(sanitize)합니다. 클러스터를 스캔하여 잘못된 구성(misconfigurations)을 감지하고 모범 사례가 적용되도록 도와 향후 골칫거리를 예방합니다. 이는 실제 환경에서 Kubernetes 클러스터를 운영할 때 맞닥뜨리는 인지적 \_over_load를 줄이는 것을 목표로 합니다. 또한 클러스터가 metric-server를 사용 중이라면 리소스 과/부족 할당을 보고하고 클러스터 용량이 부족해질 경우 경고하려 시도합니다.
### [**Kube-bench**](https://github.com/aquasecurity/kube-bench)
도구 [**kube-bench**](https://github.com/aquasecurity/kube-bench) [**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/)에 문서화된 검사를 실행하여 Kubernetes가 안전하게 배포되었는지 확인하는 도구입니다.\
다음 중에서 선택할 수 있습니다:
The tool [**kube-bench**](https://github.com/aquasecurity/kube-bench) is a tool that checks whether Kubernetes is deployed securely by running the checks documented in the [**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/).\
You can choose to:
- 컨테이너 내부에서 kube-bench 실행 (호스트와 PID 네임스페이스 공유)
- 호스트에 kube-bench를 설치하는 컨테이너를 실행한 후, 호스트에서 직접 kube-bench 실행
- [Releases page](https://github.com/aquasecurity/kube-bench/releases)에서 최신 바이너리 설치
- 소스에서 컴파일
- run kube-bench from inside a container (sharing PID namespace with the host)
- run a container that installs kube-bench on the host, and then run kube-bench directly on the host
- install the latest binaries from the [Releases page](https://github.com/aquasecurity/kube-bench/releases),
- compile it from source.
### [**Kubeaudit**](https://github.com/Shopify/kubeaudit)
**[DEPRECATED]** 도구 [**kubeaudit**](https://github.com/Shopify/kubeaudit)는 다양한 보안 문제에 대해 **Kubernetes 클러스터를 감사하는** 명령줄 도구이자 Go 패키지입니다.
**[DEPRECATED]** 도구 [**kubeaudit**](https://github.com/Shopify/kubeaudit)는 다양한 보안 문제에 대해 Kubernetes 클러스터를 감사(audit)하는 커맨드라인 도구이자 Go 패키지입니다.
Kubeaudit 클러스터 내의 컨테이너에서 실행되고 있는지 감지할 수 있습니다. 그렇다면 해당 클러스터의 모든 Kubernetes 리소스를 감사하려 시도합니다:
Kubeaudit은 자신이 클러스터 내의 container에서 실행 중인지 감지할 수 있습니다. 그렇다면 해당 클러스터의 모든 Kubernetes 리소스를 감사하려 시도합니다:
```
kubeaudit all
```
이 도구는 또한 `autofix` 인수를 사용하여 **감지된 문제를 자동으로 수정합니다.**
이 도구는 또한 `autofix` 인수 **감지된 문제를 자동으로 수정합니다.**
### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter)
**[사용 중단]** 도구 [**kube-hunter**](https://github.com/aquasecurity/kube-hunter)는 Kubernetes 클러스터의 보안 취약점을 탐지합니다. 이 도구는 Kubernetes 환경 보안 문제에 대한 인식과 가시성을 높이기 위해 개발되었습니다.
**[사용 중단]** 도구 [**kube-hunter**](https://github.com/aquasecurity/kube-hunter)는 Kubernetes 클러스터의 보안 취약점을 탐지합니다. 이 도구는 Kubernetes 환경에서 보안 문제에 대한 인식과 가시성을 높이기 위해 개발되었습니다.
```bash
kube-hunter --remote some.node.com
```
### [Trivy](https://github.com/aquasecurity/trivy)
[Trivy](https://github.com/aquasecurity/trivy) 보안 문제를 찾기 위한 스캐너와 이러한 문제를 찾을 수 있는 대상을 가지고 있습니다:
[Trivy](https://github.com/aquasecurity/trivy) 보안 문제를 찾는 스캐너를 제공하며, 다음 대상에서 이러한 문제를 탐지할 수 있습니다:
- 컨테이너 이미지
- 파일 시스템
- Git 리포지토리 (원격)
- 파일시스템
- Git 리포지토리(원격)
- 가상 머신 이미지
- Kubernetes
### [**Kubei**](https://github.com/Erezf-p/kubei)
**[유지 관리되지 않는 것처럼 보임]**
**[유지관리되지 않는 것으로 보임]**
[**Kubei**](https://github.com/Erezf-p/kubei) 사용자가 Kubernetes 클러스터의 정확하고 즉각적인 위험 평가를 받을 수 있도록 하는 취약점 스캐닝 및 CIS Docker 벤치마크 도구입니다. Kubei는 애플리케이션 포드와 시스템 드의 이미지를 포함하여 Kubernetes 클러스터에서 사용되는 모든 이미지를 스캔합니다.
[**Kubei**](https://github.com/Erezf-p/kubei) 는 취약점 스캐닝 및 CIS Docker benchmark 도구로, 사용자가 Kubernetes 클러스터의 정확하고 즉각적인 위험 평가를 받을 수 있게 해줍니다. Kubei는 애플리케이션 파드 및 시스템 드의 이미지를 포함하여 Kubernetes 클러스터에서 사용되는 모든 이미지를 스캔합니다.
### [**KubiScan**](https://github.com/cyberark/KubiScan)
[**KubiScan**](https://github.com/cyberark/KubiScan)은 Kubernetes의 역할 기반 접근 제어(RBAC) 권한 모델에서 위험한 권한을 스캔하기 위한 도구입니다.
[**KubiScan**](https://github.com/cyberark/KubiScan) 은 Kubernetes의 역할 기반 접근 제어(RBAC) 권한 모델에서 위험한 권한을 스캔하 도구입니다.
### [Managed Kubernetes Auditing Toolkit](https://github.com/DataDog/managed-kubernetes-auditing-toolkit)
[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) 다른 도구 비교하여 다른 유형의 고위험 검사를 테스트하기 위해 구축된 도구입니다. 주로 3가지 다른 모드를 가지고 있습니다:
[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) 다른 도구들과 비교 고위험 검사를 테스트하기 위해 만들어진 도구입니다. 주로 3가지 모드가 있습니다:
- **`find-role-relationships`**: 어떤 AWS 역할이 어떤 파드에서 실행되는지 찾습니다.
- **`find-secrets`**: Pods, ConfigMaps, and Secrets와 같은 K8s 리소스에서 비밀을 식별하려 시도합니다.
- **`test-imds-access`**: 파드를 실행해 metadata v1 및 v2에 접근을 시도합니다. WARNING: 클러스터에서 파드를 실행하므로, 원치 않을 수 있으니 매우 주의하세요!
- **`find-role-relationships`**: 어떤 AWS 역할이 어떤 포드에서 실행되고 있는지 찾습니다.
- **`find-secrets`**: Pods, ConfigMaps 및 Secrets와 같은 K8s 리소스에서 비밀을 식별하려고 시도합니다.
- **`test-imds-access`**: 포드를 실행하고 메타데이터 v1 및 v2에 접근하려고 시도합니다. 경고: 클러스터에서 포드를 실행하므로 매우 조심해야 합니다. 이 작업을 원하지 않을 수 있습니다!
## **IaC 코드 감사**
### [**KICS**](https://github.com/Checkmarx/kics)
[**KICS**](https://github.com/Checkmarx/kics)는 다음 **코드로서의 인프라 솔루션**에서 **보안 취약점**, 준수 문제 및 인프라 구성 오류를 찾니다: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM 및 OpenAPI 3.0 사양
[**KICS**](https://github.com/Checkmarx/kics) 는 다음 Infrastructure as Code 솔루션에서 보안 취약점, 규정 준수 문제 및 인프라 구성 오류를 찾아냅니다: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM, 및 OpenAPI 3.0 사양
### [**Checkov**](https://github.com/bridgecrewio/checkov)
[**Checkov**](https://github.com/bridgecrewio/checkov)는 코드로서의 인프라에 대한 정적 코드 분석 도구입니다.
[**Checkov**](https://github.com/bridgecrewio/checkov) infrastructure-as-code를 위한 정적 코드 분석 도구입니다.
[Terraform](https://terraform.io), Terraform 계획, [Cloudformation](https://aws.amazon.com/cloudformation/), [AWS SAM](https://aws.amazon.com/serverless/sam/), [Kubernetes](https://kubernetes.io), [Dockerfile](https://www.docker.com), [Serverless](https://www.serverless.com) 또는 [ARM 템플릿](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview)을 사용하여 프로비저닝된 클라우드 인프라를 스캔하고 그래프 기반 스캐닝을 사용하여 보안 및 준수 구성 오류를 지합니다.
이는 [Terraform](https://terraform.io), Terraform plan, [Cloudformation](https://aws.amazon.com/cloudformation/), [AWS SAM](https://aws.amazon.com/serverless/sam/), [Kubernetes](https://kubernetes.io), [Dockerfile](https://www.docker.com), [Serverless](https://www.serverless.com) 또는 [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) 프로비저닝된 클라우드 인프라를 스캔하고, 그래프 기반 스캐닝을 사용 보안 및 규정 준수 구성 오류를 지합니다.
### [**Kube-score**](https://github.com/zegl/kube-score)
[**kube-score**](https://github.com/zegl/kube-score)는 Kubernetes 객체 정의에 대한 정적 코드 분석을 수행하는 도구입니다.
[**kube-score**](https://github.com/zegl/kube-score) 는 Kubernetes 오브젝트 정의에 대한 정적 코드 분석을 수행하는 도구입니다.
설치 방법:
| 배포 | 명령 / 링크 |
| 배포 방법 | 명령 / 링크 |
| --------------------------------------------------- | --------------------------------------------------------------------------------------- |
| macOS, Linux Windows용 미리 빌드 바이너리 | [GitHub 릴리스](https://github.com/zegl/kube-score/releases) |
| macOS, Linux, Windows용 사전 빌드 바이너리 | [GitHub releases](https://github.com/zegl/kube-score/releases) |
| Docker | `docker pull zegl/kube-score` ([Docker Hub)](https://hub.docker.com/r/zegl/kube-score/) |
| Homebrew (macOS 및 Linux) | `brew install kube-score` |
| [Krew](https://krew.sigs.k8s.io/) (macOS 및 Linux) | `kubectl krew install score` |
| Homebrew (macOS 및 Linux) | `brew install kube-score` |
| [Krew](https://krew.sigs.k8s.io/) (macOS 및 Linux) | `kubectl krew install score` |
## YAML 파일 및 Helm Charts 분석 도구
### [**Kube-linter**](https://github.com/stackrox/kube-linter)
```bash
# Install Kube-linter
brew install kube-linter
# Run Kube-linter
## lint ./path/to/yaml/or/chart
```
### [Checkov](https://github.com/bridgecrewio/checkov)
```bash
# Install Checkov
pip install checkov
# Run Checkov
checkov -d ./path/to/yaml/or/chart
```
### [kubescore](https://github.com/zegl/kube-score)
```bash
# Install kube-score
brew install kube-score
# Run kube-score
kube-score score ./path/to/yaml
# or
helm template chart /path/to/chart | kube-score score -
# or if the chart needs some values
helm template chart /path/to/chart \
--set 'config.urls[0]=https://dummy.backend.internal' \
| kube-score score -
```
### [Kubesec](https://github.com/controlplaneio/kubesec)
```bash
# Install Kubesec
## Download from https://github.com/controlplaneio/kubesec/releases
# Run Kubesec in a yaml
kubesec scan ./path/to/yaml
# or
helm template chart /path/to/chart | kubesec scan -
# or if the chart needs some values
helm template chart /path/to/chart \
--set 'config.urls[0]=https://dummy.backend.internal' \
| kubesec scan -
```
## 팁
### Kubernetes PodSecurityContext 및 SecurityContext
**Pod의 보안 컨텍스트**(_PodSecurityContext_)와 실행될 **컨테이너**의 보안 컨텍스트(_SecurityContext_)를 구성할 수 있습니다. 자세한 내용은 다음을 읽어보세요:
Pod의 **보안 컨텍스트**( _PodSecurityContext_ )와 실행될 **컨테이너****보안 컨텍스트**( _SecurityContext_ )를 구성할 수 있습니다. 자세한 내용은 다음을 참조하세요:
{{#ref}}
kubernetes-securitycontext-s.md
{{#endref}}
### Kubernetes API 강화
### Kubernetes API 하드닝
Kubernetes Api Server에 대한 **접근을 보호하는 것**이 매우 중요합니다. 권한이 충분한 악의적 행위자가 이를 용하 환경에 많은 방식으로 피해를 줄 수 있습니다.\
**접근**을 안전하게 하는 것이 중요합니다 (**API 서버에 접근할 수 있는 출처를 화이트리스트하고 다른 모든 연결을 거부**)와 [**인증**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (최소 권한 원칙을 따름). 그리고 절대 **익명 요청** **허용하지 마세요**.
Kubernetes Api Server에 대한 접근을 보호하는 것 매우 중요합니다. 권한이 충분한 악의적 행위자가 이를 용하 환경에 다양한 방식으로 심각한 피해를 줄 수 있습니다.\
API Server에 대한 **접근**(**whitelist** 출처로 API Server 접근을 허용하고 다른 모든 연결은 차단)과 [**authentication**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/)을 모두 보호하는 것이 중요합니다(원칙인 **least** **privilege**를 따르십시오). 그리고 절대 **anonymous** **requests** **허용하지 마십시오**.
**일반 요청 프로세스:**\
사용자 또는 K8s ServiceAccount > 인증 > 권한 부여 > 수용 제어.
일반적인 요청 처리 과정:\
User 또는 K8s ServiceAccount > Authentication > Authorization > Admission Control.
**팁**:
- 포트습니다.
- 익명 접근을 피합니다.
- NodeRestriction; 특정 노드에서 API에 접근하지 못하도록 합니다.
- 포트 닫.
- 익명 접근을 피하세요.
- NodeRestriction: 특정 노드에서 API에 대한 접근 금지.
- [https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction)
- 기본적으로 kubelet node-restriction.kubernetes.io/ 접두사가 있는 레이블을 추가/제거/업데이트하는 것을 방지합니다. 이 레이블 접두사는 관리자가 작업 부하 격리를 위해 Node 객체에 레이블을 지정하는 데 예약되어 있으며, kubelet 해당 접두사가 있는 레이블을 수정할 수 없습니다.
- 또한, kubelet 이러한 레이블 레이블 접두사를 추가/제거/업데이트할 수 있도록 허용합니다.
- 레이블을 사용하여 안전한 작업 부하 격리를 보장합니다.
- 특정 포드가 API 접근을 피하도록 합니다.
- ApiServer가 인터넷에 노출되는 것을 피합니다.
- 무단 접근 RBAC를 피합니다.
- 방화벽 및 IP 화이트리스트가 있는 ApiServer 포트.
- 기본적으로 kubelets가 node-restriction.kubernetes.io/ 접두사가 붙은 레이블을 추가/제거/수정하는 것을 방지합니다. 이 레이블 접두사는 관리자가 Node 객체에 워크로드 격리를 위해 라벨링하는 용도로 예약되어 있으며, kubelets는 해당 접두사를 가진 레이블을 수정할 수 없습니다.
- 또한 kubelets가 이러한 레이블 레이블 접두사를 추가/제거/수정할 수 있도록 허용합니다.
- 레이블을 통해 워크로드의 안전한 격리를 보장하세요.
- 특정 Pods가 API 접근하지 못하게 하세요.
- ApiServer가 인터넷에 노출되지 않도록 하세요.
- 무단 접근을 방지하도록 RBAC을 적용하세요.
- ApiServer 포트에 대해 방화벽 및 IP 화이트리스트 적용.
### SecurityContext 강화
### SecurityContext 하드닝
기본적으로 다른 사용자가 지정되지 않으면 Pod가 시작될 때 root 사용자가 사용됩니다. 다음과 유사한 템플릿을 사용하여 더 안전한 컨텍스트 내에서 애플리케이션을 실행할 수 있습니다:
기본적으로 Pod가 시작될 때 다른 사용자가 지정되지 않으면 root 사용자가 사용됩니다. 다음과 유사한 템플릿을 사용하여 애플리케이션을 더 안전한 컨텍스트에서 실행할 수 있습니다:
```yaml
apiVersion: v1
kind: Pod
@@ -181,27 +228,27 @@ allowPrivilegeEscalation: true
### 일반 하드닝
Kubernetes 환경을 필요에 따라 자주 업데이트하여 다음을 유지해야 합니다:
Kubernetes 환경을 필요한 빈도로 업데이트하여 다음을 유지해야 합니다:
- 종속성 최신 상태.
- 버그 및 보안 패치.
- 의존성 최신 상태 유지.
- 버그 및 보안 패치 적용.
[**릴리스 주기**](https://kubernetes.io/docs/setup/release/version-skew-policy/): 3개월마다 새로운 마이너 릴리스가 있습니다 -- 1.20.3 = 1(주요).20(마이너).3(패치)
[**Release cycles**](https://kubernetes.io/docs/setup/release/version-skew-policy/): 3개월마다 새로운 minor 릴리스가 배포됩니다 -- 1.20.3 = 1(Major).20(Minor).3(patch)
**Kubernetes 클러스터를 업데이트하는 가장 좋은 방법은 (다음에서** [**여기**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
**Kubernetes Cluster를 업데이트하는 가장 좋은 방법은 (출처:** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
- 다음 순서에 따라 마스터 노드 구성 요소를 업그레이드합니다:
- 다음 순서에 따라 마스터 노드 구성요소를 업그레이드하세요:
- etcd (모든 인스턴스).
- kube-apiserver (모든 제어 플레인 호스트).
- kube-apiserver (모든 컨트롤 플레인 호스트).
- kube-controller-manager.
- kube-scheduler.
- 클라우드 컨트롤러 매니저, 사용하는 경우.
- kube-proxy, kubelet과 같은 워커 노드 구성 요소를 업그레이드합니다.
- cloud controller manager (사용 중인 경우).
- kube-proxy, kubelet 등 Worker Node 구성요소를 업그레이드하세요.
## Kubernetes 모니터링 및 보안:
- Kyverno 정책 엔진
- Cilium Tetragon - eBPF 기반 보안 가시성 및 런타임 집행
- Kyverno Policy Engine
- Cilium Tetragon - eBPF 기반 보안 관찰성 및 런타임 강제 적용
- 네트워크 보안 정책
- Falco - 런타임 보안 모니터링 및 탐지