LDAP <-> Identities Service <-> CAS / Compute / SAS-CONNECT -> 파일시스템
사용자가 로그인하면 Identities 서비스가 LDAP 에서 계정 ID, 표시 이름, 그룹, 그리고 POSIX 속성(uidNumber, gidNumber, 보조 GID)을 읽어 내부 캐시에 저장한다. CAS 와 Compute 는 이 정보를 받아 세션을 어떤 UID/GID 로 실행할지, 공유 스토리지에 어떤 권한으로 접근할지 결정한다.
| 모델 | 언제 쓰나 |
|---|---|
| LDAP POSIX 속성 사용 | 공유 스토리지와 UID/GID 를 맞춰야 하는 온프레미스 환경. 권장 |
| UID 는 SAS 생성, GID 는 LDAP | OS 계정과 1:1 로 맞출 필요가 없을 때 |
| 전부 SAS 생성 | SCIM 을 쓰는 경우. SCIM 스키마에는 UID/GID 개념이 없다 |
NFS 나 NAS 위의 홈 디렉터리와 권한을 맞춰야 한다면 첫 번째 모델을 택한다.
사용자 엔트리에 POSIX 속성이 있어야 한다.
objectClass: posixAccount
uid
uidNumber
gidNumber
homeDirectory
loginShell
그룹 엔트리에는 cn, gidNumber, 그리고 멤버 관계 속성이 필요하다.
dn: uid=<user>,ou=people,dc=example,dc=com
objectclass: posixAccount
uid: <user>
uidNumber: 11001
gidNumber: 3000
homeDirectory: /home/<user>
loginShell: /bin/bash
UID/GID 설계에서 지킬 것이 셋 있다.
sas 계정은 UID 1001 을 쓰므로 1001 을 LDAP 사용자에게 주면 충돌한다.LDAP 연결은 sas.identities.providers.ldap.* 설정으로 한다.
sas.identities.providers.ldap.connection.* host, port, bind DN, password, TLS
sas.identities.providers.ldap.user.* baseDn, objectFilter, accountId
sas.identities.providers.ldap.group.* baseDn, objectFilter, member
UID/GID 생성 정책은 sas.identities 의 다음 속성으로 제어한다.
| 속성 | 기본값 | LDAP POSIX 를 그대로 쓸 때 |
|---|---|---|
identities.identifierGenerateUids |
true | false |
identities.identifierGenerateGids |
false | false |
둘 다 false 로 두면 Identities 서비스가 새 번호를 만들지 않고 LDAP 의 uidNumber / gidNumber 를 그대로 쓴다.
설정은 SAS Environment Manager 의 Configuration 화면이나 sas-viya configuration CLI 로 반영한다. 이미 배포가 끝난 환경에서는 sitedefault.yaml 로 기존 값을 바꿀 수 없다. sitedefault 는 값이 없을 때만 채운다.
LDAP 로그인은 되는데 SAS Environment Manager 에서 관리 메뉴가 안 보이는 경우, SAS Administrators 그룹에 멤버가 없는 상태일 가능성이 크다.
config:
application:
sas.logon.initial:
user: <admin-account>
password: "${PASSWORD}"
sas.identities:
administrator: <admin-account>
sas.identities.administrator 에는 LDAP 의 accountId 값 그대로를 넣어야 한다. accountId 속성이 uid 라면 uid=viya_admin,ou=people,dc=example,dc=com 같은 DN 이 아니라 viya_admin 만 적는다. DN 을 적으면 매칭되지 않아 관리자 그룹이 비게 된다.
현재 상태는 CLI 로 확인한다.
sas-admin auth login --user <initial-user> --password "${PASSWORD}"
sas-admin identities groups list --name "SAS Administrators"
sas-admin identities memberships list --group-id <group-id>
멤버가 없으면 직접 넣는다.
sas-admin identities groups add-member --group-id <group-id> --member-id <account-id>
LDAP 값이든 생성된 값이든 CLI 로 바꿀 수 있다.
sas-viya identities update-user --id <user-id> --uid <new-uid> --gid <new-gid>
sas-viya identities update-group --id <group-id> --gid <new-gid>
식별자를 지우고 다시 채우게 할 수도 있다.
sas-viya identities delete-user-identifier --id <user-id>
sas-viya identities delete-group-identifier --id <group-id>
LDAP 기반이면 다음 조회 시 LDAP 값으로 채워지고, 생성 모드면 새 번호가 만들어진다.
CAS 와 Compute 는 POSIX 파일시스템을 전제로 동작한다. 공유 스토리지의 마운트 옵션이나 StorageClass 에서 uid, gid, dir_mode, file_mode 를 컨테이너 프로세스의 UID/GID 와 맞춰야 한다.
호스트 계정까지 통합하려면 노드와 NFS 서버도 같은 LDAP 을 바라보게 하고, 세션 파드 안에서 LDAP 사용자가 리눅스 계정으로 해석되도록 SSSD 구성을 넣어야 한다. 노드에만 SSSD 를 넣고 Compute 파드에는 넣지 않아 생기는 문제가 흔하다.
identifierGenerateUids / identifierGenerateGids 가 의도대로인가SAS Administrators 그룹에 멤버가 있는가