Basic Security

Basic Security

Apache Druid용 Basic Security 확장 기능은 HTTP Basic 인증(Authenticator), 내부 프로세스 인증 방식(Escalator), 역할 기반 접근 제어(Authorizer)를 추가해요.

출처: 문서

본문

Apache Druid의 Basic Security 확장 기능은 다음을 추가해요:

  • Druid 메타데이터 스토어 또는 LDAP을 자격 증명 저장소로 사용해 HTTP Basic 인증을 지원하는 Authenticator.
  • 내부 Druid 프로세스에 대한 인증 방식을 결정하는 Escalator.
  • Druid 메타데이터 스토어 또는 LDAP 사용자·그룹에 대한 기본 역할 기반 접근 제어를 구현하는 Authorizer.

확장 기능을 로드하려면 common.runtime.properties의 druid.extensions.loadList에 druid-basic-security를 포함하세요. 예를 들어:

druid.extensions.loadList=["postgresql-metadata-storage", "druid-hdfs-storage", "druid-basic-security"]

basic auth를 활성화하려면 common.runtime.properties에서 basic Authenticator, Escalator, Authorizer를 구성하세요. HTTP basic 인증의 예제 구성은 Security overview를 참고하세요.

구현된 확장 인터페이스와 예제 구성에 대한 자세한 내용은 Authentication and Authorization를 방문하세요.

구성 (Configuration)

이 섹션의 예제들은 Authenticator와 Authorizer에 대해 다음 이름을 사용해요:

  • MyBasicMetadataAuthenticator
  • MyBasicLDAPAuthenticator
  • MyBasicMetadataAuthorizer
  • MyBasicLDAPAuthorizer

이러한 속성들은 특정 Authenticator 또는 Authorizer 인스턴스에 묶이지 않아요.

구성 속성의 값을 설정하려면 common runtime properties 파일에 추가하세요.

일반 속성 (General properties)

  • druid.auth.basic.common.pollingPeriod — 프로세스가 Coordinator를 폴링해 현재 Druid 메타데이터 스토어 authenticator/authorizer 상태를 가져오는 빈도를 밀리초 단위로 정의해요. Required : No, Default : 60000
  • druid.auth.basic.common.maxRandomDelay — 시간에 걸쳐 폴링 요청을 분산하기 위해 pollingPeriod에 추가할 임의 지연량을 밀리초 단위로 정의해요. Required : No, Default : 6000
  • druid.auth.basic.common.maxSyncRetries — Coordinator와의 인증/권한 부여 Druid 메타데이터 스토어 상태 동기화가 실패할 경우 서비스가 재시도하는 횟수를 결정해요. Required : No, Default : 10
  • druid.auth.basic.common.cacheDirectory — 정의되면 basic Authenticator와 Authorizer Druid 메타데이터 스토어 캐시의 스냅샷이 이 디렉터리의 디스크에 저장돼요. 이 속성이 정의되면 서비스 시작 시 Coordinator와 통신해 상태를 초기화하지 못할 경우 디스크의 스냅샷에서 캐시를 초기화하려 시도해요. Required : No, Default : null

Authenticator

Basic authenticator를 사용하려면 authenticatorChain에 type이 basic인 authenticator를 추가하세요. 기본 자격 증명 검증기(credentialsValidator)는 metadata예요. LDAP 검증기를 사용하려면 type이 'ldap'인 자격 증명 검증기를 정의하세요.

명명된 authenticator를 구성하려면 다음 구문을 사용하세요:

druid.auth.authenticator.<authenticatorName>.<authenticatorProperty>

Druid 메타데이터 스토어를 사용해 자격 증명을 조회하고 검증하는 authenticator의 예제 구성:

# Druid basic security
druid.auth.authenticatorChain=["MyBasicMetadataAuthenticator"]
druid.auth.authenticator.MyBasicMetadataAuthenticator.type=basic

# Default password for 'admin' user, should be changed for production.
druid.auth.authenticator.MyBasicMetadataAuthenticator.initialAdminPassword=password1

# Default password for internal 'druid_system' user, should be changed for production.
druid.auth.authenticator.MyBasicMetadataAuthenticator.initialInternalClientPassword=password2

