pods/exec 서브리소스 권한

728x90

jenkins agent pod 를 사용하면서 pod 에 적절한 권한을 부여하는 과정에 pods/exec 의 권한에 대해 알아볼 기회가 생겼습니다.

 

pods/exec 의 get/watch/list 권한과 get/watch/list/create 권한의 차이점은 다음과 같습니다.

 

1. get/watch/list 권한을 부여했을 때:

   - 파드 내부의 컨테이너에서 실행되는 명령 경로에 대한 정보를 가져올 수 있습니다.

   - 파드에 대한 리소스 사용량 정보, 실행 중인 컨테이너의 상태 정보 등을 가져올 수 있습니다.

   - 작업자의 작업에 대한 초기 진단 및 디버깅을 수행할 수 있습니다.

   - 컨테이너의 리소스 정보를 모니터링하고 관리할 수 있습니다.

 

2. get/watch/list/create 권한을 부여했을 때:

   - create 서브리소스에 대한 권한을 갖게 되며, 파드 내부의 컨테이너에서 실행할 명령 경로를 지정할 수 있습니다.

   - 작업자의 작업에 대한 모니터링, 진단 및 디버깅, 그리고 컨테이너의 리소스 관리를 수행할 수 있으면서도 보안 요소를 고려합니다.

   - 따라서, 보안을 강화하기 위해서는 권한 설정 시에 파드 내부 상세 정보를 기반으로 적절한 권한 부여 및 서비스 계정 설정을 수행해야 합니다.

 

즉, get/watch/list/create 권한을 부여하면 파드 내부의 컨테이너를 직접적으로 조작할 수 있는 권한을 가지게 되며, 보안 상의 고려사항이 더욱 중요해집니다. 이에 반해, get/watch/list 권한은 파드 내부의 상태 정보 및 리소스 사용량 정보를 가져올 수 있지만, 직접적으로 컨테이너를 조작하는 권한은 없습니다.

 

'파드 내부의 컨테이너에서 실행할 명령 경로'는 exec API를 사용하여 쿠버네티스 클러스터에서 작동되고 있는 Pod의 컨테이너에서 실행할 Shell 명령어 또는 프로세스를 지정합니다.예를 들어, 다음 명령은 nginx라는 컨테이너가 실행되고 있는 Pod의 /var/log/nginx/access.log 파일의 일부분을 확인합니다.

 

$ kubectl exec <pod-name> -c nginx -- tail -f /var/log/nginx/access.log


위 명령에서 exec API는 쿠버네티스 클러스터 내에서 실행되고 있는 Pod에 지정한 Shell 명령어 tail -f /var/log/nginx/access.log를 실행시키라고 지시하게 됩니다.

 

즉, 이 과정에서 get/watch/list/create 서브리소스 엔드포인트를 통해 컨테이너의 로그를 확인하거나 컨테이너에 명령을 전송합니다.

따라서, 파드 내부의 컨테이너에서 실행할 명령 경로를 지정할 수 있다는 것은 쿠버네티스 클러스터에서 실행 중인 파드의 컨테이너에서 Shell 명령어 또는 프로세스를 실행할 수 있다는 것을 의미합니다.

 

 

728x90