본문 바로가기
WIKI 기술 지식 베이스

OpenID Connect authentication

원문 보기 위키 갱신

출처: 문서

본문

OpenID Connect 인증

Security 플러그인은 OpenID Connect 표준을 사용하는 ID 공급자와 통합할 수 있어요. 이 기능은 다음을 가능하게 해요:

  • 자동 구성

    Security 플러그인을 ID 공급자(IdP)의 메타데이터로 지정하면 Security 플러그인이 해당 데이터를 구성에 사용해요.

  • 자동 키 가져오기

    Security 플러그인이 IdP의 JSON Web Key Set(JWKS) 엔드포인트에서 JSON Web Token(JWT) 검증을 위한 공개 키를 자동으로 가져와요. config.yml에 키나 공유 비밀을 구성할 필요가 없어요.

  • 키 롤오버

    IdP에서 직접 JWT 서명에 사용되는 키를 변경할 수 있어요. Security 플러그인이 알 수 없는 키를 감지하면 IdP에서 해당 키를 검색하려고 시도해요. 이 롤오버는 사용자에게 투명하게 이루어져요.

  • OpenSearch Dashboards를 단일 로그인으로 사용하거나 Dashboards 로그인 창에서 여러 인증 유형 중 하나로 사용할 수 있어요.

OpenID Connect 통합 구성

OpenID IdP와 통합하려면 인증 도메인을 설정하고 HTTP 인증 유형으로 openid를 선택해요. JWT에는 요청을 확인하는 데 필요한 모든 정보가 이미 포함되어 있으므로 challenge를 false로, authentication_backend를 noop으로 설정해요.

다음은 최소 구성이에요:

_meta:
  type: "config"
  config_version: 2

config:
  dynamic:
    authc:
      openid_auth_domain:
        http_enabled: true
        transport_enabled: true
        order: 0
        http_authenticator:
          type: openid
          challenge: false
          config:
            subject_key: preferred_username
            roles_key: roles
            openid_connect_url: https://keycloak.example.com:8080/auth/realms/master/.well-known/openid-configuration
            required_audience: your-openid-client-id
        authentication_backend:
          type: noop

다음 표는 구성 파라미터를 보여줘요.

이름 설명
openid_connect_url Security 플러그인이 OpenID Connect 메타데이터/구성 설정을 찾을 수 있는 IdP의 URL이에요. 이 URL은 IdP마다 달라요. OpenID Connect를 백엔드로 사용할 때 필요해요.
jwt_header 토큰을 저장하는 HTTP 헤더예요. 일반적으로 Bearer 스키마를 사용하는 Authorization 헤더예요: Authorization: Bearer <token>. 선택 사항이에요. 기본값은 Authorization이에요.
jwt_url_parameter 토큰이 HTTP 헤더가 아닌 URL 파라미터로 전송되는 경우, 여기에 파라미터 이름을 정의해요. 선택 사항이에요.
subject_key 사용자 이름을 저장하는 JSON 페이로드의 키예요. 정의되지 않은 경우 subject 등록 클레임이 사용돼요. 대부분의 IdP 공급자는 preferred_username 클레임을 사용해요. 중첩된 JWT 클레임에서 사용자 이름을 추출하려면 subject_key를 목록으로 구성할 수 있어요. 선택 사항이에요.
roles_key 사용자 역할을 저장하는 JSON 페이로드의 키예요. 값은 쉼표로 구분된 역할 목록이어야 해요. 이 키는 JWT에서 역할을 사용하려는 경우에만 필요해요. 중첩된 JWT 클레임에서 역할을 추출하려면 roles_key를 목록으로 구성할 수 있어요.
required_audience JWT가 지정해야 하는 대상(audience) 이름이에요. 단일 값(예: project1) 또는 여러 개의 쉼표로 구분된 값(예: project1,admin)을 지정할 수 있어요. 여러 값을 지정하는 경우 JWT는 필수 대상 중 하나 이상을 가지고 있어야 해요. 이 파라미터는 JWT의 aud 클레임에 해당해요.
required_issuer JSON 페이로드에 저장된 JWT의 대상 발급자(issuer)예요. 이는 JWT의 iss 클레임에 해당해요.
jwt_clock_skew_tolerance_seconds JWT 인증 서버와 OpenSearch 노드의 시계 시간 차이를 보정하기 위한 시간 범위(초)를 지정해요. 이를 통해 시간 불일치로 인한 인증 실패를 방지해요. Security 플러그인은 기본값으로 30초를 설정해요. 사용자 정의 값을 적용하려면 이 설정을 사용해요.
cache_jwks_endpoint IdP의 JWKS 엔드포인트에서 검색된 공개 키를 캐시할지 여부예요. 이러한 키를 캐시하면 JWT 검증 중 IdP로 전송되는 요청 수가 줄어들어요. 기본값은 false예요. 자세한 내용은 캐싱 및 성능을 참조하세요.

