이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
Amazon EKS에서 Kubernetes RBAC 강화
Kubernetes 역할 기반 액세스 제어(RBAC)는 클러스터 내에서 자격 증명이 수행할 수 있는 작업을 제어합니다. CSI 드라이버 및 DaemonSets로 설치된 기타 추가 기능을 비롯한 많은 클러스터 구성 요소가 작동하려면 광범위한 권한이 필요합니다. 이러한 권한을 검토하고 범위를 조정하면 의도하지 않은 액세스의 잠재적 범위가 줄어듭니다.
이 주제에서는 일반적인 클러스터 구성 요소에 대한 권한 고려 사항 및 권장하는 제어 조치에 대해 설명합니다.
DaemonSet 서비스 계정 권한
DaemonSet 포드는 클러스터의 모든 노드에서 실행되므로, 서비스 계정 토큰과 해당 토큰이 부여하는 RBAC 권한은 모든 노드에 존재합니다.
노드의 무단 프로세스는 DaemonSet 포드를 비롯하여, 동일한 노드에서 실행되는 다른 포드의 서비스 계정 토큰에 액세스할 수 있습니다. DaemonSet 서비스 계정에 부여된 RBAC 권한은 클러스터의 모든 노드에서 동일합니다.
DaemonSets로 일반적으로 배포되는 구성 요소는 다음과 같습니다.
-
CSI 노드 드라이버(
ebs-csi-node,efs-csi-node,mountpoint-s3-csi-node) -
Amazon VPC CNI 플러그인(
aws-node) -
kube-proxy
DaemonSet 포드에 EKS Pod Identity 또는 AWS 서비스 계정에 대한 IAM 역할(IRSA)을 통한 IAM 자격 증명이 있는 경우, 동일한 노드에서 컨테이너 외부에 액세스하는 프로세스도 이러한 자격 증명에 액세스할 수 있습니다. 이렇게 하면 Kubernetes RBAC를 넘어 DaemonSet의 IAM 역할에 부여된 모든 AWS API 권한으로 영향 범위가 확장됩니다.
중요
권한을 검토할 경우, 모든 DaemonSet 서비스 계정의 Kubernetes RBAC 권한과 IAM 권한을 클러스터의 모든 노드에서 액세스할 수 있는 것으로 취급하세요.
CSI 드라이버 RBAC 범위
CSI 드라이버는 노드, 영구 볼륨, 스토리지 API와 상호 작용하므로 광범위한 RBAC 권한을 보유합니다.
노드 객체 권한
테인트 제거 또는 기타 노드 관리 태스크 등과 같은 기능을 지원하도록 노드 객체를 수정하려면 CSI 드라이버에 RBAC 권한이 필요할 수 있습니다. Kubernetes RBAC 제한 사항으로 인해, 이러한 권한은 드라이버가 실행 중인 로컬 노드뿐만 아니라 클러스터의 모든 노드 객체에 적용됩니다.
EBS CSI 드라이버의 경우 헬름 차트는 ebs-csi-node 서비스 계정에서 노드 수정 권한을 제거하는 파라미터(node.serviceAccount.disableMutation)를 제공합니다. 이렇게 하면 테인트 제거 기능이 비활성화됩니다.
서비스 계정 토큰 노출
CSI 드라이버 포드는 인증을 위해 프로젝션된 서비스 계정 토큰을 사용할 수 있습니다. 무단 프로세스가 컨테이너 외부에서 액세스 권한을 얻은 노드에서는 컨테이너 파일 시스템 또는 kubelet API를 통해 해당 토큰에 액세스할 수 있습니다. 서비스 계정이 EKS Pod Identity 또는 IRSA를 통해 IAM 역할과 연결된 경우, 노출된 토큰을 사용하여 AWS IAM 자격 증명을 얻을 수 있습니다.
권장 제어 조치
RBAC의 범위를 최소 권한으로 지정
-
CSI 드라이버 및 DaemonSet 서비스 계정에 바인딩된 ClusterRoles를 검토합니다. 워크로드에 필요하지 않은 권한을 제거합니다.
-
EBS CSI 드라이버의 경우, 테인트 제거 기능을 사용하지 않는다면
node.serviceAccount.disableMutation을true로 설정합니다. -
kubectl auth can-i --list --as=system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT를 사용하여 유효 권한을 감사합니다.
포드 보안 표준 적용
기본 제공되는 포드 보안 승인 컨트롤러 또는 정책 엔진을 사용하여 Kubernetes 포드 보안 표준baseline 프로파일과 워크로드 네임스페이스의 restricted 프로파일을 적용합니다. 이렇게 하면 시스템 네임스페이스 외부에서 권한이 있는 컨테이너를 생성할 수 있는 기능이 제한됩니다.
네트워크 정책 사용
네트워크 정책을 적용하여 CSI 드라이버 및 DaemonSet 포드에서 나가는 송신을 필요한 엔드포인트(예: Kubernetes API 서버 및 AWS 서비스 엔드포인트)로만 제한합니다. 이렇게 하면 발생 가능한 작업 범위가 줄어듭니다.
RBAC 활동 모니터링
Kubernetes 감사 로깅을 활성화하고 DaemonSet 서비스 계정에서 예기치 않은 API 직접 호출을 모니터링합니다. 다음과 같은 사항이 있는지 찾습니다.
-
CSI 드라이버 서비스 계정의 노드 수정 사항
-
시스템 네임스페이스에서 포드 생성
-
보안 암호에 대한 비정상적인
get또는list직접 호출
자세한 내용은 CloudWatch Logs에 컨트롤 플레인 로그 전송 섹션을 참조하세요.