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

Installing OpenSearch from a tarball

원문 보기 위키 갱신

출처: 문서

본문

tarball에서 OpenSearch 설치하기

tarball(또는 tar 아카이브)에서 OpenSearch를 설치하는 것은 파일 권한 및 설치 경로와 같은 설치 세부 사항을 세밀하게 제어하려는 사용자에게 적합해요.

일반적으로 tarball에서 OpenSearch 설치는 몇 가지 단계로 나눌 수 있어요:

  1. OpenSearch 다운로드 및 압축 풀기.
  2. 중요한 시스템 설정 구성하기.
    • 이 설정들은 OpenSearch 파일을 수정하기 전에 호스트에 적용돼요.
  3. (선택 사항) OpenSearch 테스트하기.
    • 사용자 지정 구성을 적용하기 전에 OpenSearch가 실행될 수 있는지 확인해요.
    • 이는 보안 없이(비밀번호 없음, 인증서 없음) 또는 패키지된 스크립트로 적용할 수 있는 데모 보안 구성을 사용하여 수행할 수 있어요.
  4. 환경에 맞게 OpenSearch 구성하기.
    • OpenSearch에 기본 설정을 적용하고 환경에서 사용을 시작해요.

tarball은 통합 JDK(Java Development Kit)를 포함하여 OpenSearch를 실행하는 데 필요한 모든 것이 포함된 자체 포함 디렉터리예요. 이 설치 방법은 대부분의 Linux 배포판과 호환돼요. OpenSearch가 테스트된 운영 체제는 호환 운영 체제를 참조하세요. 자체 Java 설치가 있고 터미널에서 환경 변수 JAVA_HOME을 설정한 경우 macOS에서도 작동해요.

이 가이드는 Linux CLI(명령줄 인터페이스)에서 작업하는 데 익숙하다고 가정해요. 명령 입력, 디렉터리 이동, 텍스트 파일 편집 방법을 이해하고 있어야 해요. 일부 예제 명령은 vi 텍스트 편집기를 참조하지만, 사용 가능한 모든 텍스트 편집기를 사용할 수 있어요. {:.note}

1단계: OpenSearch 다운로드 및 압축 풀기

  1. 적절한 tar.gz 아카이브를 OpenSearch 다운로드 페이지{:target='_blank'}에서 다운로드하거나 명령줄(예: curl 사용)을 통해 다운로드해요.

    x64 호스트의 경우 다음 명령을 사용해요:

    curl -fsSLO https://artifacts.opensearch.org/releases/bundle/opensearch/{{site.opensearch_version}}/opensearch-{{site.opensearch_version}}-linux-x64.tar.gz
    

    {% include copy.html %}

    ARM64 호스트의 경우 다음 명령을 사용해요:

    curl -fsSLO https://artifacts.opensearch.org/releases/bundle/opensearch/{{site.opensearch_version}}/opensearch-{{site.opensearch_version}}-linux-arm64.tar.gz
    

    {% include copy.html %}

  2. tarball의 내용을 추출해요.

    x64 호스트의 경우 다음 명령을 사용해요:

    tar -xvf opensearch-{{site.opensearch_version}}-linux-x64.tar.gz
    

    {% include copy.html %}

    ARM64 호스트의 경우 다음 명령을 사용해요:

    tar -xvf opensearch-{{site.opensearch_version}}-linux-arm64.tar.gz
    

    {% include copy.html %}

2단계: 중요한 시스템 설정 구성

OpenSearch를 시작하기 전에 몇 가지 중요한 시스템 설정{:target='_blank'}을 검토해야 해요.

  1. 성능 향상을 위해 호스트에서 메모리 페이징 및 스와핑을 비활성화해요.

    sudo swapoff -a
    

    {% include copy.html %}

  2. OpenSearch에서 사용할 수 있는 메모리 맵 수를 늘려요.

    # Edit the sysctl config file
    sudo vi /etc/sysctl.conf
    
    # Add a line to define the desired value
    # or change the value if the key exists,
    # and then save your changes.
    vm.max_map_count=262144
    
    # Reload the kernel parameters using sysctl
    sudo sysctl -p
    
    # Verify that the change was applied by checking the value
    cat /proc/sys/vm/max_map_count
    

    {% include copy.html %}

