가시다님 EKS 스터디 참여하고 내용을 정리합니다.
EKS 처음 설치한다고 가정하면 어떻게 설치하는것이 Best Practice일까 고민을 많이 한다. 항상 그렇듯이 현재 설정은 무언가 아쉽고 불만이다. 하지만 막상 변경하려고 하면 이런저런 고민을 핑계로 미룬다.
그래서 처음 설치하면 조금이라도 제대로 할 수 있지 않을까 생각한다. 처음할 때 제대로 하는게 당연히 좋다. 내 경험이 비록 제한이 많지만 그래도 실제 경험은 항상 소중하니, 혹시 새롭게 구성하는 사람들에게 작은 도움이 될까봐 정리한다.
보안은 네트워크만큼 늘 어렵다. 좀처럼 안는다.
가시다님 보안 스터디도 볼 때마다 참 새롭다. 모르는 내용들이 참 많다. 쿠버네티스에 인증서가 저렇게 많았나? IRSA 이용하면 Mutating Webhook을 사용하는구나 등 이번에도 많은 것이 새롭다.
실제 업무에서도 다른 분들에게 많이 기댄다. 아직 나에게 보안은 전문가가 필요하다. EKS 보안 관련 현재 사용 중인거 앞으로 사용해야 할 것들을 정리해 본다.
Pod Security Context
# Security
podSecurityContext:
runAsNonRoot: true
fsGroup: 2000
seccompProfile:
type: RuntimeDefault
securityContext:
runAsUser: 1000
runAsGroup: 3000
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
- 이미지 Build 시 root 사용자가 아닌 별도 사용자(user 1000)를 만들게 하고 기본 포트는 80이 아닌 8080을 지정하게 한다.
- readOnlyRootFilesystem 은 못지키는 경우가 있다. 로그 등을 stdout, stderr로 출력 + EmptyDir Volume 등 임시 볼륨을 사용하게 하는 수준으로 해결하지만 그냥 false 하는 경우도 많다.
GuardDuty 활용
- 가드듀티 메시지를 데이터독 SIEM으로 모으고 SIEM 로그는 다시 Slack으로 전송한다.
- SlackOps 개념을 적극 활용해서 웬만한 이벤트, 알람 등은 슬랙으로 전송한다. 슬랙만 잘 보고 있으면 별 문제 없도록 만드는 것이 목표다.
- 생각보다 가드듀티 알람 메시지가 별로 오지 않는다. 어느 정도는 안전하게 운영하는 듯
- 비용 문제로 Audit 로그 등은 보관하지 않음.
EKS API Server Private Access
- VPN 이용 내부 Private 네트워크에서만 EKS 접속 가능하도록 설정
Private Domain
- ArgoCD, Grafana, 개발자 확인 용 Swagger 등의 서비스 도메인을 Route53 외부 Public 도메인이 아니라 Private 도메인으로 설정(작업 중)
- 물론 ALB Scheme도 internal 설정
- Ingress Annotations 예시
alb.ingress.kubernetes.io/scheme: internal
Cert-Manager 이용 인증서 생성
- 외부와 mTLS 연결 용도로 인증서 생성할 때 cert-manager 이용
- 그런데, 클라이언트 인증서가 아닌 CA 인증서는 자동으로 갱신되지 않는다. (30년 인증서 사용 하는걸로.... )
- secret으로 바로 저장되고 편리하다.
Pod Indentity Provider, EKS API Access 적용
- AWS aws-auth, IRSA 에서 전환 예정
옥타 이용 EKS 사용자 인증
- 사용자 별 네임스페이스 단위로 나누어서 권한 제한 예정
- 옥타 비싼만큼 편리하다.
Kyverno
- 사용하다 현재는 활용성이 많이 떨어졌다. 아직 조직 규모가 크지 않아 Mutating, Validating Webhook 많이 사용하지 않는다.
- 게을러서 혹은 중요도가 떨어져서 정도