TLS/SSL 설정

원본 보기

TLS/SSL 설정

HTTP 계층에서 일반적으로 HTTPS로 알려진 TLS를 활성화하면 클러스터와 이루어지는 모든 클라이언트 통신이 암호화되어 중요한 보안 계층이 추가됩니다.

이 문서는 Elasticsearch 및 Kibana의 HTTPS 수동 구성에 중점을 둡니다. 자체 TLS 인증서를 제공하거나 Elastic 도구로 인증서를 생성하거나 구성을 완전히 제어하려는 경우 이 방법을 사용하세요.

Kibana의 HTTPS 구성은 항상 수동으로 수행해야 합니다. 전체 사용자 지정이 필요하지 않다면 프로세스를 간소화할 수 있는 Elasticsearch의 자동 HTTPS 설정을 대신 사용할 수 있습니다.

이 가이드에서는 다음 방법을 알아봅니다.

Elasticsearch에서 사용할 수 있는 전체 설정 목록은 HTTP TLS/SSL 설정을 참조하세요.

참고

이 가이드에서는 elasticsearch-certutil 도구를 사용하여 인증 기관(CA)과 TLS 인증서를 생성합니다. 하지만 이 도구를 반드시 사용해야 하는 것은 아닙니다. 공개적으로 신뢰할 수 있는 인증서, 조직의 내부 인증서 관리 시스템 또는 유효한 인증서를 생성하는 기타 방법을 사용할 수 있습니다.

사용할 수 있는 인증서가 이미 있다면 인증서 생성 단계를 건너뛰고 Elasticsearch 및 Kibana 구성 단계로 바로 진행할 수 있습니다.

elasticsearch-certutilhttp 모드에서 실행하면 도구에서 TLS 인증서 생성 방법을 선택하라는 메시지가 표시됩니다. 주요 질문 중 하나는 인증서 서명 요청(CSR)을 생성할지 여부입니다.

  • CSR을 건너뛰고 n을 입력하여 이전에 생성한 인증 기관(CA)으로 인증서에 서명합니다. CA 경로를 입력하라는 메시지가 표시되며, 도구는 해당 CA를 사용하여 .p12 인증서를 생성합니다. 이 가이드의 Elasticsearch 인증서 단계에서는 이 워크플로를 따릅니다.
  • 조직의 내부 CA 또는 외부 인증서 공급자가 서명할 수 있는 CSR을 생성하려면 y를 입력합니다. 신뢰가 중앙에서 관리되는 환경에서 일반적으로 사용하는 방법입니다. 이 가이드의 Kibana 인증서 단계에서는 이 워크플로를 따릅니다.

두 워크플로가 모두 지원됩니다. 인프라 및 신뢰 모델에 가장 적합한 워크플로를 선택하세요.

클러스터에서 보안 기능을 아직 활성화하지 않았다면 최소 보안 설정의 모든 단계를 완료하세요.

다중 노드 클러스터의 경우 전송 TLS 설정을 완료했는지 확인하세요. 이 프로세스의 일부로 생성한 인증 기관(CA)은 이 가이드에서 HTTP 인증서를 발급하는 데 다시 사용됩니다.

HTTP에 별도의 CA를 사용하려면 동일한 프로세스로 새 CA를 생성할 수 있습니다. 예:

elasticsearch-certutil ca --out http-ca.p12
		

그런 다음 다음 섹션에서 이 CA를 사용하여 HTTP 인증서에 서명하고 Kibana HTTP 엔드포인트에도 사용합니다.