3단계: (선택 사항) OpenSearch 테스트

진행하기 전에 OpenSearch 설치를 테스트해야 해요. 그렇지 않으면 향후 문제가 설치 문제 때문인지 설치 후 적용한 사용자 지정 설정 때문인지 파악하기 어려울 수 있어요. 이 단계에서 OpenSearch를 테스트하는 두 가지 빠른 방법이 있어요:

  1. (보안 활성화) tar 아카이브에 포함된 데모 보안 스크립트를 사용하여 일반 구성을 적용해요.
  2. (보안 비활성화) 보안 플러그인을 수동으로 비활성화하고 사용자 지정 보안 설정을 적용하기 전에 인스턴스를 테스트해요.

데모 보안 스크립트는 OpenSearch 인스턴스에 일반 구성을 적용해요. 이 구성은 일부 환경 변수를 정의하고 자체 서명된 TLS 인증서도 적용해요. 직접 구성하려면 4단계: 환경에서 OpenSearch 설정을 참조하세요.

서비스가 제대로 구성되었는지만 확인하고 보안 설정을 직접 구성하려는 경우 보안 플러그인을 비활성화하고 암호화나 인증 없이 서비스를 시작할 수 있어요.

데모 보안 스크립트로 구성된 OpenSearch 노드는 프로덕션 환경에 적합하지 않아요. opensearch-tar-install.sh를 실행한 후 노드를 프로덕션 환경에서 사용하려면 최소한 데모 TLS 인증서를 자체 TLS 인증서로 교체하고 내부 사용자 및 비밀번호 목록을 업데이트해야 해요. 노드가 보안 요구 사항에 따라 구성되었는지 확인하려면 보안 구성을 참조하세요. {: .warning}

옵션 1: 보안 활성화 상태에서 OpenSearch 설정 테스트

  1. OpenSearch 설치의 최상위 디렉터리로 변경해요.

    cd /path/to/opensearch-{{site.opensearch_version}}
    

    {% include copy.html %}

  2. OpenSearch 2.12 이상에서는 관리자 비밀번호 요구 사항에 따라 사용자 지정 관리자 비밀번호를 설정해요. 비밀번호를 설정하지 않으면 시작 스크립트가 OpenSearch를 시작하지 않고 종료돼요:

    export OPENSEARCH_INITIAL_ADMIN_PASSWORD=<custom-admin-password>
    

    {% include copy.html %}

  3. 보안 데모 구성을 사용하여 OpenSearch 시작 스크립트를 실행해요.

    ./opensearch-tar-install.sh
    

    {% include copy.html %}

  4. 다른 터미널 세션을 열고 서버에 요청을 보내 OpenSearch가 실행 중인지 확인해요. TLS 인증서가 자체 서명되었기 때문에 --insecure 플래그를 사용해야 한다는 점에 유의하세요.

    • 9200 포트로 요청을 보내요:

      curl -X GET https://localhost:9200 -u 'admin:<custom-admin-password>' --insecure
      

      {% include copy.html %}

      다음과 같은 응답을 받게 돼요:

      {
         "name" : "hostname",
         "cluster_name" : "opensearch",
         "cluster_uuid" : "6XNc9m2gTUSIoKDqJit0PA",
         "version" : {
            "distribution" : "opensearch",
            "number" : <version>,
            "build_type" : <build-type>,
            "build_hash" : <build-hash>,
            "build_date" : <build-date>,
            "build_snapshot" : false,
            "lucene_version" : <lucene-version>,
            "minimum_wire_compatibility_version" : "7.10.0",
            "minimum_index_compatibility_version" : "7.0.0"
         },
         "tagline" : "The OpenSearch Project: https://opensearch.org/"
      }
      
    • 플러그인 엔드포인트를 쿼리해요:

      curl -X GET https://localhost:9200/_cat/plugins?v -u 'admin:<custom-admin-password>' --insecure
      

      {% include copy.html %}

      응답은 다음과 같아요:

      name     component                            version
      hostname opensearch-alerting                  {{site.opensearch_version}}
      hostname opensearch-anomaly-detection         {{site.opensearch_version}}
      hostname opensearch-asynchronous-search       {{site.opensearch_version}}
      hostname opensearch-cross-cluster-replication {{site.opensearch_version}}
      hostname opensearch-custom-codecs             {{site.opensearch_version}}
      hostname opensearch-flow-framework            {{site.opensearch_version}}
      hostname opensearch-geospatial                {{site.opensearch_version}}
      hostname opensearch-index-management          {{site.opensearch_version}}
      hostname opensearch-job-scheduler             {{site.opensearch_version}}
      hostname opensearch-knn                       {{site.opensearch_version}}
      hostname opensearch-ltr                       {{site.opensearch_version}}
      hostname opensearch-ml                        {{site.opensearch_version}}
      hostname opensearch-neural-search             {{site.opensearch_version}}
      hostname opensearch-notifications             {{site.opensearch_version}}
      hostname opensearch-notifications-core        {{site.opensearch_version}}
      hostname opensearch-observability             {{site.opensearch_version}}
      hostname opensearch-performance-analyzer      {{site.opensearch_version}}
      hostname opensearch-reports-scheduler         {{site.opensearch_version}}
      hostname opensearch-search-relevance          {{site.opensearch_version}}
      hostname opensearch-security                  {{site.opensearch_version}}
      hostname opensearch-security-analytics        {{site.opensearch_version}}
      hostname opensearch-skills                    {{site.opensearch_version}}
      hostname opensearch-sql                       {{site.opensearch_version}}
      hostname opensearch-system-templates          {{site.opensearch_version}}
      hostname opensearch-ubi                       {{site.opensearch_version}}
      hostname query-insights                       {{site.opensearch_version}}
      
  5. 원래 터미널 세션으로 돌아가서 CTRL + C를 눌러 프로세스를 중지해요.

