Openshift 4.12.0 사용자 생성 및 권한 설정

리눅스/OpenShift|2023. 2. 14. 14:02
반응형

본 문서는 공식 Documents 를 참고하여 작성하였습니다.

https://docs.openshift.com/container-platform/4.12/authentication/understanding-identity-provider.html

 

OpenShift 컨테이너 플랫폼 마스터에는 OAuth 서버가 내장되어 있습니다.

개발자 및 관리자는 OAuth 액세스 토큰을 취득하여 API 에 대해 자신을 인증할 수 있습니다.

처음 클러스터를 구성하면 모든 Openshift 관리 권한을 가진 kubeadmin 이라는 계정만 존재하게 됩니다.

여기에 동일한 권한의 관리자 계정이나 프로젝트 단위의 권한이 작은 사용자 계정을 추가할 수 있습니다.

 

ID 생성을 위해 ID 제공자를 선택해야 하는데, ID 제공자는 htpasswd, Keystone, LDAP, Basic authentication, Request header, GitHub or GitHub Enterprise, GitLab, Google, OpenID Connect 가 있습니다.

여기에서는 우리에게 친숙한 htpasswd 를 통하여 계정 생성하는 방법과

웹콘솔에 접근하기 위해 사용되는 기본계정 kubeadmin 을 대체하는 방법을 알아봅니다.

 

 

1. 프로젝트 (Namespace) 생성

 

현재 사용자를 확인합니다.

# export KUBECONFIG=/root/installation_directory/auth/kubeconfig

# oc whoami

system:admin

 

testwork 라는 프로젝트 (Namespace) 를 생성합니다.

# oc create ns testwork
namespace/testwork created

 

생성한 프로젝트를 확인합니다.

testwork 프로젝트는 물론이고 Openshift 를 구성하는 모든 프로젝트가 출력됩니다.

# oc get ns

또는

# oc get projects

 

 

2. 계정 관리

 

1) 계정 추가

우선 htpasswd 명령어를 사용하기 위해 패키지를 하나 설치 합니다.

# yum -y install httpd-tools

 

옵션 뒤에 파일명, ID, PW 순서로 생성을 원하는 계정정보 입력 후 실행합니다.

# htpasswd -c -B -b list.txt sysdocu 12345678
Adding password for user sysdocu

 

한개의 계정을 추가로 입력합니다.

# htpasswd -B -b list.txt fntop abcdABCD

Adding password for user fntop

 

계정 정보가 파일에 잘 입력되었는지 확인합니다.

# cat list.txt

sysdocu:$2y$05$0SIDRCNuYNZIQngZBdWzN.UlaA5CY6XM6wPQLMuAy908B7v.Y62mW

fntop:$2y$05$YW1tslShApDQEMxDfsfJUuck0adzlArLWiznqzTtDZVNTcDfvTgYq

 

계정정보가 들어있는 파일을 이용하여 위에서 생성한 testwork 프로젝트에 생성합니다.

myusers 라는 계정들의 별칭을 짓고 list.txt 파일 내용 (sysdocu, fntop 계정 정보) 를 입력합니다.

# oc create secret generic myusers --from-file=htpasswd=list.txt -n testwork

secret/myusers created

 

2) 계정 업데이트

계정을 생성하는 또 다른 방법과 기존 계정을 삭제하는 방법 입니다.

'계정 업데이트' 내용이 필요하지 않을 경우 건너뛰어도 됩니다.

 

(1) 현재 정보 저장

현재 HTPasswd secret 정보를 파일로 추출 (아래 {.data.htpasswd} 문자 그대로 입력)
$ oc get secret myusers -ojsonpath={.data.htpasswd} -n testwork | base64 --decode > current_list.txt

 

(2-1) 새 사용자 추가
$ htpasswd -bB current_list.txt <username> <password>

 

(2-2) 기존 사용자 삭제
$ htpasswd -D current_list.txt <username>

 

(3) 변경 정보 갱신

생성한 시크릿을 testwork 프로젝트 (Namespace) 에 갱신
$ oc create secret generic myusers --from-file=htpasswd=current_list.txt --dry-run=client -o yaml -n testwork | oc replace -f -

 

(4) 사용자 및 리소스 삭제

하나 이상의 사용자를 삭제한 경우 각 사용자의 기존 리소스를 추가로 제거해야 합니다.

삭제하지 않으면 토큰이 만료되지 않은 한 계속 사용할 수 있습니다.

# oc delete user <username>

# oc delete identity my_htpasswd_provider:<username>

// my_htpasswd_provider 는 identityProviders 이름 입니다.

 

 

3. web-console 계정 교체

 

새 클러스터 관리자를 생성한 후 kubeadmin 을 제거하여 클러스터 보안을 개선할 수 있습니다.
다른 사용자가 cluster-admin 이 되기 전에 kubeadmin 계정을 삭제 할 경우 OpenShift Container Platform 을 다시 설치해야 합니다.

이 명령은 취소가 안되므로 반드시 하나 이상의 계정에 cluster-admin 역할을 추가하고 로그인이 되는것을 확인합니다.

그리고 kubeadmin 계정을 삭제 해야 합니다.

 

1) 계정 추가

계정은 위에서 생성한 sysdocu 계정을 사용하도록 하겠습니다.

openshift-config 프로젝트에 계정을 생성합니다.