TLS를 활성화하면 클러스터와 이루어지는 모든 클라이언트 통신이 암호화됩니다. 클라이언트는 https를 사용하여 연결하고 Elasticsearch 인증서에 서명한 인증 기관(CA)을 신뢰하도록 구성해야 합니다.

  1. 클러스터의 모든 노드에서 실행 중인 Elasticsearch 및 Kibana를 중지합니다.

  2. 임의의 노드 하나에서 Elasticsearch를 설치한 디렉터리로 이동한 후 Elasticsearch HTTP 인증서 도구를 실행하여 노드용 TLS 인증서를 생성합니다.

    ./bin/elasticsearch-certutil http
    		

    이 명령은 Elasticsearch 및 Kibana에서 사용할 인증서와 키가 포함된 .zip 파일을 생성합니다. 각 폴더에는 이러한 파일의 사용 방법을 설명하는 README.txt가 있습니다.

    1. CSR을 생성할지 묻는 메시지가 표시되면 n을 입력합니다.

    2. 기존 CA를 사용할지 묻는 메시지가 표시되면 y를 입력합니다.

    3. CA 경로를 입력합니다. 이 경로는 클러스터용으로 생성한 elastic-stack-ca.p12 파일의 절대 경로입니다.

    4. CA의 비밀번호를 입력합니다.

    5. 인증서의 만료 기간을 입력합니다. 유효 기간은 년, 월 또는 일 단위로 입력할 수 있습니다. 예를 들어 90일은 90D를 입력합니다.

    6. 노드마다 인증서를 하나씩 생성할지 묻는 메시지가 표시되면 y를 입력합니다.

      각 인증서에는 고유한 개인 키가 있으며 특정 호스트 이름 또는 IP 주소에 대해 발급됩니다.

    7. 메시지가 표시되면 클러스터의 첫 번째 노드 이름을 입력합니다.

    8. 첫 번째 노드에 연결할 때 사용하는 모든 호스트 이름을 입력합니다. 이러한 호스트 이름은 인증서의 주체 대체 이름(SAN) 필드에 DNS 이름으로 추가됩니다.

      HTTPS를 통해 클러스터에 연결할 때 사용하는 모든 호스트 이름과 변형을 나열합니다.

    9. 클라이언트가 노드 연결에 사용할 수 있는 IP 주소를 입력합니다.

    10. 클러스터의 추가 노드마다 이 단계를 반복합니다.

  3. 각 노드의 인증서를 생성한 후 메시지가 표시되면 개인 키의 비밀번호를 입력합니다.

  4. 생성된 elasticsearch-ssl-http.zip 파일의 압축을 풉니다. 이 압축 파일에는 Elasticsearch와 Kibana용 디렉터리가 각각 하나씩 포함되어 있습니다.

    /elasticsearch
    |_ README.txt
    |_ http.p12
    |_ sample-elasticsearch.yml
    		
    /kibana
    |_ README.txt
    |_ elasticsearch-ca.pem
    |_ sample-kibana.yml
    		
  5. 클러스터의 모든 노드에서 다음 단계를 완료합니다.

    1. 해당 http.p12 인증서를 $ES_PATH_CONF 디렉터리에 복사합니다.

    2. elasticsearch.yml 파일을 편집하여 HTTPS 보안을 활성화하고 http.p12 보안 인증서의 위치를 지정합니다.

      xpack.security.http.ssl.enabled: true
      xpack.security.http.ssl.keystore.path: http.p12
      		
    3. 개인 키의 비밀번호를 Elasticsearch의 보안 설정에 추가합니다.

      ./bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
      		
    4. Elasticsearch를 시작합니다.

Kibana는 암호화해야 하는 두 가지 별도의 HTTP 트래픽을 처리합니다.

  • Kibana에서 Elasticsearch로 보내는 요청: Kibana는 HTTP 클라이언트 역할을 하므로 Elasticsearch가 사용하는 TLS 인증서를 신뢰하도록 구성해야 합니다.
  • 브라우저 또는 API 클라이언트에서 Kibana로 들어오는 요청: Kibana는 HTTP 서버 역할을 하므로 클라이언트 트래픽을 보호하기 위해 공개 엔드포인트에 TLS 인증서를 구성해야 합니다.

Elasticsearch 인증서를 생성하기 위해 elasticsearch-certutil 도구를 http 옵션으로 실행하면 /kibana 디렉터리에 elasticsearch-ca.pem 파일이 생성됩니다. 이 파일을 사용하여 Kibana가 HTTP 계층에서 Elasticsearch CA를 신뢰하도록 구성합니다.

참고

다른 방법으로 Elasticsearch 인증서를 발급받았다면 신뢰를 설정할 수 있도록 Kibana에 적절한 CA 인증서를 제공해야 합니다. 인증서 발급 방식에 따라 루트 CA와 하나 이상의 중간 CA가 포함될 수 있습니다.

  1. elasticsearch-ca.pem 파일을 $KBN_PATH_CONF 경로로 정의된 Kibana 구성 디렉터리에 복사합니다.

  2. kibana.yml을 열고 다음 줄을 추가하여 HTTP 계층의 보안 인증서 위치를 지정합니다.

    elasticsearch.ssl.certificateAuthorities: $KBN_PATH_CONF/elasticsearch-ca.pem
    		
  3. 다음 줄을 추가하여 Elasticsearch 클러스터의 HTTPS URL을 지정합니다.

    elasticsearch.hosts: https://<your_elasticsearch_host>:9200
    		
  4. Kibana를 다시 시작합니다.

보안 모니터링 클러스터에 연결