옵션 2: 보안 비활성화 상태에서 OpenSearch 설정 테스트

  1. 구성 파일을 열어요.

    vi /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    

    {% include copy.html %}

  2. 보안 플러그인을 비활성화하려면 다음 줄을 추가해요:

    plugins.security.disabled: true
    

    {% include copy.html %}

  3. 변경 사항을 저장하고 파일을 닫아요.

  4. OpenSearch 설치의 최상위 디렉터리로 변경하고 OpenSearch를 시작해요:

    cd /path/to/opensearch-{{site.opensearch_version}}
    ./bin/opensearch
    

    {% include copy.html %}

  5. 다른 터미널 세션을 열고 서버에 요청을 보내 OpenSearch가 실행 중인지 확인해요. 보안 플러그인이 비활성화되었으므로 HTTPS 대신 HTTP를 사용하여 명령을 보내게 돼요.

    • 9200 포트로 요청을 보내요.

      curl -X GET http://localhost:9200
      

      {% include copy.html %}

      다음과 같은 응답을 받게 돼요:

      {
         "name" : "hostname",
         "cluster_name" : "opensearch",
         "cluster_uuid" : "6XNc9m2gTUSIoKDqJit0PA",
         "version" : {
            "distribution" : "opensearch",
            "number" : <version>,
            "build_type" : <build-type>,
            "build_hash" : <build-hash>,
            "build_date" : <build-date>,
            "build_snapshot" : false,
            "lucene_version" : <lucene-version>,
            "minimum_wire_compatibility_version" : "7.10.0",
            "minimum_index_compatibility_version" : "7.0.0"
         },
         "tagline" : "The OpenSearch Project: https://opensearch.org/"
      }
      
    • 플러그인 엔드포인트를 쿼리해요.

      curl -X GET http://localhost:9200/_cat/plugins?v
      

      {% include copy.html %}

      응답은 다음과 같아요:

      name     component                            version
      hostname opensearch-alerting                  {{site.opensearch_version}}
      hostname opensearch-anomaly-detection         {{site.opensearch_version}}
      hostname opensearch-asynchronous-search       {{site.opensearch_version}}
      hostname opensearch-cross-cluster-replication {{site.opensearch_version}}
      hostname opensearch-custom-codecs             {{site.opensearch_version}}
      hostname opensearch-flow-framework            {{site.opensearch_version}}
      hostname opensearch-geospatial                {{site.opensearch_version}}
      hostname opensearch-index-management          {{site.opensearch_version}}
      hostname opensearch-job-scheduler             {{site.opensearch_version}}
      hostname opensearch-knn                       {{site.opensearch_version}}
      hostname opensearch-ltr                       {{site.opensearch_version}}
      hostname opensearch-ml                        {{site.opensearch_version}}
      hostname opensearch-neural-search             {{site.opensearch_version}}
      hostname opensearch-notifications             {{site.opensearch_version}}
      hostname opensearch-notifications-core        {{site.opensearch_version}}
      hostname opensearch-observability             {{site.opensearch_version}}
      hostname opensearch-performance-analyzer      {{site.opensearch_version}}
      hostname opensearch-reports-scheduler         {{site.opensearch_version}}
      hostname opensearch-search-relevance          {{site.opensearch_version}}
      hostname opensearch-security                  {{site.opensearch_version}}
      hostname opensearch-security-analytics        {{site.opensearch_version}}
      hostname opensearch-skills                    {{site.opensearch_version}}
      hostname opensearch-sql                       {{site.opensearch_version}}
      hostname opensearch-system-templates          {{site.opensearch_version}}
      hostname opensearch-ubi                       {{site.opensearch_version}}
      hostname query-insights                       {{site.opensearch_version}}
      

