Kubernetes 클러스터의 노드를 보호하기 위해 접근을 제한하고 공격 표면을 최소화하는 방법에 대해 알아보겠습니다.
표준적인 관행으로 ControlPlane과 노드의 인터넷 노출을 제한하는 것이 중요합니다. 관리형 Kubernetes 서비스를 클라우드에서 실행 중인 경우, 경우에 따라 제어 평면 노드에 접근할 수 없을 가능성이 높습니다. 그러나 자체 호스팅 클러스터나 일부 관리형 Kubernetes 제공자의 경우, 노드를 사설 네트워크에 프로비저닝하는 것이 이를 달성하는 한 가지 방법입니다.
공용 접근이 비활성화되면 VPN 솔루션을 통해 클러스터에 안전하게 접근할 수 있습니다. 사설 네트워크에 접근하기 위해 VPN 솔루션을 구현하는 것이 불가능한 경우, 인프라 방화벽 내에서 승인된 네트워크를 활성화하는 대안이 있습니다. 이 옵션은 소스 IP 주소 범위를 기반으로 노드에 대한 접근을 제한할 수 있습니다. 예를 들어, 44.44.44.0/24 범위의 IP 주소로부터의 연결은 허용하고 33.33.33.0/24 범위의 연결은 차단할 수 있습니다.
호스트 자체에서 직접 연결을 차단할 수도 있습니다. 이는 내부 엔터티가 이미 Kubernetes 노드에 네트워크 수준 접근을 가지고 있을 때 유용합니다.
누가 클러스터의 노드에 SSH 접근이 필요한지 고려해보아야 합니다. 시스템 관리자는 노드를 관리하고 작동 상태를 유지하며, 업그레이드하고 문제를 해결하기 위해 접근이 필요합니다. 그러나 개발자는 노드에 접근할 필요가 없습니다. 프로덕션 시스템에서는 개발자가 노드에 접근할 수 없어야 합니다. 예외적으로 개발 클러스터에서는 접근이 허용될 수 있습니다. 최종 사용자는 노드에 접근할 수 없어야 합니다.
Linux 시스템에서 사용자 계정을 관리하는 방법을 살펴보겠습니다. 계정에는 네 가지 유형이 있습니다.
Linux에서 사용자에 대한 세부 정보를 확인하려면 몇 가지 간단한 명령어를 사용할 수 있습니다.
$ id
uid=1000(michael) gid=1000(michael) groups=1000(michael)1010(admin)
$ who
michael pts/2 Apr 28 06:48 (172.16.238.187)
$ last
michael :1 :1 Tue May 12 20:00 still logged in
sarah :1 :1 Tue May 12 12:00 still running
reboot system boot 5.3.0-758-gen Mon May 11 13:00 - 19:00 (06:00)
대부분의 접근 제어 파일은 /etc 디렉토리에 저장됩니다.
/etc/passwd
파일: 시스템의 사용자에 대한 기본 정보, 예를 들어 사용자 이름, UID, GID, 홈 디렉토리 및 기본 셸이 포함되어 있습니다. 이 파일 자체는 비밀번호를 저장하지 않습니다. 비밀번호는 /etc/shadow
파일에 저장됩니다/etc/shadow
파일: 파일의 내용은 해시되어 있습니다./etc/group
파일: 시스템의 모든 사용자 그룹에 대한 정보를 저장합니다.# /etc/passwd
$ grep -i ^michael /etc/passwd
michael:x:1001:1001::/home/michael:/bin/bash
# /etc/shadow
$ grep -i ^michael /etc/shadow
michael:$6$0h0utOtO$5JcuRxR7y72LLQk4Kdog7u09LsNFS0yZPkIC8pV9tgD0wXCHut
YcWF/7.eJ3TfGfG0lj4JF63PyuPwKC18tJS.:18188:0:99999:7:::
# /etc/group
$ grep -i ^bob /etc/group
developer:x:1001:bob,michael
접근 제어 파일의 정보를 기반으로 "ID", "who", "last" 등의 명령어를 사용하여 운영 체제에서 어떤 계정이 접근 권한을 가지고 있는지 조사하고 분석할 수 있습니다. 최소 권한 원칙을 준수하여 시스템에서 사용되지 않는 계정을 제거하거나 비활성화해야 합니다.
userdel
명령어를 사용하여 계정을 완전히 삭제할 수도 있습니다.deluser
명령어를 사용하여 사용자를 그룹에서 제거할 수 있습니다.# nologin 셸 설정
$ usermod –s /bin/nologin michael
$ grep –i michael /etc/passwd
michael:x:1001:1001::/home/michael:/bin/nologin
# 계정 삭제
$ userdel bob
$ grep –i bob /etc/passwd
# 그룹에서 사용자 제거
$ id michael
uid=1001(michael) gid=1001(michael) groups=1001(michael),1000(admin)
$ deluser michael admin
Removing user `michael` from group `admin` ...
Done.
$ id michael
uid=1001(michael) gid=1001(michael) groups=1001(michael)
이번 포스팅에서는 Kubernetes 클러스터의 노드 보안을 강화하기 위한 다양한 접근 제한 방법에 대해 알아보았습니다.