OpenID Connect URL

OpenID Connect는 통합을 위한 다양한 엔드포인트를 지정해요. 가장 중요한 엔드포인트는 well-known으로, Security 플러그인을 위한 엔드포인트 및 기타 구성 옵션을 나열해요.

URL은 IdP마다 다르지만, 일반적으로 /.well-known/openid-configuration으로 끝나요.

Keycloak 예시:

http(s)://<server>:<port>/auth/realms/<realm>/.well-known/openid-configuration

Security 플러그인이 필요로 하는 주요 정보는 jwks_uri예요. 이 URI는 IdP의 공개 키를 JWKS 형식으로 찾을 수 있는 위치를 지정해요. 예를 들어:

jwks_uri: "https://keycloak.example.com:8080/auth/realms/master/protocol/openid-connect/certs"
{
   keys:[
      {
         kid:"V-diposfUJIk5jDBFi_QRouiVinG5PowskcSWy5EuCo",
         kty:"RSA",
         alg:"RS256",
         use:"sig",
         n:"rI8aUrAcI_auAdF10KUopDOmEFa4qlUUaNoTER90XXWADtKne6VsYoD3ZnHGFXvPkRAQLM5d65ScBzWungcbLwZGWtWf5T2NzQj0wDyquMRwwIAsFDFtAZWkXRfXeXrFY0irYUS9rIJDafyMRvBbSz1FwWG7RTQkILkwiC4B8W1KdS5d9EZ8JPhrXvPMvW509g0GhLlkBSbPBeRSUlAS2Kk6nY5i3m6fi1H9CP3Y_X-TzOjOTsxQA_1pdP5uubXPUh5YfJihXcgewO9XXiqGDuQn6wZ3hrF6HTlhNWGcSyQPKh1gEcmXWQlRENZMvYET-BuJEE7eKyM5vRhjNoYR3w",
         e:"AQAB"
      }
   ]
}

IdP 엔드포인트에 대한 자세한 내용은 다음을 참조하세요:

캐싱 및 성능

기본적으로 Security 플러그인은 OpenID Connect 인증을 위해 JWKS 엔드포인트 응답을 캐시하지 않아요. 캐싱이 없으면 Security 플러그인이 키 세트를 새로 고쳐야 할 때마다 IdP에서 JWKS를 검색하므로 네트워크 트래픽이 증가하고 IdP에 불필요한 부하가 추가될 수 있어요.

OpenID Connect 인증 도메인 구성에서 cache_jwks_endpoint를 true로 설정하여 캐싱을 활성화할 수 있어요:

http_authenticator:
  type: openid
  challenge: false
  config:
    subject_key: preferred_username
    roles_key: roles
    openid_connect_url: https://keycloak.example.com:8080/auth/realms/master/.well-known/openid-configuration
    cache_jwks_endpoint: true

{% include copy.html %}

캐싱이 활성화되면 Security 플러그인은 JWKS 엔드포인트에서 검색된 공개 키를 캐시하고 이후 JWT 검증에 재사용해요. 캐시된 키 세트는 다음 상황에서 새로 고쳐져요:

  • JWT에 현재 캐시에서 찾을 수 없는 kid(키 ID)가 포함된 경우
  • IdP에서 키 롤오버가 트리거된 경우