4단계: 사용자 환경에서 OpenSearch 설정하기

OpenSearch를 처음 사용하는 사용자는 서비스를 시작하기 위해 권장 설정 목록을 원할 수 있어요. 기본적으로 OpenSearch는 네트워크 인터페이스에 바인딩되지 않으며 외부 호스트에서 접근할 수 없어요. 또한 보안 설정은 정의되지 않거나(새로운 설치) opensearch-tar-install.sh를 호출하여 보안 데모 스크립트를 실행한 경우 기본 사용자 이름과 비밀번호로 채워져요. 다음 권장 사항을 통해 사용자는 OpenSearch를 네트워크 인터페이스에 바인딩하고, TLS 인증서를 생성 및 서명하고, 기본 인증을 구성할 수 있어요.

다음 권장 설정을 통해 다음을 수행할 수 있어요:

  • OpenSearch를 호스트의 IP 또는 네트워크 인터페이스에 바인딩해요.
  • 초기 및 최대 JVM 힙 크기를 설정해요.
  • 번들된 JDK를 가리키는 환경 변수를 정의해요.
  • 자체 TLS 인증서를 구성해요. 타사 인증 기관(CA)이 필요하지 않아요.
  • 사용자 지정 비밀번호로 관리자 사용자를 생성해요.

opensearch.yml에 동일한 설정이 두 번 이상 포함되어 있으면 OpenSearch가 Duplicate Object property 오류와 함께 시작되지 않아요. 옵션 1 또는 옵션 2를 사용하여 OpenSearch를 테스트한 경우 새로 추출한 tarball에서 시작하거나 다음 단계에서 추가하는 설정을 opensearch.yml에서 제거하세요. 여기에는 plugins.security.disabled 및 보안 데모 스크립트가 추가한 plugins.security 설정이 포함돼요. 진행하기 전에 보안 구성을 참조하세요. {:.note}

