부록 C. 역할 기반 액세스 제어(RBAC)
오퍼레이터 SDK가 오퍼레이터 프로젝트를 생성하면(헬름, 앤서블 또는 Go 기반 오퍼레이터에 관계없이), 오퍼레이터 배포를 위한 여러 매니페스트 파일을 생성한다. 이러한 파일 중 다수는 배포된 오퍼레이터가 수명 기간 동안 수행하는 다양한 작업을 수행할 수 있는 권한을 부여합니다.
운영자 SDK는 운영자 권한과 관련된 세 개의 파일을 생성합니다:
- 배포/서비스_계정.yaml
-
사용자로 인증하는 대신, Kubernetes는 서비스 어카운트 형태의 프로그래밍 인증 방법을 제공한다. 서비스 어카운트는 Kubernetes API에 대한 요청을 할 때 오퍼레이터 파드의 ID로 작동합니다. 이 파일은 단순히 서비스 어카운트 자체를 정의하며, 수동으로 편집할 필요가 없다. 서비스 어카운트에 대한 자세한 정보는 Kubernetes 문서에서 확인할 수 있다.
- 배포/역할.yaml
-
이 파일은 서비스 계정에 대한 역할을 만들고 구성합니다. 역할에 따라 클러스터 API와 상호 작용할 때 서비스 계정에 어떤 권한이 있는지가 결정됩니다. 운영자 SDK는 이 파일을 매우 광범위한 권한으로 생성하므로 보안상의 이유로 운영자를 프로덕션에 배포하기 전에 편집하는 것이 좋습니다. 다음 섹션에서는 이 파일의 기본 권한을 구체화하는 방법에 대해 자세히 설명합니다.
- 배포/역할_바인딩.yaml
-
이 파일은 서비스 계정을 역할에 매핑하는 역할 바인딩을 만듭니다. 생성된 파일은 변경할 필요가 없습니다.
역할 미세 조정
가장 기본적인 수준에서 역할은 리소스 유형을 사용자 또는 서비스 계정이 해당 유형의 리소스에 대해 수행할 수 있는 작업(역할 리소스 용어로는 "동사"라고 함)에 매핑합니다. 예를 들어 다음 역할은 배포에 대한 보기 권한(만들기 또는 삭제 권한은 없음)을 부여합니다:
-apiGroups:["apps"]resources:["deployments"]verbs:["get","list","watch"]
오퍼레이터 SDK는 오퍼레이터가 클러스터와 상호 작용해야 하는 범위를 알지 못하기 때문에, 기본 역할은 다양한 Kubernetes 리소스 유형에 대한 모든 작업을 허용한다. SDK에서 생성된 오퍼레이터 프로젝트에서 가져온 다음 스니펫은 이를 설명한다. * 와일드카드는 지정된 리소스에 대한 모든 작업을 허용합니다:
...-apiGroups:-""resources:-pods-services-endpoints-persistentvolumeclaims-events-configmaps-secretsverbs:-'*'-apiGroups:-appsresources:-deployments-daemonsets-replicasets-statefulsetsverbs:-'*'...
당연히 서비스 계정에 이렇게 광범위하고 개방적인 권한을 부여하는 것은 나쁜 관행으로 간주됩니다. 구체적으로 변경해야 하는 사항은 운영자의 범위와 행동에 따라 다릅니다. 일반적으로 운영자의 ...