# oc create secret generic myusers --from-file=htpasswd=list.txt -n openshift-config

 

커스텀 리소스를 yaml 파일로 생성합니다.

# vi htpasswd.yaml

apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: my_htpasswd_provider
    challenge: true
    login: true
    mappingMethod: claim
    type: HTPasswd
    htpasswd:
      fileData:
        name: myusers

identityProviders: name: 사용자를 구분짓는 별칭

identityProviders: type: 생성했던 계정의 ID 제공자

htpasswd: fileData: name: openshift-config 프로젝트에 생성했던 계정들 별칭으로 위 예제에서는 sysdocu, fntop 두 개의 계정입니다.

 

정의된 커스텀 리소스를 적용하여 웹 콘솔에서 로그인이 가능하도록 합니다.

# oc apply -f htpasswd.yaml
oauth.config.openshift.io/cluster configured

 

브라우저로 웹 콘솔 페이지에 접속하면 기존과 다르게, 먼저 아래 두가지 사용자에 대해 선택하도록 되어 있습니다.

- kube:admin

- my_htpasswd_provider

 

아래 my_htpasswd_provider 를 선택하고 위에서 생성한 계정 sysdocu 로 로그인합니다.

로그인이 확인되면 kubeadmin 계정을 지우도록 합니다.

 

2) kubeadmin 계정 삭제
삭제 명령은 다음과 같습니다.
# oc delete secrets kubeadmin -n kube-system

 

 

4. 권한 관리

 

RBAC (Role-Based Access Control) 를 사용한 권한 정의 및 적용 방법 입니다.

RBAC 는 오브젝트에 따라 사용자의 권한이 결정되고 프로젝트 내에서 지정된 작업을 수행합니다.

 

[ RBAC 의 두가지 레벨 ]

- Cluster RBAC : cluster-admin 에 해당되는 권한으로 클러스터 내 모든 프로젝트에 접근하거나 관리가 가능합니다.

- Local RBAC : 지정된 프로젝트에만 접근하거나 관리가 가능합니다.

 

[ Openshift 구축시 제공되는 기본 클러스터 역할 (role) ]

- admin : 프로젝트 매니저로서 프로젝트의 리소스를 보고 수정하는 권한을 가지고 있습니다.
- basic-user : 프로젝트 및 사용자에 대한 기본 정보를 얻을 수 있는 사용자입니다.
- cluster-admin : 모든 프로젝트에서 모든 작업을 수행할 수 있는 슈퍼 사용자 (최상위 관리자) 입니다.

                           로컬 바인딩을 가진 사용자에게 바인드되어 할당량을 완전히 제어할 수 있습니다.

                           프로젝트의 모든 리소스에 대한 모든 작업을 수행할 수 있습니다.
- cluster-status : 기본 클러스터 상태 정보를 가져올 수 있는 사용자입니다.
- cluster-reader : 대부분의 개체를 가져오거나 볼 수 있지만 수정할 수 없습니다.
- edit : 프로젝트의 대부분의 개체를 수정할 수 있지만 역할 또는 바인딩을 보거나 수정 권한이 없는 사용자입니다.
- self-provisioner : 자신의 프로젝트를 생성할 수 있는 사용자입니다.
- view : 변경할 수 없지만 대부분의 개체를 볼 수 있는 사용자입니다.

            프로젝트, 역할 또는 바인딩을 보거나 수정할 수 없습니다.

 

1) 계정과 역할 연결 (Binding)

생성된 계정과 Role 을 연결하여, 계정에 역할을 부여하는 작업을 바인딩 이라고 합니다.

현재 생성되어진 sysdocu 계정에는 admin 권한을 바인딩하고, fntop 계정은 그대로 두어 프로젝트 접근 여부를 비교해 보도록 합니다.

 

testwork 프로젝트의 sysdocu 계정에 admin 역할을 연결 (binding) 합니다.

# oc adm policy add-role-to-user admin sysdocu -n testwork

clusterrole.rbac.authorization.k8s.io/admin added: "sysdocu"

 

testwork 프로젝트의 로컬 역할 바인딩을 보려면 아래와 같이 실행합니다.

# oc describe rolebinding.rbac -n testwork

 

2) 권한 비교

sysdocu 계정으로 전환하고 프로젝트 리스트를 확인합니다.

# oc login -u sysdocu

Password: (패스워드 입력)

You have access to 68 projects, the list has been suppressed. You can list all projects with 'oc projects'

Using project "default".

// 68개 프로젝트 접근 가능 확인

# oc whoami

sysdocu

# oc get ns

...

// 68개 프로젝트 출력

 

fntop 계정으로 전환하고 프로젝트 리스트를 확인합니다.

# oc login -u fntop

Password: (패스워드 입력)

You don't have any projects. You can try to create a new project, by running

oc new-project <projectname>

// 프로젝트 없음 확인

# oc whoami

fntop

# oc get ns

Error from server (Forbidden): namespaces is forbidden: User "fntop" cannot list resource "namespaces" in API group "" at the cluster scope

// 권한 없음 확인

 

원래의 admin 계정으로 전환합니다.

# oc login -u system:admin

You have access to 68 projects, the list has been suppressed. You can list all projects with 'oc projects'
Using project "default".

// 68개 프로젝트 접근 가능 확인

# oc whoami

system:admin

# oc get ns

...

// 68개 프로젝트 출력

 

반응형

댓글()