구성 파일을 수정하기 전에 항상 변경 사항을 적용하기 전에 백업 복사본을 저장하는 것이 좋아요. 백업 파일은 잘못된 구성으로 인해 발생한 문제를 되돌리는 데 사용할 수 있어요. {:.tip}

  1. opensearch.yml을 여세요.

    vi /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    

    {% include copy.html %}

  2. 다음 줄을 추가하세요.

    # Bind OpenSearch to the correct network interface. Use 0.0.0.0
    # to include all available interfaces or specify an IP address
    # assigned to a specific interface.
    network.host: 0.0.0.0
    
    # Unless you have already configured a cluster, you should set
    # discovery.type to single-node, or the bootstrap checks will
    # fail when you try to start the service.
    discovery.type: single-node
    
    # If you previously disabled the Security plugin in opensearch.yml,
    # be sure to re-enable it. Otherwise you can skip this setting.
    plugins.security.disabled: false
    

    {% include copy.html %}

  3. 변경 사항을 저장하고 파일을 닫으세요.

  4. 초기 및 최대 JVM 힙 크기를 지정하세요.

    1. jvm.options를 여세요.

      vi /path/to/opensearch-{{site.opensearch_version}}/config/jvm.options
      

      {% include copy.html %}

    2. 초기 및 최대 힙 크기 값을 수정하세요. 시작점으로 사용 가능한 시스템 메모리의 절반으로 설정해야 해요. 전용 호스트의 경우 워크플로 요구 사항에 따라 이 값을 늘릴 수 있어요.

      • 예를 들어 호스트 머신에 8GB의 메모리가 있는 경우 초기 및 최대 힙 크기를 4GB로 설정할 수 있어요.
        -Xms4g
        -Xmx4g
        
        {% include copy.html %}
    3. 변경 사항을 저장하고 파일을 닫으세요.

  5. 포함된 JDK의 위치를 지정하세요.

    export OPENSEARCH_JAVA_HOME=/path/to/opensearch-{{site.opensearch_version}}/jdk
    

    {% include copy.html %}

TLS 구성

TLS 인증서는 클라이언트가 호스트의 신원을 확인하고 클라이언트와 호스트 간의 트래픽을 암호화할 수 있도록 하여 클러스터에 추가 보안을 제공해요. 자세한 내용은 Security plugin 설명서에 포함된 TLS 인증서 구성 및 인증서 생성을 참조하세요. 개발 환경에서 수행하는 작업의 경우 자체 서명된 인증서로 충분한 경우가 많아요. 이 섹션에서는 자체 TLS 인증서를 생성하고 OpenSearch 호스트에 적용하는 데 필요한 기본 단계를 안내해요.

  1. OpenSearch config 디렉터리로 이동하세요. 여기에 인증서가 저장돼요.

    cd /path/to/opensearch-{{site.opensearch_version}}/config/
    

    {% include copy.html %}

  2. 루트 인증서를 생성하세요. 이 인증서는 다른 인증서를 서명하는 데 사용돼요.

    # Create a private key for the root certificate
    openssl genrsa -out root-ca-key.pem 2048
    
    # Use the private key to create a self-signed root certificate. Be sure to
    # replace the arguments passed to -subj so they reflect your specific host.
    openssl req -new -x509 -sha256 -key root-ca-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=ROOT" -out root-ca.pem -days 730
    

    {% include copy.html %}

  3. 다음으로 관리자 인증서를 생성하세요. 이 인증서는 Security plugin과 관련된 관리 작업을 수행하기 위해 상승된 권한을 얻는 데 사용돼요.

    # Create a private key for the admin certificate.
    openssl genrsa -out admin-key-temp.pem 2048
    
    # Convert the private key to PKCS#8.
    openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out admin-key.pem
    
    # Create the CSR. A common name (CN) of "A" is acceptable because this certificate is
    # used for authenticating elevated access and is not tied to a host.
    openssl req -new -key admin-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=A" -out admin.csr
    
    # Sign the admin certificate with the root certificate and private key you created earlier.
    openssl x509 -req -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem -days 730
    

    {% include copy.html %}

  4. 구성 중인 노드의 인증서를 생성하세요.

    # Create a private key for the node certificate.
    openssl genrsa -out node1-key-temp.pem 2048
    
    # Convert the private key to PKCS#8.
    openssl pkcs8 -inform PEM -outform PEM -in node1-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out node1-key.pem
    
    # Create the CSR and replace the arguments passed to -subj so they reflect your specific host.
    # The CN should match a DNS A record for the host--do not use the hostname.
    openssl req -new -key node1-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=node1.dns.a-record" -out node1.csr
    
    # Create an extension file that defines a SAN DNS name for the host. This
    # should match the DNS A record of the host.
    echo 'subjectAltName=DNS:node1.dns.a-record' > node1.ext
    
    # Sign the node certificate with the root certificate and private key that you created earlier.
    openssl x509 -req -in node1.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node1.pem -days 730 -extfile node1.ext
    

    {% include copy.html %}

  5. 더 이상 필요하지 않은 임시 파일을 제거하세요.

    rm *temp.pem *csr *ext
    

    {% include copy.html %}

  6. 인증서 생성에 설명된 대로 이러한 인증서를 opensearch.yml에 추가하세요. 고급 사용자는 스크립트를 사용하여 설정을 추가할 수도 있어요.

    #! /bin/bash
    
    # Before running this script, make sure to replace the /path/to your OpenSearch directory,
    # and remember to replace the CN in the node's distinguished name with a real
    # DNS A record.
    
    echo "plugins.security.ssl.transport.pemcert_filepath: /path/to/opensearch-{{site.opensearch_version}}/config/node1.pem" | sudo tee -a /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    echo "plugins.security.ssl.transport.pemkey_filepath: /path/to/opensearch-{{site.opensearch_version}}/config/node1-key.pem" | sudo tee -a /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    echo "plugins.security.ssl.transport.pemtrustedcas_filepath: /path/to/opensearch-{{site.opensearch_version}}/config/root-ca.pem" | sudo tee -a /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    echo "plugins.security.ssl.http.enabled: true" | sudo tee -a /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    echo "plugins.security.ssl.http.pemcert_filepath: /path/to/opensearch-{{site.opensearch_version}}/config/node1.pem" | sudo tee -a /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    echo "plugins.security.ssl.http.pemkey_filepath: /path/to/opensearch-{{site.opensearch_version}}/config/node1-key.pem" | sudo tee -a /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    echo "plugins.security.ssl.http.pemtrustedcas_filepath: /path/to/opensearch-{{site.opensearch_version}}/config/root-ca.pem" | sudo tee -a /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    echo "plugins.security.allow_default_init_securityindex: true" | sudo tee -a /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    echo "plugins.security.authcz.admin_dn:" | sudo tee -a /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    echo "  - 'CN=A,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA'" | sudo tee -a /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    echo "plugins.security.nodes_dn:" | sudo tee -a /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    echo "  - 'CN=node1.dns.a-record,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA'" | sudo tee -a /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    echo "plugins.security.audit.type: internal_opensearch" | sudo tee -a /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    echo "plugins.security.enable_snapshot_restore_privilege: true" | sudo tee -a /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    echo "plugins.security.check_snapshot_restore_write_privileges: true" | sudo tee -a /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    echo "plugins.security.restapi.roles_enabled: [\"all_access\", \"security_rest_api_access\"]" | sudo tee -a /path/to/opensearch-{{site.opensearch_version}}/config/opensearch.yml
    

    {% include copy.html %}

  7. (선택 사항) 자체 서명된 루트 인증서에 대한 신뢰를 추가하세요.

    # Copy the root certificate to the correct directory
    sudo cp /path/to/opensearch-{{site.opensearch_version}}/config/root-ca.pem /etc/pki/ca-trust/source/anchors/
    
    # Add trust
    sudo update-ca-trust
    

    {% include copy.html %}

