13.1 인증
사용자가 쿠버네티스의 API에 접근하려면 인증이 필요함.
외부에서 접속시 TLS 인증이 적용되어있음.
접속하려면 kube-apiserver에 있는 인증서와 클라이언트에 있는 인증서 사이의 검증을 통과해야함.
-> 인증되지 않은 클라이언트가 kube-apiserver에 접속하지 못하게 하려는 것
쿠버네티스는 접속시에 사용자 계정과 서비스 계정으로 인증을 요청함.
사용자 계정은 별도의 외부 인증 시스템에 있는 사용자 정보를 연결해 사용함
서비스 계정은 쿠버네티스가 직접 관리하는 사용자 계정이며 시크릿이 할당되어있어 비밀번호 역할을 함
- kubectl의 config 파일에 있는 TLS 인증 정보 구조 확인하기
Kube-apiserver와 통신할 때 기본 인증 방법으로 TLS를 사용함.
TLS는 통신할 때 오가는 패킷을 암호화함.
TLS는 서버뿐만 아니라 클라이언트가 유효한지도 검증함.
~/.kube/config 파일에 인증 정보가 있음 (kubectl 명령시 적용됨)
‘ Kubectl config view ‘ : 클러스터에 있는 컨피그
‘ kubectl config --kubeconfig=/root/my-kube-config use-context research ’ : current-context 설정하기
- Clusters
.cluster.insecure-skip : 인증서가 공인 기관이 인증서인지 검증하는 과정을 건너뜀
.cluster.server : 외부에서 쿠버네티스 API에 접속할 주소 설정
.name : 클러스터의 이름을 설정함 - Contexts
.context.cluster : 접근할 클러스터를 설정
.context.user : 클러스터에 접근할 사용자 그룹
.context.namespace : 특정 네임스페이스 설정가능
.name : 컨텍스트의 이름 - Current-context : contexts 필드가 여러 개 있을 때 무엇을 선택해서 클러스터에 접근할 지 결정함
- Users
.name : 사용자 그룹의 이름을 설정함
.user.client-certificate-data : 클라이언트 인증에 필요한 해시값을 설정함
.user.client-key-data : 클라이언트의 키 해시값
2. 서비스 계정 토큰을 이용해 인증하기
config파일의 user필드를 서비스 계정으로 대체해서 사용하도록 변경함
‘ Kubectl get serviceaccount ’ : 서비스 게정 확인
Config 파일에 contexts.context.user을 users.name과 연결시켜주고
users[].user. 값에 secret의 ‘키:값’ 을 넣어줌
13.2 권한 관리
클러스터의 API에 접근하려면 먼저 접근할 수 있는 사용자인지 인증을 거쳐야 함.
인증 후에는 사용자가 접근하려는 API를 사용할 권한이 있는지 확인한 후 API를 사용할 수 있음.
- ABAC: 속성 기반의 권한 관리
사용자, 그룹, 요청 경로, 요청 동사를 속성으로 사용하고 권한 설정 내용을 파일로 관리
- RBAC : 역할 기반 권한 관리
사용자와 역할을 별개로 선언한 후 두 가지를 조합해서 사용자에게 권한을 부여
kubectl이나 API를 이용해서 관리 가능
- 롤
특정 API나 자원 사용 권한들을 명시해둔 규칙의 집합
롤이 속한 네임스페이스에만 적용됨.
추가로 네임스페이스에 한정되지 않은 자원과 API들의 사용 권한을 설정할 수 있음. (+엔드포인트)
‘kubectl create role developer --namespace=default --verb=list,create --resource=pods’
- apiVersion : 쿠버네티스의 RBAC 권한 관리 기능을 뜻하는 “rbac.authorization.k8s.io/v1” 를 설정
- Metadata.namespace : 이 롤이 속한 기본 네임스페이스 설정
- Metadata.name : 롤의 이름
- Rules : 이 롤이 갖는 권한의 규칙
.apiGroups : 롤이 사용할 API그룹
.resources : 어떤 자원에 접근할 수 있는지 명시
.resourceNames : 해당 자원이 허가되는 자원의 특정 이름 명시
.verbs : 어떤 동작을 할 수 있는지
.nonResourceURLs : URL형식으로 규칙 설정 가능
2.클러스터롤
클러스터 전체 사용 권한 관리
네임스페이스 전체에 있음
- aggregationRule : 다른 클러스터롤을 조합해 사용
.clusterRoleSelectors
.matchLabels : 레이블로 클러스터롤 선택
3. 롤바인딩
롤과 사용자를 묶는 역할. 사용자가 어떤 롤을 사용하는지 설정함.
‘kubectl create rolebinding dev-user-binding --namespace=default --role=developer --user=dev-user’
- Kind
ServiceAccount : 서비스 계정 - Metadata
name : 이름 지정
namespace : 네임스페이스 지정
- subjects : 어떤 유형의 사용자 계정과 연결하는지 설정
.kind : 사용자 계정 종류
.name
.apiGroup : - roleRef : 사용자에게 어떤 롤을 할당할 지
.kind
.name
.apiGroup : 사용하는 API를 설정
4.클러스터롤바인딩
5. 다양한 롤의 권한 관리 확인하기
‘ Kubectl config “’명령” ‘ : config 파일 수정
‘ Kubectl config set-credentials 사용자 “—token=값” ‘ : 사용자의 토큰정보 추가
‘ Kubectl config set-context “컨텍스트 이름” —cluster=클러스터 —user=사용자 : 사용자와 클러스터를 연결하는 컨텍스트 생성
‘ Kubectl config use-context “컨텍스트 이름” ‘ : 컨텍스트 사용하기
'DevOps > Kubernetes' 카테고리의 다른 글
[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter15. 클러스터 네트워킹 구성 (0) | 2021.07.22 |
---|---|
[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter14. 데이터 저장 (0) | 2021.07.22 |
[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter12. 파드 스케줄링 (0) | 2021.07.21 |
[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter11. 시크릿 (0) | 2021.07.21 |
[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter10. 컨피그맵 (0) | 2021.07.21 |