본문으로 건너뛰기

Super Admin API

tenant 경계를 넘나드는 플랫폼 전체 동작입니다. tenant 생성, tenant가 속할 베이스 도메인 지정, 그리고 로그인이나 공유 정책을 모든 tenant에 일괄 적용하는 일을 다룹니다. 하나의 tenant 안에서의 동작은 Admin을 참고합니다.

Base URL과 인가

/api/external/v1/super-admin

이 endpoint들은 SUPER_ADMIN 역할을 가진 계정으로 발급된 API Key가 필요합니다. 일반 관리자의 키는 통과하지 못합니다.

여기서도 scope를 검사하지 않음

관리자 endpoint와 마찬가지로 인가는 역할만으로 결정됩니다. api:read만 가진 키로도 tenant 생성, 베이스 도메인 변경, 모든 tenant에 대한 정책 적용이 가능합니다. 슈퍼 관리자 키는 발급 시 지정한 scope와 무관하게 시스템에서 가장 강력한 credential입니다.

tenant 진입 키 발급은 내부 전용이며 외부 API로 노출되지 않습니다.

베이스 도메인

tenant는 공유하는 하나의 베이스 도메인 아래 서브도메인으로 주소가 정해집니다.

GET /api/external/v1/super-admin/base-domain
PUT /api/external/v1/super-admin/base-domain
파라미터Type필수설명
bdstringYes베이스 도메인, 최대 253자

베이스 도메인은 하나만 지원하며 항상 baseDomainSeq가 1입니다.

변경하면 모든 tenant의 주소가 다시 계산됨

베이스 도메인을 설정하면 등록된 모든 tenant의 전체 도메인이 재계산됩니다. 기존 tenant URL은 이전 주소에서 더 이상 열리지 않습니다. 변경 전에 DNS, 인증서, 클라이언트에 하드코딩된 URL을 확인합니다.

도메인이 유효하지 않으면 BASE_DOMAIN_002, 설정 전에 조회하면 BASE_DOMAIN_001을 반환합니다.

tenant 목록

GET /api/external/v1/super-admin/tenants
파라미터Type필수설명
psintegerYes페이지 크기, 최소 1
cilongNocursor - 이전 페이지의 마지막 tenantSeq

각 항목은 tenantSeq, tenantName, domain, clientUrl, registerDate, license를 알려줍니다. 라이선스 요약은 라이선스가 없는 tenant면 null이고, 있으면 state, expiresOn, 그리고 currentmax를 담은 seat 객체를 포함합니다. 각 tenant를 따로 조회하지 않고도 만료되었거나 좌석을 초과한 tenant를 찾을 수 있습니다.

tenant 조회

GET /api/external/v1/super-admin/tenants/{tenantSeq}

tenantName, subdomain, baseDomainSeq, allowedIps를 반환합니다. 존재하지 않는 tenant는 TENANT_001을 반환합니다.

목록은 조합된 domain을 반환하는 반면 이 endpoint는 그것을 만든 subdomain을 반환합니다.

tenant 생성

POST /api/external/v1/super-admin/tenants

tenant와 첫 관리자, IP 허용 목록을 한 번에 만듭니다.

파라미터Type필수설명
tnstringYestenant 이름
sdstringYes서브도메인, 최대 253자
bsintegerYes베이스 도메인 seq
estringYes관리자 계정 id. 이메일 주소
nstringYes관리자 표시 이름
pstringYes관리자 비밀번호
ipsarrayNo허용할 IPv4 주소 또는 CIDR 목록
Create tenant
curl -X POST "https://drive.example.com/api/external/v1/super-admin/tenants" \
-H "Authorization: Bearer replace-with-your-api-key" \
-H "Content-Type: application/json" \
-d '{"tn": "Example", "sd": "example", "bs": 1, "e": "admin@example.com", "n": "Administrator", "p": "Test1234!", "ips": ["192.168.0.12", "192.168.0.0/24"]}'

새 tenant는 기본 시스템 설정으로 시작합니다. 오피스 도메인과 어댑터 이름이 설정되고, Intellect와 공유는 켜져 있으며, MFA는 꺼져 있습니다. 이 값들은 해당 tenant의 Admin endpoint에서 변경합니다.

이미 사용 중인 서브도메인은 TENANT_006, 형식이 잘못된 서브도메인은 TENANT_007, 존재하지 않는 bsBASE_DOMAIN_001을 반환합니다.

tenant 수정

PATCH /api/external/v1/super-admin/tenants/{tenantSeq}
파라미터Type필수설명
tnstringYestenant 이름
sdstringYes서브도메인, 최대 253자
bsintegerYes베이스 도메인 seq
ipsarrayNo허용할 IPv4 주소 또는 CIDR 목록

하나만 바꾸더라도 tn, sd, bs 세 개가 모두 필수이므로, 먼저 tenant를 조회해 현재 값을 함께 보냅니다. sd를 바꾸면 tenant의 주소가 바뀝니다.

로그인 정책

tenant 단위 endpoint와 같은 로그인 설정이며, 슈퍼 관리자가 이를 모든 tenant에 한 번에 적용할 수 있다는 점이 다릅니다.

GET /api/external/v1/super-admin/login-settings
PUT /api/external/v1/super-admin/login-settings

조회는 범위를 고르는 s(tenant 또는 global)와 로그인 유형으로 거르는 l을 받습니다.

파라미터Type필수설명
iebooleanYestrue면 이 설정을 모든 tenant에 적용, false면 각 tenant 설정을 따름
lstringNo로그인 유형 - local, oidc, jwt
psarrayNo인증 공급자 목록

공급자와 config 객체는 Admin에 설명된 tenant 단위 endpoint와 필드가 완전히 같으며, config.type이 로그인 유형과 같아야 한다는 조건도 동일합니다. SSO_PROTOCOL_001SSO_PROTOCOL_002 오류도 같습니다.

필드 이름이 tenant endpoint와 다름

이 endpoint는 tenant endpoint의 loginType, providers 자리에 l, ps를 쓰고 ie가 추가됩니다. 조회 응답도 superAdminEnforced가 아니라 isEnforced를 반환합니다. config 객체는 동일합니다.

조회 endpoint가 secret을 평문으로 반환함

tenant 단위와 마찬가지로 clientSecretpublicKey가 마스킹 없이 반환됩니다. 응답을 서버 측에만 둡니다.

공유 정책

GET /api/external/v1/super-admin/share-settings
PUT /api/external/v1/super-admin/share-settings
파라미터Type필수설명
ebooleanYestrue면 이 설정을 모든 tenant에 적용, false면 각 tenant 설정을 따름
seboolean조건부공유 기능 사용 여부. etrue면 필수
esaboolean조건부조직 외부 공유 허용. esetrue면 필수
suaboolean조건부SPECIFIC_USERS 공유 유형 허용. esetrue면 필수
olaboolean조건부ORG_LINK 공유 유형 허용. esetrue면 필수
paboolean조건부PUBLIC_LINK 공유 유형 허용. esetrue면 필수

공유를 켠 채로 전체 적용할 때는 sua, ola, pa 중 하나 이상이 true여야 하고, pa를 켜려면 esatrue여야 합니다. tenant endpoint와 같은 규칙입니다.

etrue인 동안 각 tenant의 공유 설정 endpoint는 isEnforced를 보고하고 자신의 값 대신 이 글로벌 값을 반환합니다. e를 다시 false로 되돌리면 각 tenant는 원래 가지고 있던 설정으로 돌아갑니다.

에러

이 endpoint들이 반환하는 코드 전체 목록은 Errors를 참고합니다.