# Uses the metadata store for storing users, you can use authentication API to create new users and grant permissions
druid.auth.authenticator.MyBasicMetadataAuthenticator.credentialsValidator.type=metadata

# If true and the request credential doesn't exist in this credentials store, the request proceeds to the next Authenticator in the chain.
druid.auth.authenticator.MyBasicMetadataAuthenticator.skipOnFailure=false
druid.auth.authenticator.MyBasicMetadataAuthenticator.authorizerName=MyBasicMetadataAuthorizer

나머지 authenticator 구성 예제들은 authenticator 이름으로 MyBasicMetadataAuthenticator 또는 MyBasicLDAPAuthenticator를 사용해요.

Druid 메타데이터 스토어 사용자 인증 속성 (Properties for Druid metadata store user authentication)
  • druid.auth.authenticator.MyBasicMetadataAuthenticator.initialAdminPassword — 자동으로 생성되는 기본 admin 사용자의 초기 Password Provider. 비밀번호를 지정하지 않으면 기본 admin 사용자가 생성되지 않아요. 기본 admin 사용자가 이미 존재하면 이 속성을 설정해도 그 비밀번호에는 영향이 없어요. Required : No, Default : null
  • druid.auth.authenticator.MyBasicMetadataAuthenticator.initialInternalClientPassword — 내부 프로세스 통신에 사용되는 기본 내부 시스템 사용자의 초기 Password Provider. 비밀번호를 지정하지 않으면 기본 내부 시스템 사용자가 생성되지 않아요. 기본 내부 시스템 사용자가 이미 존재하면 이 속성을 설정해도 그 비밀번호에는 영향이 없어요. Required : No, Default : null
  • druid.auth.authenticator.MyBasicMetadataAuthenticator.enableCacheNotifications — true이면 이 Authenticator에 구성 변경이 있을 때마다 Coordinator가 Druid 프로세스에 알려, 폴링을 기다리지 않고 즉시 상태를 갱신할 수 있게 해요. Required : No, Default : True
  • druid.auth.authenticator.MyBasicMetadataAuthenticator.cacheNotificationTimeout — 캐시 알림의 타임아웃(밀리초)이에요. Required : No, Default : 5000
  • druid.auth.authenticator.MyBasicMetadataAuthenticator.credentialIterations — 비밀번호 해싱에 사용할 반복 횟수. Credential iterations and API performance 참고. Required : No, Default : 10000
  • druid.auth.authenticator.MyBasicMetadataAuthenticator.credentialsValidator.type — 요청 자격 증명을 검증할 자격 증명 저장소(metadata) 유형. Required : No, Default : metadata
  • druid.auth.authenticator.MyBasicMetadataAuthenticator.skipOnFailure — true이고 요청 자격 증명이 자격 증명 저장소에 존재하지 않거나 완전히 구성되지 않았다면 요청은 체인의 다음 Authenticator로 진행돼요. Required : No, Default : false
  • druid.auth.authenticator.MyBasicMetadataAuthenticator.authorizerName — 요청이 향해야 하는 Authorizer. Required : Yes, Default : N/A
자격 증명 반복과 API 성능 (Credential iterations and API performance)

위에서 언급했듯이 credentialIterations의 값은 비밀번호를 해싱하는 데 사용되는 반복 횟수를 결정해요. 반복 횟수가 높을수록 보안이 강화돼요. 기본값 10,000은 공격자가 무차별 대입으로 비밀번호를 추측하지 못하도록 의도적으로 높게 설정돼 있어요. 이 값을 낮추지 않는 것을 권장해요. Druid는 지난 1시간 동안 사용된 최대 1000개의 비밀번호 해시를 캐시해 많은 반복 횟수가 쿼리 성능에 실질적으로 영향을 미치지 않도록 보장해요.

Druid가 기본 자격 증명 검증기(credentialsValidator.type=metadata)를 사용하면 credentialIterations 값을 변경하는 것은 변경 이후 생성된 사용자 또는 /druid-ext/basic-security/authentication/db/basic/users/{userName}/credentials 엔드포인트를 통해 비밀번호를 이후 갱신한 사용자에 대해서만 해싱 반복 횟수에 영향을 줘요. Druid가 ldap 검증기를 사용하면 변경은 다음 로그인 시 모든 사용자에게 적용돼요(새 사용자 또는 비밀번호를 갱신하는 사용자에게도).

