
RBAC 설정의 시작은 Role 오브젝트 생성
정의 파일 생성 시 사용되는 필드:
apiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata.name: 예시로 developer 지정역할은 **하나 이상의 규칙(rules)**으로 구성
각 규칙은 다음 세 가지 필드 포함:
apiGroups: API 그룹명 (Core 그룹은 빈 문자열로 설정)resources: 접근할 리소스 이름 (예: pods, configmaps)verbs: 허용할 동작 (예: get, list, create, delete)apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: developer
namespace: default
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "create", "delete"]
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["create"]
default 네임스페이스에서 권한 부여RoleBinding 오브젝트는 사용자(Subject)와 Role을 연결
주요 필드 구성:
subjects: 연결할 사용자 또는 서비스 계정 지정roleRef: 연결할 Role 이름과 타입 지정apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: dev-user-to-developer-binding
namespace: default
subjects:
- kind: User
name: dev-user
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: developer
apiGroup: rbac.authorization.k8s.io
dev-user는 developer 역할과 연결되어 default 네임스페이스에서 pods, configmaps에 대한 권한 부여생성된 Role 목록 조회:
kubectl get roles -n default
RoleBinding 목록 조회:
kubectl get rolebindings -n default
Role 상세 정보 확인:
kubectl describe role developer -n default
RoleBinding 상세 정보 확인:
kubectl describe rolebinding dev-user-to-developer-binding -n default
kubectl auth can-i특정 작업에 대한 권한 확인 명령:
kubectl auth can-i create deployments
네임스페이스 지정 포함:
kubectl auth can-i create pods -n test
다른 사용자의 권한 테스트:
kubectl auth can-i create deployments --as dev-user
예: dev-user는 pods 생성은 가능하나, deployments 생성은 권한 없음
resourceNamesblue-pod, orange-pod)에만 접근 허용rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "delete"]
resourceNames: ["blue-pod", "orange-pod"]
Role 오브젝트로 권한을 정의하고, RoleBinding으로 사용자 연결namespace 기반의 권한 범위 지정 가능kubectl auth can-i 명령으로 권한 테스트 가능resourceNames 필드를 활용하여 리소스 단위로 세부 권한 제어 가능