<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
감사합니다.