LDAP 사용자 인증 속성 (Properties for LDAP user authentication)
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.initialAdminPassword — 자동으로 생성되는 기본 admin 사용자의 초기 Password Provider. Required : No, Default : null
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.initialInternalClientPassword — 내부 프로세스 통신에 사용되는 기본 내부 시스템 사용자의 초기 Password Provider. Required : No, Default : null
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.enableCacheNotifications — true이면 이 Authenticator에 구성 변경이 발생할 때마다 Coordinator가 Druid 프로세스에 알려줘요. Required : No, Default : true
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.cacheNotificationTimeout — 캐시 알림의 타임아웃(밀리초)이에요. Required : No, Default : 5000
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialIterations — 비밀번호 해싱에 사용할 반복 횟수. Required : No, Default : 10000
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.type — 요청 자격 증명을 검증할 자격 증명 저장소(ldap) 유형. Required : No, Default : metadata
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.url — LDAP 서버의 URL. Required : Yes, Default : null
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.bindUser — LDAP bind 사용자 이름. Required : Yes, Default : null
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.bindPassword — LDAP bind 사용자 비밀번호의 Password Provider. Required : Yes, Default : null
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.baseDn — LDAP 서버가 사용자를 검색할 시작 지점. Required : Yes, Default : null
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.userSearch — 검색에 사용할 필터/표현식. 예: (&(sAMAccountName=%s)(objectClass=user)). Required : Yes, Default : null
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.userAttribute — 검색의 일부로 반환될 속성을 식별하는 속성 id. 예: sAMAccountName. Required : Yes, Default : null
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.credentialVerifyDuration — 요청되지 않을 때 유효한 자격 증명이 캐시 내에서 검증 가능한 기간(초). Required : No, Default : 600
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.credentialMaxDuration — 요청 빈도와 무관하게 캐시에 머무를 수 있는 유효 자격 증명의 최대 기간(초). Required : No, Default : 3600
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.credentialCacheSize — 유효 자격 증명 캐시 크기. 캐시는 LRU 정책을 사용해요. Required : No, Default : 100
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.skipOnFailure — true이고 요청 자격 증명이 자격 증명 저장소에 존재하지 않거나 완전히 구성되지 않았다면 요청은 체인의 다음 Authenticator로 진행돼요. Required : No, Default : false
  • druid.auth.authenticator.MyBasicLDAPAuthenticator.authorizerName — 요청이 향해야 하는 Authorizer. Required : Yes, Default : N/A

Escalator

Escalator는 내부 Druid 클러스터 통신(예: 쿼리 처리 중 Broker 서비스가 Historical 서비스와 통신할 때)에 사용할 인증 방식을 결정해요.

예제 구성:

# Escalator
druid.escalator.type=basic
druid.escalator.internalClientUsername=druid_system
druid.escalator.internalClientPassword=password2
druid.escalator.authorizerName=MyBasicMetadataAuthorizer
속성 (Properties)
  • druid.escalator.internalClientUsername — escalator가 내부 시스템 사용자로서 요청할 때 사용할 사용자 이름. Required : Yes, Default : N/A
  • druid.escalator.internalClientPassword — escalator가 내부 시스템 사용자로서 요청할 때 사용할 Password Provider. Required : Yes, Default : N/A
  • druid.escalator.authorizerName — 요청이 향해야 하는 Authorizer. Required : Yes, Default : N/A

Authorizer

Basic authorizer를 사용하려면 authorizers 목록에 type이 basic인 authorizer를 추가하세요.

명명된 authorizer를 구성하려면 다음 구문을 사용하세요:

druid.auth.authorizer.<authorizerName>.<authorizerProperty>

예제 구성:

# Authorizer
druid.auth.authorizers=["MyBasicMetadataAuthorizer"]
druid.auth.authorizer.MyBasicMetadataAuthorizer.type=basic

