kubernetes 권한관리
ABAC (Attribute based access control)
- 속성 기반 권한 관리
- 사용할 수 있는 속성 : 사용자, 그룹, 요청 동사
- 권한 설정 내용을 파일로 관리하므로 권한을 변경하려면 직접 마스터에 접속해서 파일을 변경할 수 kube-apiserver 컴포넌트를 재시작해야 하므로 관리하기 번거롭다.
RBAC (Role based access control)
- 역할 기반 권한 관리
- 대부분의 권한 관리 시스템에서 많이 사용
- 사용자와 역할을 별개로 선언한 후 두 가지를 조합해서 사용자에게 권한을 부여한다.
- ABAC처럼 마스터에 접근할 필요 없이 kubelet이나 API를 이용해 관리할 수 있다.
최근에는 ABAC는 거의 사용하지 않고 RBAC를 이용해 권한을 관리한다.
RBAC API는 Role, ClusterRole, RoleBinding, ClusterRoleBinding 의 4가지 종류의 kubernetes 객체를 선언한다.
롤
- 특정 API나 자원 사용 권한들을 명시해둔 규칙의 집합
- 해당 롤이 속한 네임스페이스에만 적용
클러스터 롤
- 특정 네임스페이스 사용 권한이 아닌 클러스터 전체 사용 권한을 관리한다.
- 자원이 아닌 URL 형식으로 규칙을 설정할 수 있다.
롤 바인딩
- 롤과 사용자를 묶는 역할
- 사용자가 어떤 롤을 사용하는지 설정한다.
클러스터 롤 바인딩
- 클러스터롤과 사용자를 묶는 역할
kubernetes 인증방법
- 쿠버네티스 내부 파일 인증
- 인증서 인증
- 외부 인증 서비스 (OAuth, keycloak...)
키클락으로 인증되는 플로우를 살펴보면 다음과 같다.
유저는 키클락에서 유저 정보를 입력해 적합한 토큰을 발급
이 토큰을 apiserver에 날려 유효한지 확인
적합하다면 user의 api요청을 처리
keycloak 개념
계정관리 및 access관리를 제공
single-sign-on이 가능한 오픈소스
application을 구현하고자 할 때 코드의 변경 없이 인증기능을 제공하는 솔루션
Keycloak는 Helm Chart로 제공 되고 있다.
사용법
- 인증서 생성/적용 (https 를 필수적으로 사용)
- keycloak설치 (helm chart로 설치 가능)
- keycloak 설정
- 웹 UI를 통해 인증설정 가능
- kubernetes 설정
- keycloak 인증을 사용할 수 있게 설정
- 롤 바인딩
OIDC
- OAuth가 권한 부여만 다루는 것이라면 OIDC는 OAuth를 포함하여 인증과 권한부여를 모두 포함한 것이다.
- SSO의 구현을 위한 수단으로 사용된다.
Realm
- 인증, 권한 부여가 적용되는 범위를 나타내는 단위
- SSO로서 인증 대상의 범위를 지정한다라고 생각하면 된다.
- Realm을 통해 Namespace 형태로 관리할 수 있다.
- 다수의 realm을 가질 수 있고 일반적으로 master(default로 생성된 realm)는 관리자의 목적으로만 사용하고 다른 realm을 생성하여 사용하기를 권장한다.
Client
- SSO를 사용할 각 Application
- 하나의 Realm에 n개의 Client를 생성, 관리할 수 있다.
User
- Client에 인증을 요청할 사용자(실제 로그인할 사용자계정)
- 하나의 Realm에는 Realm에 종속된 n개의 User를 생성하고 관리할 수 있다.
- 기본적으로 User는 Username, Email, FirstName, LastName 으로 구성되어 있지만 Custom User Attribute를 사용하면 사용자가 원하는 속성을 추가할 수 있다.
Role
- User에게 부여할 권한 내용
- KeyCloak의 REST API를 사용할 권한을 부여할 수 있고 사용자가 정의한 권한을 부여할 수도 있다.
keycloak 기능
SSO (SIngle Sign On)
- 동일한 realm에 속하는 모든 응용 프로그램에서 single-sign-on/sign-off
ID 중개와 소셜 로그인 (OpenID, SAML, GitHub, facebook, google, twitter등)
- 소셜 네트워크를 통한 로그인 활성화는 관리 콘솔을 통해 쉽게 추가할 수 있다.
- 추가하려는 소셜 네트워크를 선택하기만 하면 된다.
- 코드나 애플리케이션 변경이 필요하지 않다.
- Keycloak은 또한 기존 OpenID Connect 또는 SAML 2.0 ID 공급자를 사용하여 사용자를 인증할 수 있다.
사용자 연합 (LDAP, AD, RDMS와의 연동을 통해 중앙화된 계정통합을 제공)
- Keycloak에는 기존 LDAP 또는 Active Directory 서버에 연결하기 위한 지원이 내장되어 있습니다. 관계형 데이터베이스와 같은 다른 저장소에 사용자가 있는 경우 자체 공급자를 구현할 수도 있습니다.
표준 프로토콜 지원 (OpenID, SAML, OAuth 2.0)
- Keycloak은 표준 프로토콜을 기반으로 하며 OpenID Connect, OAuth 2.0 및 SAML을 지원
관리 콘솔
- 관리자는 관리 콘솔을 통해 Keycloak 서버의 모든 측면을 중앙에서 관리할 수 있다.
- 다양한 기능을 활성화 및 비활성화할 수 있다.
- 권한 및 세션을 포함하여 사용자를 관리할 수 있습니다.
계정관리 콘솔
- 사용자는 자신의 계정을 관리할 수 있다. 프로필을 업데이트하고, 암호를 변경하고, 이중 인증을 설정할 수 있다.
- 사용자는 세션을 관리하고 계정의 기록을 볼 수도 있습니다.
권한부여 서비스
- 역할 기반 권한 부여가 요구 사항을 충족하지 못하는 경우 Keycloak은 세분화된 권한 부여 서비스도 제공.
- 이를 통해 Keycloak 관리 콘솔에서 모든 서비스에 대한 권한을 관리할 수 있으며 필요한 정책을 정확하게 정의할 수 있다.
용어
Single-Sign-On(SSO)
- 여러 개의 사이트에서 한번의 로그인으로 여러가지 다른 사이트들을 자동적으로 접속하여 이용하는 방법
- 일반적으로 서로 다른 시스템 및 사이트에서 각각의 사용자 정보를 관리하게 되는데, 필요에 따라서 사용자 정보를 연동하여 사용해야 하는 경우도 생긴다. 이때 하나의 사용자 정보를 기반으로 여러 시스템을 하나의 통합 인증을 사용하게 하는 것으로 말한다.
- 즉 하나의 시스템에서 인증을 할 경우 타 시스템에서는 인증 정보가 있는지 확인하고 있으면, 로그인 처리를 하고 없는 경우 통합 인증을 할 수 있도록 만드는 것을 의미한다.
LDAP(Lightweight Directory Access Protocol)
- 네트워크 상의 자원을 식별하고 인가된 사용자만 접근하도록 하는 네트워크 디렉토리 서비스
- 디렉터리 서비스의 표준인 X.500의 DAP를 기반으로 한 Lightweight 버전
- 컴퓨터 관리, 사용자 인증 등의 정보를 중앙에서 관리할 수 있다.
- 관리 중인 정보를 읽거나 검색하는 것에 특화되어 있다. 하지만 트랜잭션, 롤백 등의 기능은 존재하지 않아 쓰기(write)에는 적합하지 않다.
AD(Active Directory)
- 계정 정보, 강제하고자 하는 정책들에 대한 정보를 저장하고 있는 일종의 데이터베이스 (디렉토리 서비스)
- 일반적인 데이터베이스와는 조금 다른 파일 타입의 데이터베이스이고, 암호화 되어 저장되어 있기 때문에 메모장이나 텍스트 에디터로는 열어볼 수 없다.
OpenID connect
- OAuth 2.0 프로토콜 위에 있는 간단한 ID계층
- OpenID Connect는 일반 OAuth 인증과 동일한 방식으로 작동
SAML(Security Assertion Markup Language)
- 인증 정보 제공자와 서비스 제공자 간의 인증 및 인가 데이터를 교환하기 위한 XML 기반의 개방형 표준 데이터 포맷
- 네트워크를 통해 여러 컴퓨터에서 보안 자격 증명을 공유할 수 있도록 하는 공개 표준
- 한 대의 컴퓨터가 하나 이상의 다른 컴퓨터를 대신해 몇 가지 보안 기능을 수행할 수 있도록 하는 프레임워크
- ID 공급자는 인증을 제공하고 권한을 결정할 수 있다.
'클라우드 > Kubernetes(쿠버네티스)' 카테고리의 다른 글
[kubernetes] Volume (0) | 2021.08.25 |
---|---|
[kubernetes] 파드 스케줄링 (0) | 2021.08.23 |
[kubernetes] Jenkins vs Jenkins X (0) | 2021.07.25 |
[kubernetes] Tekton (0) | 2021.07.25 |
[쿠버네티스] Helm (0) | 2021.07.08 |