쿠버네티스 스터디 (PKOS 2기) - 5주차

김준영·2023년 4월 8일
0

CloudNet PKOS2기

목록 보기
5/5

글에 중간 중간에 첨부된 다이어그램은 스터디에서 사용하는 다이어그램을 캡처하였습니다.

쿠버네티스 보안도구 활용

쿠버네티스 내부에 실행중인 모든 파드는 기본설정으로 클러스터 내 다른 모든 파드와 통신이 가능하다. 따라서 특정 파드가 외부 공격자에 노출되면 같은 노드 내 다른 파드는 물론 통신이 가능한 클러스터 전체의 다른 노드에서 실행중인 모든 파드에 영향이 가게 된다.

쿠버네티스의 대표적 취약점

  • 컨테이너는 호스트 노드와 커널을 공유하므로 부적절하게 설정된 컨테이너의 root 권한은 호스트 노드에 영향을 끼칠 수 있음
  • 클러스터 내에서 실행 중인 파드는 노드 간 이동이 자유로워 특정 파드에 문제가 생기면 전체 노드로 문제가 확산될 수 있음
  • 온프레미스 쿠버네티스 또는 매니지드 클라우드 서비스 등 다양한 환경으로 구성된 쿠버네티스 환경은 통일된 보안 구성을 유지하기 어려움

보안 적용 대상

  1. 클라우드 (Cloud)
  2. 클러스터 (Cluster)
  3. 컨테이너 (Container)
  4. 코드 (Code)

kubescape - NSA/CISA 프레임워크 기반 보안 점검 도구

쿠버네티스 보안 권고 사항 대비 현재 클러스터의 취약점을 점검하는 도구이다.

# 설치 방법
curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash

설치가 완료되면 즉시 명령어 실행 할 수 있다.
주요 명령어는 아래와 같음

  • download
    오프라인 상태에서 보안 취약점을 확인한다.
  • scan
    현재 클러스터 또는 YAML 파일의 보안 취약점을 확인
  • submit
    kubescape 오픈소스를 제공하는 ARMO사의 클라우드 서비스를 이용해 온라인에서 현재 취약점에 대한 개선 방안, 점건 내역 히스토리, 예외 처리 적용 내역 등을 확인
# 보안 취약점 확인
kubescape scan framework nsa -e kube-system,kube-public

온라인으로 상세내역 확인

portal.armo.cloud에 회원가입 후 제공되는 명령어 대로 진행.

이슈들을 볼 수 있는데 이슈에 해당하는 파드와 네임스페이스까지 나오니 굉장히 편리해보였다.

마치 코드 품질을 관리하는 Sonarqube처럼 인프라 구성을 관리해주는 시스템인 것 같다.

역할 기반 접근 제어 (RBAC) 설정

지금까지는 모든 권한을 가지는 슈퍼 어드민 (super admin) 즉, 관리자 계정을 사용했었음. 쿠버네티스도 리눅스 환경의 root 사용자처럼 관리자 계정으로 작업이 가능하다.
쿠버네티스에서도 멀티테넌시 환경을 지원한다.

멀티테넌시란 단일 인스턴스에 여러 사용자 그룹에 서비스를 제공하는 아키텍처

사용자별로 권한을 구분해서 네임스페이스 단위로 특정 기능만 가능하도록 제한하거나 네트워크 정책을 통한 외부 네임스페이스에서의 접근을 차단하거나 네임스페이스 단위로 리소스 할당량을 지정해 자원을 제한하는 것들이 있음
이런 구성요소들은 Role/RoleBinding, ClusterRole/ClusterRoleBinding, ServiceAccount(Token), 쿠버네티스 컨텍스트, User 등이 있음.

Role은 특정 네임스페이스에 속하는 파드, 서비스 등의 리소스를 지정하는 경우에 사용하고 두번째 ClusterRole은 네임스페이스에 속하지 않는 노드, PV 혹은 단일 네임스페이스가 아닌 전체 네임스페이스의 파드를 조회하는 권한 등에 사용한다.

# role yaml 파일 작성
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: test-role
  namespace: test
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["*"]
  verbs: ["*"]
- apiGroups: ["batch"]
  resources:
  - jobs
  - cronjobs
verbs: ["*"]

위 Role을 사용자에게 적용하려면 RoleBinding이 필요하다. 실제 데이터가 저장되는 PV(PersistentVolume)과 해당 데이터를 파드에 할당하는 PVC(PersistentVolumeClaim) 을 서로 분리하듯이 실제 권한을 지정한 Role과 해당 권한을 사용자에게 할당하는 RoleBinding은 서로 분리되어 있음.

# rolebinding yaml 파일 생성
kind: RoleBinding
apiVersion: rbac.authorization/k8s.io/v1
metadata:
  name: test-role-binding
  namespace: test
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: test-role
subjects:
- kind: ServiceAccount
  name: test-sa
  namespace: test
  • roleRef를 통해 role과 연동

0개의 댓글