이 문서의 나머지 예제들은 authorizer 이름으로 MyBasicMetadataAuthorizer 또는 MyBasicLDAPAuthorizer를 사용해요.

Druid 메타데이터 스토어 사용자 권한 부여 속성 (Properties for Druid metadata store user authorization)
  • druid.auth.authorizer.MyBasicMetadataAuthorizer.enableCacheNotifications — true이면 이 Authorizer에 구성 변경이 발생할 때마다 Coordinator가 Druid 프로세스에 알려줘요. Required : No, Default : true
  • druid.auth.authorizer.MyBasicMetadataAuthorizer.cacheNotificationTimeout — 캐시 알림의 타임아웃(밀리초)이에요. Required : No, Default : 5000
  • druid.auth.authorizer.MyBasicMetadataAuthorizer.initialAdminUser — 지정된 경우 initialAdminRole 속성에 정의된 역할을 가진 초기 admin 사용자이고, 그렇지 않으면 기본 admin 역할이 할당돼요. Required : No, Default : admin
  • druid.auth.authorizer.MyBasicMetadataAuthorizer.initialAdminRole — 아직 존재하지 않을 때 생성할 초기 admin 역할. Required : No, Default : admin
  • druid.auth.authorizer.MyBasicMetadataAuthorizer.roleProvider.type — 요청 자격 증명을 승인할 역할 제공자 유형. Required : No, Default : metadata
LDAP 사용자 권한 부여 속성 (Properties for LDAP user authorization)
  • druid.auth.authorizer.MyBasicLDAPAuthorizer.enableCacheNotifications — true이면 이 Authorizer에 구성 변경이 발생할 때마다 Coordinator가 Druid 프로세스에 알려줘요. Required : No, Default : true
  • druid.auth.authorizer.MyBasicLDAPAuthorizer.cacheNotificationTimeout — 캐시 알림의 타임아웃(밀리초)이에요. Required : No, Default : 5000
  • druid.auth.authorizer.MyBasicLDAPAuthorizer.initialAdminUser — 지정된 경우 initialAdminRole 속성에 정의된 역할을 가진 초기 admin 사용자이고, 그렇지 않으면 기본 admin 역할이 할당돼요. Required : No, Default : admin
  • druid.auth.authorizer.MyBasicLDAPAuthorizer.initialAdminRole — 아직 존재하지 않을 때 생성할 초기 admin 역할. Required : No, Default : admin
  • druid.auth.authorizer.MyBasicLDAPAuthorizer.initialAdminGroupMapping — 지정된 경우 initialAdminRole 속성에 정의된 역할을 가진 초기 admin 그룹 매핑이고, 그렇지 않으면 기본 admin 역할이 할당돼요. 이 초기 admin 그룹 매핑의 이름은 adminGroupMapping으로 설정돼요. Required : No, Default : null
  • druid.auth.authorizer.MyBasicLDAPAuthorizer.roleProvider.type — 요청 자격 증명을 승인할 역할 제공자(ldap) 유형. Required : No, Default : metadata
  • druid.auth.authorizer.MyBasicLDAPAuthorizer.roleProvider.groupFilters — LDAP 검색에서 반환된 허용 그룹 집합을 필터링하는 데 사용되는 LDAP 그룹 필터 배열. 필터는 ,로 시작하거나 ,로 끝날 수 있어 LDAP Authorizer에 허용된 그룹 집합을 제한하거나 필터링하는 구성 유연성을 제공해요. Required : No, Default : null
ReadOnly Authorizer

ReadOnly authorizer는 모든 READ 작업을 허용하고 다른 모든 작업(WRITE, DELETE 등)을 거부해요.

예제 구성:

druid.auth.authenticatorChain=["basic","anonymous"]

# Basic authenticator for internal user
druid.auth.authenticator.basic.type=basic
druid.auth.authenticator.basic.initialAdminPassword=password
druid.auth.authenticator.basic.initialInternalClientPassword=password
druid.auth.authenticator.basic.credentialsValidator.type=metadata
druid.auth.authenticator.basic.authorizerName=BasicAuthorizer

