brunch

You can make anything
by writing

C.S.Lewis

by Master Seo May 30. 2022

6탄-1. EKS 보안


<1> 위협 모델링 기법

<2> 7가지 보안 위협

<3>  K8S의 각 계층별 보안 - 10가지 영역

<4> Image Security 관리

<5> Runtime Security?

<6> Image Security 관리

<7> 권한 관리

<8> IAM  Authenticator의 인증 과정

<9> 서비스 어카운트를 위한 IAM  기능을 보자.

<10> 네트워크 보안 (Network Security)

<11> 데이터 보안 암호화

<12>  위협 탐지 기능

<20> 개인 정리



<1> 위협 모델링 기법


1

공격의 시작점이나 공격자가 사용하는 도구, 공격자가 획득하고자 하는 목적 등에 따라서 다양한 위협들이 존재.


2

3가지  위협

외부자 위협

내부자 위협

서버스 운영시 사용하는 각종 도구 위협


3

보안 담당자?

예상 가능한 공격 방법 확인

방안 수립 필요



<2> 7가지 보안 위협


1

7 가지?

DDOS 공격

SSRF공격

권한 상승 공격

악성코드 삽입 공격

취약점 공격

Public Access

취약한 이미지


2

서비스 중단 목적 DDOS 공격

웹 애플리케이션의 취약점을 노린 SSRF공격

권한 상승 공격

악성코드 삽입 공격

OS 취약점 공격

주요 레파지토리에 대한 Public 접근

취약한 컨테이너 이미지 사용


3

해결법?

 AWS에서 제공하는 여러 계층별로  보안 서비스를 사용해야 한다.



<3>  K8S의 각 계층별 보안 - 10가지 영역


1

10가지 영역?

AWS 모범사례에 있다.


IAM

Data Encryption and Secret Management

Infrastructure Security

Pod Security

Multi-tenancy

Image Security

Network Security

Runtime Security

Detective Controls

Inceident Response and Forensics




<4> Infrastructure Security?


1

노드 인프라 보안 = OS 보안 강화

안정한 워커 노드의 선택은 어떻게????


2

개선 방향?


EKS 파 게이트 사용

EKS Optimized AMI 사용

커스템 AMI를 사용하는 경우는 인스펙터로  워커 노드 취약점을 주기적으로 점검하라!!

 EC2를 워커 노드로 사용할 때 꼭 필요한 라이브러리만 포함 하기

이미 하드닝 처리된 OS 사용하는 것도 좋다.

Bottlerocket이라는 컨테이너 실행을 위한 최적화된 OS 도 제공한다.

// 테스트해봐야겠네요~~

EC2 인스턴스 자체에 대한 접근제어 적용하기!! = 쿠버 네티스 API에 대한 보안



<5> Runtime Security?


모범사례?


1

첫째?

SELinux (Security - Enhanced Linux)   사용하기.


Mandatory Access Control을 제공하는 보안 기능.

파일이나 프로세스. 포트 등에 적용 가능.

레이블을 사용


Pod의   securityContext에서 사용 가능하다.

SELinux Options를 사용하면 지정된 Lable을 통해 파일이나 프로세스에 대한 접근 제어 구현 가능

컨테이너 자원이 중요 파일에 접근하는 것을 방지할 수 있다.


컨테이너와 호스트 간의 격리 제공

컨테이너 간의 격리도 제공



2

둘째?

SECCOMP(SECure COMPuting mode)


securityContext:

seccompProfile:

type:RuntimeDefault


애플리케이션에서 호출하는 시스템 콜에 대한 제한을 가능하게 하는 리눅스 보안 기능임.

파일이나 프로세스. 포트 등에 적용 가능하지는 않음.

애플리케이션으로부터 사용하는 시스템 콜만 제어한다.


3

셋째?

AppArmor (Application Armor)


Mandatory Access Control을 적용할 수 있는 기능.

레이블을 사용하지 않음.

컨테이너와 호스트 간의 격리만 제공  (컨테이너 간의 격리는 제공하지 않음)




<6> Image Security 관리


1

허가된 레지스트리 등록 사용

ECR사용 시 IAM 접근제어 사용

Open Policy Agent를 통해 정책을 수립하여 적용.


2

레지스트리에 대한 화이트 리스트 작성!

해당 레제스 트리만 접근 가능하도록 하자.


3

Sign 된 이미지만 허용하는 정책을 적용 가능!


4

ECR에서 제공하는 이미지 스캔 기능 사용!

기본 스캐닝 기능

새 인스펙터와 같이  Enhanced Scanning   기능을 제공한다.


5

ECR을 private 사용 가능하도록 VPC Endpoint를 제공한다.

VPC Endpoint를 호출하는 자격증명을 조직 내 자격증명으로 제한하여 관리할 수 있다.


6

ECR사용 시   레지스트리에 대한 접근 권한을 관련 팀만 접근 가능하도록 적용하자!

레파지토리는 팀별로 만들고, 관련 담당자만 접근하도록 권한을 부여하는 게 좋다!


7

ECR는 IAM제어도 가능.

레파지 토리에 Resource 기반 정책을 작성해 사용자별로 레파지토리 접근제어 가능하다.

