RBAC(Role-Based Access Control)
RBAC은 사용자(접근자) 혹은 그룹의 역할을 따라 시스템의 리소스에 대한 접근 권한을 부여하는 접근 제어 방법입니다.
그 이름과 같이 사용자의 Role을 기반으로 권한을 부여하는데요, RBAC을 사용하는 쿠버네티스로 예를 들어보자면, Fargate on EKS환경의 제 클러스터에서는 아래와 같은 역할(role)들이 있습니다.
kubectl get role -n kube-system
NAME CREATED AT
eks-vpc-resource-controller-role 2023-03-11T00:29:33Z
eks:addon-manager 2023-03-11T00:29:30Z
eks:authenticator 2023-03-11T00:29:27Z
eks:az-poller 2023-03-11T00:29:27Z
eks:certificate-controller 2023-03-11T00:29:27Z
eks:fargate-manager 2023-03-11T00:29:30Z
eks:k8s-metrics 2023-03-11T00:29:27Z
eks:node-manager 2023-03-11T00:29:30Z
extension-apiserver-authentication-reader 2023-03-11T00:29:25Z
system::leader-locking-kube-controller-manager 2023-03-11T00:29:25Z
system::leader-locking-kube-scheduler 2023-03-11T00:29:25Z
system:controller:bootstrap-signer 2023-03-11T00:29:25Z
system:controller:cloud-provider 2023-03-11T00:29:25Z
system:controller:token-cleaner 2023-03-11T00:29:25Z
이런식으로 시스템에 정의되어있는 역할이나, 권한을 직접 부여해준 역할을 정의하고 사용자에게 필요한 역할(Role)을 할당해주는 방식입니다.
또한역할(Role)에 따라 권한을 일관되게 관리할 수 있어, 권한 부여 및 관리가 쉽습니다.
ABAC(Attribute-Based Access Control)
ABAC은 속성 기반 접근 제어 방법입니다. 속성 정보는 보통 사용자의 역할(Role), 부서, 위안 등.. 다양한 정보를 포함합니다. 때문에 RBAC보다 유연하고 보안적으로도 보다 강력하지만, 구현이나 관리하기 어렵습니다.
ABAC을 사용하는 대표적인 리소스로는 AWS IAM이 있습니다. 예를 들어 YoonHyunWoo라는 유저가 IAM 계정으로 콘솔에 로그인한 뒤, 인스턴스를 삭제하려하면 IAM은 설정된 권한에 따라 Tag, Role, policy, Tag, etc.등 여러 속성을 확인합니다.
MAC (Mandatory Access Control)
MAC은 강제적 접근 제어입니다. 사용자와 리소스에 각각 레이블을 부여하여 이 레이블이 일치할 때만 접근 권한을 부여합니다.
예를 들면 아래와 같습니다.
Label이 맞는 Label2 file에만 Access가 가능한 모습입니다.
그래서 이 MAC 방식은 보안적으로는 매우 강력합니다.하지만 제약이 많고, 구현이 복잡할 수 있습니다.
이 MAC 방식은 안드로이드가 채택한 SELinux에서 사용하는 방식으로 생각보다 우리 생활에 많이 녹아들어있습니다.
물론 3가지 방법을 혼합해서 사용해도 됩니다. 각 방식의 장단점을 비교하여 적합한 방식을 선택해보세요.