# Anonymous authenticator for external users
druid.auth.authenticator.anonymous.type=anonymous
druid.auth.authenticator.anonymous.identity=defaultUser
druid.auth.authenticator.anonymous.authorizerName=ReadOnlyAuthorizer

# Escalator with Basic auth for internal communications
druid.escalator.type=basic
druid.escalator.internalClientUsername=druid_system
druid.escalator.internalClientPassword=password
druid.escalator.authorizerName=BasicAuthorizer

# Both authorizers
druid.auth.authorizers=["BasicAuthorizer","ReadOnlyAuthorizer"]

# BasicAuthorizer configuration
druid.auth.authorizer.BasicAuthorizer.type=basic

# ReadOnlyAuthorizer configuration
druid.auth.authorizer.ReadOnlyAuthorizer.type=readOnly

이 구성으로:

  • 내부 Druid 통신은 Basic 인증 → AllowAll authorizer → 전체 접근 사용
  • 인증이 없는 외부 사용자 → Anonymous authenticator → ReadOnly authorizer → 읽기 전용 접근
LDAPS 속성 (Properties for LDAPS)

TLS over LDAP(LDAPS)로 Druid 인증을 구성하려면 다음 속성을 사용하세요. 자세한 내용은 Configure LDAP authentication을 참고하세요.

  • druid.auth.basic.ssl.protocol — 사용할 SSL 프로토콜. TLS 버전은 1.2. Required : Yes, Default : tls
  • druid.auth.basic.ssl.trustStorePath — trust store 파일 경로. Required : Yes, Default : N/A
  • druid.auth.basic.ssl.trustStorePassword — trust store 파일 접근 비밀번호. Required : Yes, Default : N/A
  • druid.auth.basic.ssl.trustStoreType — trust store 파일 형식. Java의 형식은 jks. Required : No, Default : jks
  • druid.auth.basic.ssl.trustStoreAlgorithm — trust manager가 인증서 체인을 검증하는 데 사용하는 알고리즘. Required : No, Default : N/A
  • druid.auth.basic.ssl.trustStorePassword — truststore 접근을 가능하게 하는 비밀번호 세부 정보. Required : No, Default : N/A

예제 LDAPS 구성:

druid.auth.basic.ssl.protocol=tls
druid.auth.basic.ssl.trustStorePath=/usr/local/druid-path/certs/truststore.jks
druid.auth.basic.ssl.trustStorePassword=xxxxx
druid.auth.basic.ssl.trustStoreType=jks
druid.auth.basic.ssl.trustStoreAlgorithm=PKIX

druid.auth.basic.ssl.trustStorePassword를 일반 텍스트 비밀번호로 구성하거나 환경 변수로 설정할 수 있어요. 자세한 내용은 Password providers를 참고하세요.

사용법 (Usage)

Coordinator 보안 API (Coordinator Security API)

이 API를 사용하려면 이름이 "security"인 CONFIG 리소스 유형에 대한 읽기/쓰기 권한이 필요해요.

인증 API (Authentication API)

루트 경로: /druid-ext/basic-security/authentication

각 API 엔드포인트는 구성 중인 Authenticator 인스턴스를 지정하는 {authenticatorName}을 포함해요.

사용자/자격 증명 관리 (User/Credential Management)
  • GET(/druid-ext/basic-security/authentication/db/{authenticatorName}/users) — 모든 사용자 이름 목록 반환.
  • GET(/druid-ext/basic-security/authentication/db/{authenticatorName}/users/{userName}) — 이름이 {userName}인 사용자의 이름과 자격 증명 정보 반환.
  • POST(/druid-ext/basic-security/authentication/db/{authenticatorName}/users/{userName}) — 이름이 {userName}인 새 사용자 생성.
  • DELETE(/druid-ext/basic-security/authentication/db/{authenticatorName}/users/{userName}) — 이름이 {userName}인 사용자 삭제.
  • POST(/druid-ext/basic-security/authentication/db/{authenticatorName}/users/{userName}/credentials) — {userName}에 대한 HTTP basic 인증에 사용할 비밀번호 할당. Content: JSON password request object

예제 요청 본문:

