Kerberos authentication
출처: 문서
본문
Kerberos 인증
Kerberos는 안전한 신원 확인을 위해 "티켓"을 발급함으로써 비밀번호가 인터넷을 통해 전송되는 것을 막아 주는, 견고하고 안전한 사용자 인증 방식이에요.
Kerberos 인증을 사용하려면 opensearch.yml과 config.yml에서 다음 설정을 지정해야 해요.
OpenSearch 노드 설정
opensearch.yml에서 다음 설정을 정의하세요:
plugins.security.kerberos.krb5_filepath: 'krb5.conf'
plugins.security.kerberos.acceptor_keytab_filepath: 'opensearch_keytab.tab'
plugins.security.kerberos.acceptor_principal: 'HTTP/localhost'
| 이름 | 설명 |
|---|---|
krb5_filepath |
Kerberos 구성 파일의 경로예요. 이 파일에는 Kerberos 설치와 관련된 다양한 설정이 담겨 있어요. 예를 들어 Kerberos 키 배포 센터(KDC)의 realm 이름, hostnames, 포트 등이 있어요. |
acceptor_keytab_filepath |
keytab 파일의 경로예요. 이 파일에는 Security 플러그인이 Kerberos를 통해 요청을 발행할 때 사용하는 principal이 담겨 있어요. |
acceptor_principal |
Security 플러그인이 Kerberos를 통해 요청을 발행할 때 사용하는 principal이에요. 이 값은 keytab 파일에 반드시 존재해야 해요. |
보안 제약 때문에 keytab과 krb5.conf 파일은 config 디렉터리 또는 그 하위 디렉터리에 위치해야 하고, opensearch.yml에서의 경로는 절대 경로가 아닌 상대 경로여야 해요.
{: .note }
클러스터 보안 설정
다음 예제는 config.yml에서의 일반적인 Kerberos 인증 도메인을 보여 줘요:
kerberos_auth_domain:
enabled: true
order: 1
http_authenticator:
type: kerberos
challenge: true
config:
krb_debug: false
strip_realm_from_principal: true
authentication_backend:
type: noop
브라우저를 사용할 때 HTTP 수준에서 이루어지는 Kerberos 인증은 SPNEGO를 통해 구현돼요. Kerberos/SPNEGO 구현 방식은 브라우저와 운영 체제에 따라 달라져요. challenge 플래그를 true로 설정할지 false로 설정할지 결정할 때 이 점이 중요해요.
HTTP Basic Authentication과 마찬가지로, 이 플래그는 HTTP 요청에서 Authorization 헤더를 찾을 수 없거나 이 헤더가 negotiate와 같지 않을 때 Security 플러그인이 어떻게 반응할지를 결정해요.
true로 설정하면 Security 플러그인은 상태 코드 401과 negotiate로 설정된 WWW-Authenticate 헤더가 포함된 응답을 보내요. 이는 클라이언트(브라우저)에게 Authorization 헤더를 설정한 채로 요청을 다시 보내도록 알려 주는 거예요. false로 설정하면 Security 플러그인이 요청에서 자격 증명을 추출할 수 없어 인증에 실패해요. 따라서 challenge를 false로 설정하는 것은 Kerberos 자격 증명이 초기 요청에서 전송되는 경우에만 의미가 있어요.
| 이름 | 설명 |
|---|---|
krb_debug |
이름에서 알 수 있듯이, true로 설정하면 Kerberos 관련 디버깅 메시지를 stdout에 출력해요. Kerberos 통합에 문제가 생기면 이 설정을 사용하세요. 기본값은 false예요. |
strip_realm_from_principal |
true로 설정하면 Security 플러그인이 사용자 이름에서 realm 부분을 제거해요. 기본값: true. |
Kerberos/SPNEGO는 HTTP 수준에서 사용자를 인증하기 때문에 별도의 authentication_backend가 필요하지 않아요. 이 값은 noop으로 설정하세요.