MLOPS/SERVING

[kubeflow] multi-user

개발허재 2023. 1. 4. 16:59

Kubeflow와 함께 설치되는 auth 라는 네임스페이스 안의 dex는 사용자 정보를 파일에 직접 저장하고 있습니다.

이 파일은 ConfigMap에 저장되어 있습니다.

dex 라는 ConfigMap을 조회하면 설정 정보를 볼 수 있습니다.

다음 명령어를 실행하면, dex 의 설정 정보를 확인할 수 있습니다.

$ kubectl -n auth get cm dex -o yaml

apiVersion: v1
data:
  config.yaml: |
    issuer: http://dex.auth.svc.cluster.local:5556/dex
    storage:
      type: kubernetes
      config:
        inCluster: true
    web:
      http: 0.0.0.0:5556
    logger:
      level: "debug"
      format: text
    oauth2:
      skipApprovalScreen: true
    enablePasswordDB: true
    staticPasswords:
    - email: user@example.com
      hash: $2y$12$4K/VkmDd1q1Orb3xAt82zu8gk7Ad6ReFR4LCP9UeYE90NLiN9Df72
      # https://github.com/dexidp/dex/pull/1601/commits
      # FIXME: Use hashFromEnv instead
      username: user
      userID: "15841185641784"
    staticClients:
    # https://github.com/dexidp/dex/pull/1664
    - idEnv: OIDC_CLIENT_ID
      redirectURIs: ["/login/oidc"]
      name: 'Dex Login Application'
      secretEnv: OIDC_CLIENT_SECRET
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","data":{"config.yaml":"issuer: http://dex.auth.svc.cluster.local:5556/dex\nstorage:\n  type: kubernetes\n  config:\n    inCluster: true\nweb:\n  http: 0.0.0.0:5556\nlogger:\n  level: \"debug\"\n  format: text\noauth2:\n  skipApprovalScreen: true\nenablePasswordDB: true\nstaticPasswords:\n- email: user@example.com\n  hash: $2y$12$4K/VkmDd1q1Orb3xAt82zu8gk7Ad6ReFR4LCP9UeYE90NLiN9Df72\n  # https://github.com/dexidp/dex/pull/1601/commits\n  # FIXME: Use hashFromEnv instead\n  username: user\n  userID: \"15841185641784\"\nstaticClients:\n# https://github.com/dexidp/dex/pull/1664\n- idEnv: OIDC_CLIENT_ID\n  redirectURIs: [\"/login/oidc\"]\n  name: 'Dex Login Application'\n  secretEnv: OIDC_CLIENT_SECRET\n"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"dex","namespace":"auth"}}
  creationTimestamp: "2023-01-03T10:12:50Z"
  name: dex
  namespace: auth
  resourceVersion: "537028"
  uid: 8530a1d1-03f6-427a-8096-da180eebe3a8

staticPasswords 블록을 보면, 사용자 이메일과 패스워드의 해시값을 확인할 수 있습니다.

패스워드는 “BCrypt”를 이용하여 해시값을 생성한 후 사용하고 있습니다.

참고로 설치할때 기본으로 생성되는 이메일은 user@example.com이고, 패스워드는 12341234입니다.

 

패스워드 해시값은 다양한 방법으로 만들수 있습니다.

만약 파이썬을 사용하고 있다면 bcrypt 라이브러리를 사용할 수 있습니다.


사용자 추가하기

dex에 새로운 사용자를 추가해 보겠습니다.

ConfigMap을 직접 수정하는 방식으로 진행하겠습니다. 다음 명령어를 실행하여, 편집 화면을 실행합니다.

kubectl -n auth edit cm dex

staticPasswords 필드에 새로운 사용자를 추가합니다. hash 필드에 생성한 패스워드의 해시값을 지정합니다. username은 적당한 이름을 지정하면 됩니다. userID는 고유한 값을 사용해야합니다. UID 같은것을 사용할 수 있습니다.

staticPasswords:
- email: user@example.com
      hash: $2y$12$4K/VkmDd1q1Orb3xAt82zu8gk7Ad6ReFR4LCP9UeYE90NLiN9Df72
      # https://github.com/dexidp/dex/pull/1601/commits
      # FIXME: Use hashFromEnv instead
      username: user
      userID: "15841185641784"
- email: jaeuheo@example.com
      hash: $2y$12$4K/VkmDd1q1Orb3xAt82zu8gk7Ad6ReFR4LCP9UeYE90NLiN9Df72
      # https://github.com/dexidp/dex/pull/1601/commits
      # FIXME: Use hashFromEnv instead
      username: jaeuheo
      userID: jaeuheo

변경할 설정 사항을 적용하기 위해서 dex를 재시작합니다.

kubectl -n auth rollout restart deployment dex