{
  "password": "helloworld"
}
캐시 로드 상태 (Cache Load Status)
  • GET(/druid-ext/basic-security/authentication/loadStatus) — 인증 Druid 메타데이터 스토어의 로컬 캐시 현재 로드 상태 반환.
권한 부여 API (Authorization API)

루트 경로: /druid-ext/basic-security/authorization

각 API 엔드포인트는 구성 중인 Authorizer 인스턴스를 지정하는 {authorizerName}을 포함해요.

사용자 생성/삭제 (User Creation/Deletion)
  • GET(/druid-ext/basic-security/authorization/db/{authorizerName}/users) — 모든 사용자 이름 목록 반환.
  • GET(/druid-ext/basic-security/authorization/db/{authorizerName}/users/{userName}) — 이름이 {userName}인 사용자의 이름과 역할 정보 반환.

예제 출력:

{
  "name": "druid2",
  "roles": [
    "druidRole"
  ]
}

이 API는 다음 플래그를 지원해요:

  • ?full — 응답은 현재 사용자에게 할당된 각 역할의 전체 정보도 포함해요.

예제 출력:

{
  "name": "druid2",
  "roles": [
    {
      "name": "druidRole",
      "permissions": [
        {
          "resourceAction": {
            "resource": {
              "name": "A",
              "type": "DATASOURCE"
            },
            "action": "READ"
          },
          "resourceNamePattern": "A"
        },
        {
          "resourceAction": {
            "resource": {
              "name": "C",
              "type": "CONFIG"
            },
            "action": "WRITE"
          },
          "resourceNamePattern": "C"
        }
      ]
    }
  ]
}

?full을 지정할 때의 이 API 출력 형식은 더 이상 사용되지 않으며(deprecated) 이후 버전에서는 ?full과 ?simplifyPermissions 플래그가 모두 설정된 때 사용되는 출력 형식으로 전환될 거예요.

resourceNamePattern은 리소스 이름 regex의 컴파일된 버전이에요. 이는 중복되며 권한 부여 구성을 편집하는 프런트엔드 같은 클라이언트에게 이 API 사용을 복잡하게 만들어요. 이 출력의 권한 형식이 역할에 권한을 추가하는 데 사용되는 형식과 일치하지 않기 때문이에요.

  • ?full&?simplifyPermissions — ?full과 ?simplifyPermissions가 모두 설정되면 출력의 권한은 불필요한 resourceNamePattern 필드 없이 resourceAction 객체 목록만 포함해요.
{
  "name": "druid2",
  "roles": [
    {
      "name": "druidRole",
      "users": null,
      "permissions": [
        {
          "resource": {
            "name": "A",
            "type": "DATASOURCE"
          },
          "action": "READ"
        },
        {
          "resource": {
            "name": "C",
            "type": "CONFIG"
          },
          "action": "WRITE"
        }
      ]
    }
  ]
}
  • POST(/druid-ext/basic-security/authorization/db/{authorizerName}/users/{userName}) — 이름이 {userName}인 새 사용자 생성.
  • DELETE(/druid-ext/basic-security/authorization/db/{authorizerName}/users/{userName}) — 이름이 {userName}인 사용자 삭제.
그룹 매핑 생성/삭제 (Group mapping Creation/Deletion)
  • GET(/druid-ext/basic-security/authorization/db/{authorizerName}/groupMappings) — 모든 그룹 매핑 목록 반환.
  • GET(/druid-ext/basic-security/authorization/db/{authorizerName}/groupMappings/{groupMappingName}) — 이름이 {groupMappingName}인 그룹 매핑과 역할 정보 반환.
  • POST(/druid-ext/basic-security/authorization/db/{authorizerName}/groupMappings/{groupMappingName}) — 이름이 {groupMappingName}인 새 그룹 매핑 생성. Content: JSON group mapping object

예제 요청 본문:

{
    "name": "user",
    "groupPattern": "CN=aaa,OU=aaa,OU=Groupings,DC=corp,DC=company,DC=com",
    "roles": [
        "user"
    ]
}
  • DELETE(/druid-ext/basic-security/authorization/db/{authorizerName}/groupMappings/{groupMappingName}) — 이름이 {groupMappingName}인 그룹 매핑 삭제.