Elastic 모니터링 기능이 활성화되어 있고 별도의 Elasticsearch 모니터링 클러스터를 구성한 경우 HTTPS를 통해 모니터링 클러스터에 연결하도록 Kibana를 구성할 수도 있습니다. 단계는 동일하지만 각 설정 앞에 monitoring.ui가 붙습니다. 예를 들면 monitoring.ui.elasticsearch.hostsmonitoring.ui.elasticsearch.ssl.certificateAuthorities입니다.

모니터링 클러스터에서 기본 클러스터와 다른 CA가 서명한 인증서를 사용하는 경우 모니터링 클러스터의 CA에 해당하는 별도의 elasticsearch-ca.pem 파일을 제공해야 합니다.

Kibana에 대한 브라우저 액세스를 보호하려면 서버용 TLS 인증서와 개인 키를 생성해야 합니다. Kibana는 이를 사용하여 HTTP 트래픽을 암호화하고 연결하는 브라우저 또는 API 클라이언트와 신뢰를 설정합니다.

중요

TLS 인증서를 생성하거나 요청할 때는 사용자가 Kibana에 액세스하는 방식과 일치하는 유효한 주체 대체 이름(SAN)을 하나 이상 포함해야 합니다. 일반적으로 정규화된 도메인 이름(FQDN), 호스트 이름 또는 IP 주소를 사용합니다. SAN이 연결에 사용된 주소와 일치하지 않으면 대부분의 브라우저에서 인증서를 거부합니다.

다음 단계에서는 Kibana용 인증서 서명 요청(CSR)을 생성하는 방법을 안내합니다. CSR은 인증 기관(CA)에서 TLS 인증서를 발급받는 데 사용됩니다. 프로덕션 환경에서는 브라우저가 인증서를 신뢰할 수 있도록 Let’s Encrypt와 같이 신뢰할 수 있는 CA 또는 조직의 내부 CA를 사용하세요.

  1. Kibana용 CSR과 개인 키를 생성합니다.

    ./bin/elasticsearch-certutil csr -name kibana-server -dns example.com,www.example.com
    		

    CSR에는 공통 이름(CN)으로 kibana-server, SAN으로 example.com, 또 다른 SAN으로 www.example.com이 포함됩니다.

    기본적으로 이 명령은 다음 내용이 포함된 csr-bundle.zip 파일을 생성합니다.

    /kibana-server
    |_ kibana-server.csr
    |_ kibana-server.key
    		
  2. csr-bundle.zip 파일의 압축을 풀어 서명되지 않은 보안 인증서 kibana-server.csr과 암호화되지 않은 개인 키 kibana-server.key를 가져옵니다.

  3. 서명된 인증서를 발급받으려면 조직의 보안 팀 또는 인증 기관에 kibana-server.csr 인증서 서명 요청을 제출합니다. 발급된 인증서는 .crt 형식의 kibana-server.crt 파일 등 다양한 형식일 수 있습니다.

  4. kibana.yml을 열고 다음 줄을 추가하여 Kibana HTTPS 엔드포인트가 서버 인증서와 암호화되지 않은 개인 키를 사용하도록 구성합니다.

    server.ssl.certificate: $KBN_PATH_CONF/kibana-server.crt
    server.ssl.key: $KBN_PATH_CONF/kibana-server.key
    		
    참고

    $KBN_PATH_CONF에는 Kibana 구성 파일의 경로가 포함됩니다. 아카이브 배포판(zip 또는 tar.gz)을 사용하여 Kibana를 설치한 경우 기본 경로는 $KBN_HOME/config입니다. 패키지 배포판(Debian 또는 RPM)을 사용한 경우 기본 경로는 /etc/kibana입니다.

  5. 들어오는 연결에 HTTPS를 활성화하려면 kibana.yml에 다음 줄을 추가합니다.

    server.ssl.enabled: true
    		
  6. Kibana를 시작합니다.

    이러한 변경을 적용한 후에는 항상 HTTPS를 통해 Kibana에 액세스해야 합니다. 예: https://<your_kibana_host>.com:5601.

HTTPS를 활성화한 후에는 Elasticsearch 또는 Kibana와 상호 작용하는 다른 모든 클라이언트가 HTTPS를 사용하고 적절한 CA 인증서를 신뢰하도록 구성해야 합니다. 자세한 내용은 다른 Elastic Stack 구성 요소 보호HTTP 클라이언트 애플리케이션 보호를 참조하세요.

자체 관리 배포에서 TLS 암호화와 관련된 다른 작업은 자체 관리 배포에서 TLS 암호화 관리를 참조하세요.

기타 보안 기능은 클러스터, 배포 또는 프로젝트 보호를 참조하세요.