jwks_uri로 구성된 JWT 인증의 경우 cache_jwks_endpoint가 기본적으로 활성화되어 있어요. OpenID Connect 인증의 경우 캐싱을 활성화하려면 cache_jwks_endpoint를 명시적으로 true로 설정해야 해요. {: .note }

JWT 검증을 위한 시간 차이 보정

때때로 인증 서버와 OpenSearch 노드 간의 시계 시간이 완벽하게 동기화되지 않을 수 있어요. 이 경우, 몇 초만 차이가 나더라도 JWT를 발급하거나 수신하는 시스템이 nbf(not before) 및 exp(만료) 클레임을 검증하려고 시도할 때 시간 차이로 인해 사용자 인증에 실패할 수 있어요.

기본적으로 Security는 서버 시계 시간 간의 가능한 불일치를 보정하기 위해 30초의 시간 범위를 허용해요. 이 기능에 사용자 정의 값을 설정하고 기본값을 재정의하려면 config.yml에 jwt_clock_skew_tolerance_seconds 설정을 추가할 수 있어요:

http_authenticator:
  type: openid
  challenge: false
  config:
    subject_key: preferred_username
    roles_key: roles
    openid_connect_url: https://keycloak.example.com:8080/auth/realms/master/.well-known/openid-configuration
    jwt_clock_skew_tolerance_seconds: 20

공개 키 가져오기

IdP가 JWT를 생성하고 서명할 때, 키의 ID를 JWT 헤더에 추가해야 해요. 예를 들어:

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "V-diposfUJIk5jDBFi_QRouiVinG5PowskcSWy5EuCo"
}

OpenID Connect 사양에 따라 kid(키 ID)는 필수예요. IdP가 JWT에 kid 필드를 추가하지 않으면 토큰 검증이 작동하지 않아요.

Security 플러그인이 알 수 없는 kid가 포함된 JWT를 수신하면 IdP의 jwks_uri를 방문하여 사용 가능한 모든 유효한 키를 검색해요. 이러한 키는 다른 알 수 없는 키 ID를 검색하여 새로 고침이 트리거될 때까지 사용되고 캐시돼요.

키 롤오버 및 여러 공개 키

Security 플러그인은 한 번에 여러 개의 유효한 공개 키를 유지할 수 있어요. OpenID 사양은 공개 키의 유효 기간을 허용하지 않으므로, 키는 IdP의 유효 키 목록에서 제거되고 유효 키 목록이 새로 고쳐질 때까지 유효해요.

IdP에서 키를 롤오버하려면 다음 모범 사례를 따르세요:

  • IdP에서 새 키 쌍을 생성하고, 현재 사용 중인 키보다 새 키에 더 높은 우선순위를 부여해요.

    IdP는 이전 키보다 새 키를 사용해요.

  • JWT에 새 kid가 처음 나타나면 Security 플러그인이 키 목록을 새로 고쳐요.

    이 시점에서 이전 키와 새 키 모두 유효해요. 이전 키로 서명된 토큰도 여전히 유효해요.

  • 이 키로 서명된 마지막 JWT가 만료되면 IdP에서 이전 키를 제거할 수 있어요.

공개 키를 즉시 변경해야 하는 경우, 먼저 이전 키를 삭제한 다음 새 키를 생성할 수도 있어요. 이 경우 이전 키로 서명된 모든 JWT가 즉시 무효화돼요.

TLS 설정

중간자 공격을 방지하려면 Security 플러그인과 IdP 간의 연결을 TLS로 보호해야 해요.

TLS 활성화

IdP에 연결하기 위해 TLS를 활성화하려면 다음 파라미터를 사용해요:

config:
  openid_connect_idp:
    enable_ssl: <true|false>
    verify_hostnames: <true|false>
이름 설명
enable_ssl TLS 사용 여부예요. 기본값은 false예요.
verify_hostnames IdP의 TLS 인증서 호스트 이름을 확인할지 여부예요. 기본값은 true예요.