역할 생성/삭제 (Role Creation/Deletion)

  • GET(/druid-ext/basic-security/authorization/db/{authorizerName}/roles) — 모든 역할 이름 목록 반환.
  • GET(/druid-ext/basic-security/authorization/db/{authorizerName}/roles/{roleName}) — {roleName}이라는 역할의 이름과 권한 반환.

예제 출력:

{
  "name": "druidRole2",
  "permissions": [
    {
      "resourceAction": {
        "resource": {
          "name": "E",
          "type": "DATASOURCE"
        },
        "action": "WRITE"
      },
      "resourceNamePattern": "E"
    }
  ]
}

이 API의 기본 출력 형식은 더 이상 사용되지 않으며 이후 버전에서는 ?simplifyPermissions 플래그가 설정된 때 사용되는 출력 형식으로 전환될 거예요. resourceNamePattern은 리소스 이름 regex의 컴파일된 버전이에요. 이는 중복되며 권한 부여 구성을 편집하는 프런트엔드 같은 클라이언트에게 이 API 사용을 복잡하게 만들어요. 이 출력의 권한 형식이 역할에 권한을 추가하는 데 사용되는 형식과 일치하지 않기 때문이에요.

이 API는 다음 플래그를 지원해요:

  • ?full — 출력에 현재 이 역할을 가진 사용자를 포함하는 추가 users 목록이 포함돼요.
{"users":["druid"]}
  • ?simplifyPermissions — 출력의 권한은 불필요한 resourceNamePattern 필드 없이 resourceAction 객체 목록만 포함해요. ?full이 지정되지 않으면 users 필드는 null이에요.

예제 출력:

{
  "name": "druidRole2",
  "users": null,
  "permissions": [
    {
      "resource": {
        "name": "E",
        "type": "DATASOURCE"
      },
      "action": "WRITE"
    }
  ]
}
  • POST(/druid-ext/basic-security/authorization/db/{authorizerName}/roles/{roleName}) — 이름이 {roleName}인 새 역할 생성. Content: username string
  • DELETE(/druid-ext/basic-security/authorization/db/{authorizerName}/roles/{roleName}) — 이름이 {roleName}인 역할 삭제.

역할 할당 (Role Assignment)

  • POST(/druid-ext/basic-security/authorization/db/{authorizerName}/users/{userName}/roles/{roleName}) — 사용자 {userName}에게 역할 {roleName} 할당.
  • DELETE(/druid-ext/basic-security/authorization/db/{authorizerName}/users/{userName}/roles/{roleName}) — 사용자 {userName}에서 역할 {roleName} 할당 해제.
  • POST(/druid-ext/basic-security/authorization/db/{authorizerName}/groupMappings/{groupMappingName}/roles/{roleName}) — 그룹 매핑 {groupMappingName}에 역할 {roleName} 할당.
  • DELETE(/druid-ext/basic-security/authorization/db/{authorizerName}/groupMappings/{groupMappingName}/roles/{roleName}) — 그룹 매핑 {groupMappingName}에서 역할 {roleName} 할당 해제.

권한 (Permissions)

  • POST(/druid-ext/basic-security/authorization/db/{authorizerName}/roles/{roleName}/permissions) — {roleName}의 권한을 설정. 이는 역할의 이전 권한 집합을 대체해요. Content: List of JSON Resource-Action objects, e.g.:
[
{
  "resource": {
    "name": "wiki.*",
    "type": "DATASOURCE"
  },
  "action": "READ"
},
{
  "resource": {
    "name": "wikiticker",
    "type": "DATASOURCE"
  },
  "action": "WRITE"
}
]

권한 정의의 리소스 "name" 필드는 권한 부여 확인 중 리소스 이름을 매칭하는 데 사용되는 regex예요.

자세한 내용은 Defining permissions를 참고하세요.

캐시 로드 상태 (Cache Load Status)
  • GET(/druid-ext/basic-security/authorization/loadStatus) — 권한 부여 Druid 메타데이터 스토어의 로컬 캐시 현재 로드 상태 반환.

더 알아보기 (Learn more)