사용자 구성

OpenSearch는 다양한 방식으로 사용자를 정의하고 인증해요. 추가 백엔드 인프라가 필요하지 않은 한 가지 방법은 internal_users.yml에서 수동으로 사용자를 구성하는 거예요. 사용자 구성에 대한 자세한 내용은 YAML 파일을 참조하세요. 다음 단계에서는 admin 사용자를 제외한 모든 데모 사용자를 제거하고 스크립트를 사용하여 admin 기본 비밀번호를 변경하는 방법을 설명해요.

  1. Security plugin 스크립트를 실행 가능하게 만드세요.

    chmod 755 /path/to/opensearch-{{site.opensearch_version}}/plugins/opensearch-security/tools/*.sh
    

    {% include copy.html %}

  2. hash.sh를 실행하여 새 비밀번호를 생성하세요.

    • JDK 경로가 정의되지 않은 경우 이 스크립트는 실패해요.

      # Example output if a JDK isn't found...
      $ ./hash.sh
      **************************************************************************
      ** This tool will be deprecated in the next major release of OpenSearch **
      ** https://github.com/opensearch-project/security/issues/1755           **
      **************************************************************************
      which: no java in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin)
      WARNING: nor OPENSEARCH_JAVA_HOME nor JAVA_HOME is set, will use 
      ./hash.sh: line 35: java: command not found
      

      {% include copy.html %}

    • 문제를 방지하려면 스크립트를 호출할 때 환경 변수를 선언하세요.

      OPENSEARCH_JAVA_HOME=/path/to/opensearch-{{site.opensearch_version}}/jdk ./hash.sh
      

      {% include copy.html %}

    • 프롬프트에 원하는 비밀번호를 입력하고 출력 해시를 기록해 두세요.

  3. internal_users.yml을 여세요.

    vi /path/to/opensearch-{{site.opensearch_version}}/config/opensearch-security/internal_users.yml
    

    {% include copy.html %}

  4. admin을 제외한 모든 데모 사용자를 제거하고 이전 단계에서 hash.sh가 제공한 출력으로 해시를 바꾸세요. 파일은 다음 예제와 유사해야 해요.

    ---
    # This is the internal user database
    # The hash value is a bcrypt hash and can be generated with plugin/tools/hash.sh
    
    _meta:
       type: "internalusers"
       config_version: 2
    
    # Define your internal users here
    
    admin:
       hash: "$2y$1EXAMPLEQqwS8TUcoEXAMPLEeZ3lEHvkEXAMPLERqjyh1icEXAMPLE."
       reserved: true
       backend_roles:
       - "admin"
       description: "Admin user"
    

    {% include copy.html %}

변경 사항 적용

이제 TLS 인증서가 설치되고 데모 사용자가 제거되었거나 새 비밀번호가 할당되었으므로 마지막 단계는 구성 변경 사항을 적용하는 거예요. 이 마지막 구성 단계에서는 OpenSearch가 호스트에서 실행되는 동안 securityadmin.sh를 호출해야 해요.

  1. OpenSearch를 시작하세요. securityadmin.sh가 변경 사항을 적용하려면 OpenSearch가 실행 중이어야 해요.
    # Change directories
    cd /path/to/opensearch-{{site.opensearch_version}}/bin
    
    # Run the service in the foreground
    ./opensearch
    
    {% include copy.html %}
  2. 호스트와의 별도 터미널 세션을 열고 securityadmin.sh가 포함된 디렉터리로 이동하세요.
    # Change to the correct directory
    cd /path/to/opensearch-{{site.opensearch_version}}/plugins/opensearch-security/tools
    
    {% include copy.html %}
  3. 스크립트를 호출하세요. 전달해야 하는 인수에 대한 정의는 securityadmin.sh를 사용하여 변경 사항 적용을 참조하세요.
    # You can omit the environment variable if you declared this in your $PATH.
    OPENSEARCH_JAVA_HOME=/path/to/opensearch-{{site.opensearch_version}}/jdk ./securityadmin.sh -cd /path/to/opensearch-{{site.opensearch_version}}/config/opensearch-security/ -cacert /path/to/opensearch-{{site.opensearch_version}}/config/root-ca.pem -cert /path/to/opensearch-{{site.opensearch_version}}/config/admin.pem -key /path/to/opensearch-{{site.opensearch_version}}/config/admin-key.pem -icl -nhnv
    
    {% include copy.html %}
  4. 실행 중인 OpenSearch 프로세스를 중지하고 다시 시작하여 변경 사항을 적용하세요.

서비스가 실행 중인지 확인

이제 OpenSearch가 사용자 지정 TLS 인증서와 기본 인증을 위한 보안 사용자와 함께 호스트에서 실행되고 있어요. 다른 호스트에서 OpenSearch 노드로 API 요청을 보내 외부 연결을 확인할 수 있어요.

이전 테스트에서는 localhost로 요청을 보냈어요. 이제 TLS 인증서가 적용되었고 새 인증서가 호스트의 실제 DNS 레코드를 참조하므로 localhost로 요청하면 공통 이름(CN) 확인에 실패하고 인증서가 유효하지 않은 것으로 간주돼요. 대신 인증서를 생성할 때 지정한 주소로 요청을 보내야 해요.

요청을 보내기 전에 클라이언트에 루트 인증서에 대한 신뢰를 추가해야 해요. 신뢰를 추가하지 않으면 cURL이 CN 및 루트 인증서 유효성 검사를 무시하도록 -k 옵션을 사용해야 해요. {:.tip}

curl https://your.host.address:9200 -u admin:yournewpassword -k

{% include copy.html %}

다음 응답을 받을 거예요:

{
  "name" : "hostname-here",
  "cluster_name" : "opensearch",
  "cluster_uuid" : "efC0ANNMQlGQ5TbhNflVPg",
  "version" : {
    "distribution" : "opensearch",
    "number" : "{{site.opensearch_version}}",
    "build_type" : "tar",
    "build_hash" : <build-hash>,
    "build_date" : <build-date>,
    "build_snapshot" : false,
    "lucene_version" : <lucene-version>,
    "minimum_wire_compatibility_version" : "2.19.0",
    "minimum_index_compatibility_version" : "2.0.0"
  },
  "tagline" : "The OpenSearch Project: https://opensearch.org/"
}

systemd를 사용하여 OpenSearch를 서비스로 실행

이 섹션에서는 OpenSearch용 서비스를 생성하고 systemd에 등록하는 방법을 안내해요. 서비스가 정의된 후에는 systemctl 명령을 사용하여 OpenSearch 서비스를 활성화, 시작 및 중지할 수 있어요. 이 섹션의 명령은 OpenSearch가 /opt/opensearch에 설치된 환경을 반영하며 설치 경로에 따라 변경해야 해요.

다음 구성은 비프로덕션 환경에서 테스트하는 데만 적합해요. 프로덕션 환경에서는 다음 구성을 사용하지 않는 것이 좋아요. 호스트에서 systemd로 관리되는 서비스로 OpenSearch를 실행하려면 RPM 배포판으로 OpenSearch를 설치해야 해요. tarball 설치는 특정 설치 경로, 사용자, 역할 또는 권한을 정의하지 않아요. 호스트 환경을 적절히 보호하지 않으면 예기치 않은 동작이 발생할 수 있어요. {: .warning}

  1. OpenSearch 서비스의 사용자를 생성하세요.

    sudo adduser --system --shell /bin/bash -U --no-create-home opensearch
    

    {% include copy.html %}

  2. 사용자를 opensearch 사용자 그룹에 추가하세요.

    sudo usermod -aG opensearch $USER
    

    {% include copy.html %}

  3. 파일 소유자를 opensearch로 변경하세요. OpenSearch 파일이 다른 디렉터리에 있는 경우 경로를 변경해야 해요.

    sudo chown -R opensearch /opt/opensearch/
    

    {% include copy.html %}

  4. 서비스 파일을 생성하고 편집을 위해 여세요.

    sudo vi /etc/systemd/system/opensearch.service
    

    {% include copy.html %}

  5. 다음 예제 서비스 구성을 입력하세요. OpenSearch 파일이 다른 디렉터리에 있는 경우 경로 참조를 변경해야 해요.

    [Unit]
    Description=OpenSearch
    Wants=network-online.target
    After=network-online.target
    
    [Service]
    Type=forking
    RuntimeDirectory=data
    
    WorkingDirectory=/opt/opensearch
    ExecStart=/opt/opensearch/bin/opensearch -d
    
    User=opensearch
    Group=opensearch
    StandardOutput=journal
    StandardError=inherit
    LimitNOFILE=65535
    LimitNPROC=4096
    LimitAS=infinity
    LimitFSIZE=infinity
    TimeoutStopSec=0
    KillSignal=SIGTERM
    KillMode=process
    SendSIGKILL=no
    SuccessExitStatus=143
    TimeoutStartSec=75
    
    [Install]
    WantedBy=multi-user.target
    

    {% include copy.html %}

  6. systemd 관리자 구성을 다시 로드하세요.

    sudo systemctl daemon-reload
    

    {% include copy.html %}

  7. OpenSearch 서비스를 활성화하세요.

    sudo systemctl enable opensearch.service
    

    {% include copy.html %}

  8. OpenSearch 서비스를 시작하세요.

    sudo systemctl start opensearch
    

    {% include copy.html %}

  9. 서비스가 실행 중인지 확인하세요.

    sudo systemctl status opensearch
    

    {% include copy.html %}

관련 문서

더 알아보기 (Learn more)