인증서 검증

IdP의 TLS 인증서를 검증하려면 IdP의 루트 CA 경로 또는 루트 인증서 내용을 구성해요:

config:
  openid_connect_idp:
    enable_ssl: true
    pemtrustedcas_filepath: /full/path/to/trusted_cas.pem
config:
  openid_connect_idp:
    enable_ssl: true
    pemtrustedcas_content: |-
      -----BEGIN CERTIFICATE-----
      MIID/jCCAuagAwIBAgIBATANBgkqhkiG9w0BAQUFADCBjzETMBEGCgmSJomT8ixk
      ARkWA2NvbTEXMBUGCgmSJomT8ixkARkWB2V4YW1wbGUxGTAXBgNVBAoMEEV4YW1w
      bGUgQ29tIEluYy4xITAfBgNVBAsMGEV4YW1wbGUgQ29tIEluYy4gUm9vdCBDQTEh
      ...
      -----END CERTIFICATE-----
이름 설명
pemtrustedcas_filepath IdP의 루트 CA가 포함된 PEM 파일의 절대 경로예요.
pemtrustedcas_content IdP의 루트 CA 내용이에요. pemtrustedcas_filepath가 설정된 경우 사용할 수 없어요.

TLS 클라이언트 인증

TLS 클라이언트 인증을 사용하려면 Security 플러그인이 TLS 클라이언트 인증을 위해 보내야 하는 PEM 인증서와 개인 키(또는 그 내용)를 구성해요:

config:
  openid_connect_idp:
    enable_ssl: true
    pemkey_filepath: /full/path/to/private.key.pem
    pemkey_password: private_key_password
    pemcert_filepath: /full/path/to/certificate.pem
config:
  openid_connect_idp:
    enable_ssl: true
    pemkey_content: |-
      -----BEGIN PRIVATE KEY-----
      MIID2jCCAsKgAwIBAgIBBTANBgkqhkiG9w0BAQUFADCBlTETMBEGCgmSJomT8ixk
      ARkWA2NvbTEXMBUGCgmSJomT8ixkARkWB2V4YW1wbGUxGTAXBgNVBAoMEEV4YW1w
      bGUgQ29tIEluYy4xJDAiBgNVBAsMG0V4YW1wbGUgQ29tIEluYy4gU2lnbmluZyBD
      ...
      -----END PRIVATE KEY-----
    pemkey_password: private_key_password
    pemcert_content: |-
      -----BEGIN CERTIFICATE-----
      MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHRZwzwGlP2FvL
      oEzNeDu2XnOF+ram7rWPT6fxI+JJr3SDz1mSzixTeHq82P5A7RLdMULfQFMfQPfr
      WXgB4qfisuDSt+CPocZRfUqqhGlMG2l8LgJMr58tn0AHvauvNTeiGlyXy0ShxHbD
      ...
      -----END CERTIFICATE-----
이름 설명
enable_ssl_client_auth IdP 서버에 클라이언트 인증서를 보낼지 여부예요. 기본값은 false예요.
pemcert_filepath 클라이언트 인증서의 절대 경로예요.
pemcert_content 클라이언트 인증서의 내용이에요. pemcert_filepath가 설정된 경우 사용할 수 없어요.
pemkey_filepath 클라이언트 인증서의 개인 키가 포함된 파일의 절대 경로예요.
pemkey_content 클라이언트 인증서의 개인 키 내용이에요. pemkey_filepath가 설정된 경우 사용할 수 없어요.
pemkey_password 개인 키의 비밀번호(있는 경우)예요.

활성화된 암호화 및 프로토콜

다음 키를 사용하여 허용된 암호화 및 TLS 프로토콜을 제한할 수 있어요.

이름 설명
enabled_ssl_ciphers 배열이에요. 활성화된 TLS 암호화 제품군이에요. Java 형식만 지원돼요.
enabled_ssl_protocols 배열이에요. 활성화된 TLS 프로토콜이에요. Java 형식만 지원돼요.

(고급) DoS 보호

서비스 거부(DoS) 공격을 방지하기 위해 Security 플러그인은 특정 시간 범위 내에서 최대 개수의 새 키 ID만 허용해요. 새 키 ID 수가 이 임계값을 초과하면 Security 플러그인은 HTTP 상태 코드 503(서비스를 사용할 수 없음)을 반환하고 IdP 쿼리를 거부해요. 기본적으로 Security 플러그인은 10초 이내에 10개 이상의 알 수 없는 키 ID를 허용하지 않아요. 다음 표는 이러한 설정을 수정하는 방법을 보여줘요.

이름 설명
refresh_rate_limit_count 시간 범위 내에서 허용되는 알 수 없는 키 ID의 최대 개수예요. 기본값은 10이에요.
refresh_rate_limit_time_window_ms 알 수 없는 키 ID의 최대 개수를 확인할 때 사용할 시간 범위(밀리초)예요. 기본값은 10000(10초)이에요.

OpenSearch Dashboards 싱글 사인온

OpenID Connect를 활성화하려면 opensearch_dashboards.yml에 다음을 추가하세요:

opensearch_security.auth.type: "openid"

구성

OpenID Connect 제공자는 일반적으로 메타데이터 URL 아래에 JSON 형식으로 구성을 게시해요. 따라서 대부분의 설정을 자동으로 가져올 수 있어서 OpenSearch Dashboards 구성이 최소화돼요. 가장 중요한 설정은 다음과 같아요:

  • 연결 URL

  • 클라이언트 ID

    모든 IdP는 다양한 설정과 인증 프로토콜을 가진 여러 클라이언트(때로는 애플리케이션이라고도 함)를 호스팅할 수 있어요. OpenID Connect를 활성화할 때 IdP에서 OpenSearch Dashboards용 새 클라이언트를 생성해야 해요. 클라이언트 ID는 OpenSearch Dashboards를 고유하게 식별해요.

  • 클라이언트 시크릿

    ID 외에도 각 클라이언트에는 클라이언트 시크릿이 할당돼요. 클라이언트 시크릿은 일반적으로 클라이언트가 생성될 때 생성돼요. 애플리케이션은 클라이언트 시크릿을 제공할 때만 ID 토큰을 얻을 수 있어요. 이 시크릿은 IdP의 클라이언트 설정에서 찾을 수 있어요.

구성 설정

이름 설명
opensearch_security.openid.connect_url IdP가 OpenID 메타데이터를 게시하는 URL이에요. 필수예요.
opensearch_security.openid.client_id IdP에 구성된 OpenID Connect 클라이언트의 ID예요. 필수예요.
opensearch_security.openid.client_secret IdP에 구성된 OpenID Connect 클라이언트의 클라이언트 시크릿이에요. 필수예요.
opensearch_security.openid.scope IdP에서 발급하는 ID 토큰의 범위예요. 선택 사항이에요. 기본값은 openid profile email address phone이에요.
opensearch_security.openid.header JWT 토큰의 HTTP 헤더 이름이에요. 선택 사항이에요. 기본값은 Authorization이에요.
opensearch_security.openid.logout_url IdP의 로그아웃 URL이에요. 선택 사항이에요. IdP가 메타데이터에 로그아웃 URL을 게시하지 않는 경우에만 필요해요.
opensearch_security.openid.base_redirect_url IdP로 전송될 리디렉션 URL의 기본이에요. 선택 사항이에요. OpenSearch Dashboards가 리버스 프록시 뒤에 있는 경우에만 필요하며, 이 경우 opensearch_dashboards.yml의 server.host 및 server.port와 달라야 해요.
opensearch_security.openid.trust_dynamic_headers 리버스 프록시 HTTP 헤더(X-Forwarded-Host / X-Forwarded-Proto)에서 base_redirect_url을 계산해요. 선택 사항이에요. 기본값은 false예요.
opensearch_security.openid.root_ca IdP의 인증서가 일치하거나 체인으로 연결될 수 있는 루트 CA(PEM 형식)의 경로예요. 선택 사항이에요.
opensearch_security.openid.certificate IdP에서 엔드포인트를 가져올 때 mTLS에 사용할 인증서 체인(PEM 형식)이에요. 선택 사항이에요.
opensearch_security.openid.private_key IdP에서 엔드포인트를 가져올 때 mTLS에 사용할 개인 키(PEM 형식)예요. 선택 사항이에요.
opensearch_security.openid.passphrase 단일 private_key 또는 pfx에 사용되는 암호예요. 선택 사항이에요.
opensearch_security.openid.pfx IdP에서 엔드포인트를 가져올 때 mTLS에 사용할 PFX 또는 PKCS12로 인코딩된 개인 키 및 인증서 체인이에요. certificate 및 private_key의 대안이에요. 선택 사항이에요.
opensearch_security.openid.verify_hostnames IdP의 TLS 인증서 호스트 이름을 확인할지 여부예요. 기본값은 true예요. 선택 사항이에요.

구성 예제

# Enable OpenID authentication
opensearch_security.auth.type: "openid"

# The IdP metadata endpoint
opensearch_security.openid.connect_url: "http://keycloak.example.com:8080/auth/realms/master/.well-known/openid-configuration"

# The ID of the OpenID Connect client in your IdP
opensearch_security.openid.client_id: "opensearch-dashboards-sso"

# The client secret of the OpenID Connect client
opensearch_security.openid.client_secret: "a59c51f5-f052-4740-a3b0-e14ba355b520"

# mTLS Options for obtaining endpoints from IdP
opensearch_security.openid.root_ca: /usr/share/opensearch-dashboards/config/certs/ca.pem
opensearch_security.openid.certificate: /usr/share/opensearch-dashboards/config/certs/cert.pem
opensearch_security.openid.private_key: /usr/share/opensearch-dashboards/config/certs/key.pem

# Use HTTPS instead of HTTP
opensearch.url: "https://<hostname>.com:<http port>"

# Configure the OpenSearch Dashboards internal server user
opensearch.username: "kibanaserver"
opensearch.password: "kibanaserver"

# Disable SSL verification when using self-signed demo certificates
opensearch.ssl.verificationMode: none

# allowlist basic headers and multi-tenancy header
opensearch.requestHeadersAllowlist: ["Authorization", "securitytenant"]

Dashboards 로그인 창에 OpenID Connect를 다른 인증 유형과 함께 포함하려면 로그인 옵션 구성을 참조하세요. {: .note }

추가 매개변수

일부 ID 제공자는 인증 프로세스를 완료하기 위해 사용자 지정 매개변수가 필요해요. opensearch_security.openid.additional_parameters 네임스페이스 아래의 opensearch_dashboards.yml 구성 파일에 사용자 지정 매개변수를 추가할 수 있어요. 이러한 추가 매개변수는 ID 제공자에 GET 요청을 보내서 찾을 수 있어요. 이 기능을 사용하면 다양한 ID 제공자와 통신할 때 더 큰 유연성과 사용자 지정이 가능해요.

다음 예에서는 OpenID 제공자에 대한 GET 요청을 사용하여 foo 및 acr_values라는 두 개의 사용자 지정 매개변수와 해당 값 bar 및 1을 찾았어요:

opensearch_security.openid.additional_parameters.foo: "bar"
opensearch_security.openid.additional_parameters.acr_values: "1"

{% include copy.html %}

추가 쿠키를 사용한 세션 관리

세션 관리를 개선하기 위해(특히 여러 역할이 할당된 사용자의 경우) Dashboards는 쿠키 페이로드를 여러 쿠키로 분할한 다음 수신 시 다시 결합하는 옵션을 제공해요. 이렇게 하면 더 큰 OpenID Connect 어설션이 각 쿠키의 크기 제한을 초과하는 것을 방지하는 데 도움이 될 수 있어요. 다음 예제의 두 설정을 사용하면 추가 쿠키의 접두사 이름을 설정하고 그 수를 지정할 수 있어요. 이 설정은 opensearch_dashboards.yml 파일에 추가돼요. 추가 쿠키의 기본 개수는 3개예요:

opensearch_security.openid.extra_storage.cookie_prefix: security_authentication_oidc
opensearch_security.openid.extra_storage.additional_cookies: 3

추가 쿠키 수를 줄이면 변경 전에 사용 중이던 일부 쿠키가 작동을 멈출 수 있어요. 추가 쿠키 수를 고정하고 그 후에는 구성을 변경하지 않는 것이 좋아요.

IdP의 ID 토큰이 특히 큰 경우 OpenSearch에서 HTTP 헤더가 너무 크다는 서버 로그 인증 오류가 발생할 수 있어요. 이 경우 opensearch.yml 파일에서 http.max_header_size 설정 값을 늘릴 수 있어요. {: .tip }

OpenSearch 보안 구성

OpenSearch Dashboards는 HTTP 기본 인증을 엄격하게 요구하지 않아요. OpenID Connect만 사용하여 인증하도록 구성할 수 있어요. 그러나 여러 인증 방법(예: 사용자에게는 OpenID를 사용하고 자동화된 서비스에는 HTTP 기본을 사용)을 지원해야 하는 경우 여러 인증 도메인을 구성해야 해요.

OpenID를 기본 방법으로 사용하는 경우 challenge 플래그를 false로 설정하세요.

클라이언트 인증서와 같은 다른 방법을 사용하여 HTTP 기본 인증 없이 내부 Dashboards 서버 사용자를 인증할 수도 있어요.

config.yml에서 다음 예제 설정을 수정하고 적용하세요:

_meta:
  type: "config"
  config_version: 2

config:
  dynamic:
    authc:
      basic_internal_auth_domain:
        http_enabled: true
        transport_enabled: true
        order: 0
        http_authenticator:
          type: basic
          challenge: false
        authentication_backend:
          type: internal
      openid_auth_domain:
        http_enabled: true
        transport_enabled: true
        order: 1
        http_authenticator:
          type: openid
          challenge: false
          config:
            subject_key: preferred_username
            roles_key: roles
            openid_connect_url: https://keycloak.example.com:8080/auth/realms/master/.well-known/openid-configuration
        authentication_backend:
          type: noop

Keycloak을 사용한 Docker 예제

다음 단계에서는 Docker와 Keycloak IdP를 사용하여 기본 인증 백엔드를 설정해요:

  1. 예제 OpenID Connect zip 파일을 다운로드하고 압축을 풀어요.
  2. .env 파일에서 admin 사용자의 강력한 비밀번호로 업데이트하세요.
  3. config.yml 및 opensearch_dashboards.yml의 {IP} 자리 표시자를 로컬 머신의 IP로 대체하세요.
  4. 다음 파일을 검토하세요:
  • docker-compose.yml은 단일 OpenSearch 노드, OpenSearch Dashboards 및 Keycloak 서버를 정의해요.
  • new-realm.json은 realm의 세부 정보를 지정해요. 이 예제에서 realm 이름은 new예요.
  • config.yml은 basic_internal_auth_domain 및 oidc_auth_domain을 구성해요.
  • opensearch_dashboards.yml은 인증을 위해 Keycloak을 가리켜야 해요. opensearch_security.openid.connect_url 설정이 realm의 URL을 가리키는지 확인하세요.
  1. 명령줄에서 docker compose up을 실행하세요.
  2. http://localhost:5601에서 OpenSearch Dashboards에 접속하고 new-realm.json 파일에 구성된 사용자 이름 testuser와 비밀번호 testpassword로 로그인하세요.

로그인 후 testuser는 Keycloak에서 백엔드 역할 admin을 받으며, 이는 all_access OpenSearch 역할에 매핑돼요. 이러한 백엔드 역할은 http://localhost:8080의 Keycloak 관리 콘솔에서 사용자 이름 admin과 비밀번호 admin을 사용하여 관리할 수 있어요.

문제 해결

더 알아보기 (Learn more)