특정 자격증명만 특정 레파지토리만 접근 가능하도록 가능하다.

멀티 계정 운영 환경에서도 접근 제어를 위해 활용 가능하다.

정책에 Condition을 추가하여 OU단위로 접근제어도 가능하다.


8

CI/CD를 위한 각 단계마다 보안 적용하자.


9

Security허브 , Cloudwatch, SNS와 통합해 자동화하는 것이 필요하다.


10

이미지는  ECR에  푸시될 때마다 자동적으로 검사 되어야 한다.




<7> 권한 관리


1

EKS에서 IAM  보안을 사용한다.


2

쿠버 네티스 인증과 인가?

쿠버 네티스에서 인증은 외부 것을 사용한다.

쿠버 네티스는 권한에 대한 인가만 수행한다.


3

구조는?

3개로 나누어진다.

사용자 , 서비스 어카운트

롤 바인딩


4

롤은  2개로 나누어진다.

네임스페이스로 제한되면 일반 롤

클러스터 자원을 제한하면 클러스터 롤로 나누어진다.


5

EKS에서 인증도 역시 IAM에서 이루어진다.


6

서비스 어카운트에서 AWS 리소스 접근은?

서비스 어카운트에 IAM role을 매핑해서 권한을 부여한다.


실습 참고

https://brunch.co.kr/@topasvga/2471




<8> IAM  Authenticator의 인증 과정


1

EKS에서는 인증을 수행한다.

EKS에서는 IAM  Authenticator를 통해  EKS 인증을 IAM와 연결한다.

 IAM  Authenticator도 설치가 필요하다.


2

AWS STS로 전달되면   Authenticator Server로부터 수신한 호출의  유효성이 검증하게 된다.


3

Authenticator Server는   Config Map에 자격증명이 맵핑되어 있는 K8S 사용자 정보를 확인

인증 성공 확인!!


4

이제 권한 확인 시도!

K8S Role  확인한다.

K8S  RBAC  ,   Role Binding에서  K8S Role 확인이 되는 것이다.

각 파드에서 사용 가능한 서비스 어카운트를 이용해여 권한을 부여하거나

EC2에 할당된 인스턴스 프로파일을 사용하는 방법이 있다.

EC2에 할당된 인스턴스 프로파일은 전체 파드가 권한을 사용하므로, 최소 권한 할당에 위배되어 사용하지 않도록 한다.




<9> 서비스 어카운트를 위한 IAM  기능을 보자.


IAM Role for Service Account라는 기능을 제공한다.

IRSA라고 한다.

파드에서 사용하는 서비스 어카운트 별로  롤을 사용하도록 할 수 있다.

각 파드에서  AWS  리소스를 접근해야 하는 경우가 생긴다.


사용하는 방법?


1

OIDC 기반의 Idp를 IAM 등록 필요


2

IAM  롤 생성

정책 할당

서비스 어카운트에 매핑할  IAM Role을 생성하고 권한을 주어야 한다.


3

K8S  서비스 어카운트 생성

룰이 준비되면, 롤이 사용할 서비스 어카운트를 만든다.


4

서비스 어카운트에 대한 Annotation  추가!

각 파드에서 사용하는 서비스 어카운트에 대한 롤 매핑이 완료된다.


5

S3에 접근하는 Pod는 서비스 어카운트를 통해   S3 만 접근한 롤을 사용하게 된다.




<10> 네트워크 보안 (Network Security)


1

쿠버 네티스 외부 네트워크 보안은?

AWS Network Firewall

NACL

보안 그룹


2

네트워크 경로에 보안?

폴리스 타입( 인그래스, 이그레스)에  따라 IP  블록이나 네임스페이스 실렉터, 파드 실렉터를 조합해  허용/차단한다.


3

보안 그룹은 노드 레벨에서 적용된다.


4

파드 단위 네트워크 보안이 필요하다.

Security Group for Pod  기능?

파드 레벨로 적용이 가능한 보안 그룹이 있다.

동일한 노드에 위치한 파드 간의 통신도 VPC Flow Log를 통해 로깅할 수 있다.

제약 조건: 이 기능은 Nitro Type의 인스턴스만 지원한다.   

인스턴스에 따른 최대 가능 파드 수도 고려해야 한다.




<11> 데이터 보안 암호화


EKS에서 사용하는 시크릿-KMS를 활용한 암호화.


1

 AWS KMS를 통해 암호화 하자.


2

CloudTrail 통해 KMS 사용에 대해 체크도 가능하다.




<12>  위협 탐지 기능


가드 듀티

DNS  

FLOW LOG

EKS   위협 탑지 기능 추가됨.  - 별도로 활성화해야 함.  30일간 무료 체험 가능.




<20> 개인 정리


EKS 보안 관련 실습해보자~


https://brunch.co.kr/@topasvga/1679


https://brunch.co.kr/@topasvga/1769


https://brunch.co.kr/@topasvga/1760


https://brunch.co.kr/@topasvga/2439



감사합니다.

매거진의 이전글 EKS 6탄-4. Amazon EKS 마이그레이션 요점
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari