Amazon EKS에서 Kubernetes RBAC 강화하기
Amazon EKS에서 Kubernetes RBAC 강화하기
Kubernetes RBAC(Role-Based Access Control)는 클러스터 안에서 ID가 수행할 수 있는 작업을 제어해요. DaemonSet으로 설치되는 CSI 드라이버와 기타 애드온을 포함한 많은 클러스터 구성 요소는 동작하기 위해 광범위한 권한이 필요해요. 이러한 권한을 검토하고 범위를 제한하면 의도하지 않은 접근의 잠재적 영향 범위를 줄일 수 있어요.
이 토픽은 일반적인 클러스터 구성 요소의 권한 고려 사항과 권장 통제를 설명해요.
출처: 문서
본문
DaemonSet 서비스 계정 권한
DaemonSet Pod는 클러스터의 모든 노드에서 실행되므로, 그들의 서비스 계정 토큰과 그 토큰이 부여하는 RBAC 권한이 모든 노드에 존재해요.
노드의 무단 프로세스가 같은 노드에서 실행 중인 다른 Pod(DaemonSet Pod 포함)의 서비스 계정 토큰에 접근할 수 있을 수 있어요. DaemonSet 서비스 계정에 부여된 RBAC 권한은 클러스터의 모든 노드에서 동일해요.
일반적으로 DaemonSet으로 배포되는 구성 요소는 다음과 같아요.
- CSI 노드 드라이버(
ebs-csi-node,efs-csi-node,mountpoint-s3-csi-node) - Amazon VPC CNI 플러그인(
aws-node) kube-proxy
DaemonSet Pod가 EKS Pod Identity 또는 IRSA(IAM Roles for Service Accounts)를 통해 AWS IAM 자격 증명을 가진다면, 같은 노드에서 컨테이너 밖으로 접근 권한을 얻은 프로세스가 그 자격 증명에도 접근할 수 있어요. 이는 영향 범위를 Kubernetes RBAC를 넘어 DaemonSet의 IAM 역할에 부여된 모든 AWS API 권한으로 확장해요.
중요
권한을 검토할 때는 모든 DaemonSet 서비스 계정의 Kubernetes RBAC 권한과 IAM 권한을 클러스터의 모든 노드에서 접근 가능한 것으로 취급하세요.
CSI 드라이버 RBAC 범위
CSI 드라이버는 노드, 영구 볼륨(persistent volume), 스토리지 API와 상호작용하므로 일반적으로 광범위한 RBAC 권한을 가져요.
노드 객체 권한
CSI 드라이버는 테인트 제거(taint removal)나 다른 노드 관리 작업 같은 기능을 지원하기 위해 Node 객체를 수정하는 RBAC 권한이 필요할 수 있어요. Kubernetes RBAC 제한 때문에 이러한 권한은 드라이버가 실행되는 로컬 노드뿐만 아니라 클러스터의 모든 Node 객체에 적용돼요.
EBS CSI 드라이버의 경우 Helm 차트에서 ebs-csi-node 서비스 계정에서 노드 수정 권한을 제거하는 파라미터(node.serviceAccount.disableMutation)를 제공해요. 이를 활성화하면 테인트 제거 기능이 비활성화돼요.
서비스 계정 토큰 노출
CSI 드라이버 Pod는 인증에 투영된 서비스 계정 토큰(projected service account tokens)을 사용할 수 있어요. 무단 프로세스가 컨테이너 밖으로 접근 권한을 얻은 노드에서는 그 토큰이 컨테이너 파일 시스템이나 kubelet API를 통해 접근될 수 있어요. 서비스 계정이 EKS Pod Identity 또는 IRSA를 통해 IAM 역할과도 연결되어 있다면, 노출된 토큰으로 AWS IAM 자격 증명을 얻을 수 있어요.
권장 통제
RBAC를 최소 권한으로 범위 제한
CSI 드라이버와 DaemonSet 서비스 계정에 바인딩된 ClusterRole을 검토하고 워크로드에 필요하지 않은 권한을 제거하세요.
- EBS CSI 드라이버의 경우 테인트 제거 기능을 사용하지 않는다면
node.serviceAccount.disableMutation을true로 설정하세요. kubectl auth can-i --list --as=system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT를 사용해 유효 권한을 감사하세요.
Pod 보안 표준 적용
기본 제공되는 Pod Security Admission 컨트롤러 또는 정책 엔진으로 Kubernetes Pod Security Standards를 적용하세요. 최소한 baseline 프로필을 클러스터 전체에, restricted 프로필을 워크로드 네임스페이스에 적용하세요. 이렇게 하면 시스템 네임스페이스 밖에서 권한 있는 컨테이너를 만드는 것을 제한할 수 있어요.
네트워크 정책 사용
CSI 드라이버와 DaemonSet Pod의 egress를 필요한 엔드포인트(예: Kubernetes API 서버와 AWS 서비스 엔드포인트)로만 제한하도록 네트워크 정책을 적용하세요. 이는 가능한 작업 범위를 줄여줘요.
RBAC 활동 모니터링
Kubernetes 감사 로깅을 활성화하고 DaemonSet 서비스 계정에서 발생하는 예상치 못한 API 호출을 모니터링하세요. 다음을 주의 깊게 살펴보세요.
- CSI 드라이버 서비스 계정의 노드 수정
- 시스템 네임스페이스에서의 Pod 생성
- Secrets에 대한 비정상적인
get또는list호출
자세한 내용은 컨트롤 플레인 로그를 CloudWatch Logs로 보내기를 참고하세요.