Amazon Elasticsearch Service
개발자 가이드 (API 버전 2015-01-01)

Amazon Elasticsearch Service 도메인에 대한 VPC 지원

가상 사설 클라우드(VPC)는 사용자의 AWS 계정 전용 가상 네트워크입니다. VPC는 AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리되어 있습니다. Amazon ES 도메인과 같은 AWS 리소스를 VPC에서 시작할 수 있습니다.

Amazon ES 도메인을 VPC 안에 배치하면 인터넷 게이트웨이, NAT 디바이스 또는 VPN 연결 없이 VPC 내부에서 Amazon ES와 다른 서비스 간에 보안 통신이 가능합니다. 모든 트래픽이 AWS 클라우드 내에서 안전하게 보호됩니다. 논리적 격리로 인해 퍼블릭 엔드포인트를 사용할 때에 비해, VPC에 상주하는 도메인에는 보안 계층이 하나 추가됩니다.

VPC를 지원하기 위해 Amazon ES는 엔드포인트를 사용자의 VPC의 서브넷 1개 또는 2개에 배치합니다. 서브넷은 VPC의 IP 주소 범위입니다. 도메인에서 다중 가용 영역을 활성화한 경우 Amazon ES가 엔드포인트를 서브넷 두 개에 배치합니다. 서브넷은 동일한 리전의 서로 다른 가용 영역에 있어야 합니다. 가용 영역을 한 개만 사용하는 경우 Amazon ES가 엔드포인트를 서브넷 한 개에만 배치합니다.

다음 그림은 가용 영역 한 개에 대한 VPC 아키텍처를 보여 줍니다.

다음 그림은 가용 영역 두 개에 대한 VPC 아키텍처를 보여 줍니다.

또한 Amazon ES는 각 데이터 노드에 대해 탄력적 네트워크 인터페이스(ENI)를 VPC에 배치합니다. Amazon ES는 ENI마다 서브넷의 IPv4 주소 범위에서 프라이빗 IP 주소를 할당합니다. 또한 IP 주소에 퍼블릭 DNS 호스트 이름(도메인 엔드포인트)을 할당합니다. 퍼블릭 DNS 서비스를 사용하여 엔드포인트(즉 DNS 호스트 이름)을 데이터 노드의 적절한 IP 주소로 확인해야 합니다.

  • enableDnsSupport 옵션을 true(기본값)로 설정하여 VPC가 Amazon 제공 DNS 서버를 사용하는 경우, Amazon ES 엔드포인트 확인이 성공합니다.

  • VPC가 프라이빗 DNS 서버를 사용하고 서버가 신뢰할 수 있는 퍼블릭 DNS 서버에 도달하여 DNS 호스트 이름을 확인할 수 있는 경우에도 Amazon ES 엔드포인트 확인이 성공합니다.

IP 주소는 변경될 수 있으므로, 항상 올바른 데이터 노드에 액세스할 수 있도록 주기적으로 도메인 엔드포인트를 확인해야 합니다. DNS 확인 주기를 1분으로 설정할 것을 권장합니다. 클라이언트를 사용하는 경우, 클라이언트 내 DNS 캐시도 삭제되는지 확인해야 합니다.

참고

Amazon ES는 VPC에서 IPv6 주소를 지원하지 않습니다. IPv6가 활성화된 VPC를 사용할 수 있지만 도메인은 IPv4 주소를 사용하게 됩니다.

제한

현재, VPC에서 Amazon ES 도메인을 운영할 경우 다음과 같은 제약이 있습니다.

  • VPC에서 도메인을 시작할 수도 있고 퍼블릭 엔드포인트를 사용할 수도 있지만 두 방법을 동시에 사용할 수는 없습니다. 도메인을 만들 때 한 가지를 선택해야 합니다.

  • VPC에서 새 도메인을 시작할 경우 나중에 해당 도메인이 퍼블릭 엔드포인트를 사용하도록 변경할 수 없습니다. 반대도 마찬가지입니다. 퍼블릭 엔드포인트를 사용하여 도메인을 만들 경우 나중에 해당 도메인을 VPC 안에 배치할 수 없습니다. 대신에 새 도메인을 만들어 데이터를 마이그레이션해야 합니다.

  • 전용 테넌시를 사용하는 VPC 내에서 도메인을 실행할 수 없습니다. Default로 설정된 테넌시와 함께 VPC를 사용해야 합니다.

  • 도메인을 한 VPC에 배치한 후 다른 VPC로 이전할 수 없습니다. 하지만 서브넷 및 보안 그룹 설정을 변경할 수 있습니다.

  • VPC 도메인을 생성할 때, CIDR 블록에 10.x.x.x 또는 172.x.x.x를 사용하는 서브넷을 선택해야 합니다.

  • 퍼블릭 도메인과 비교하면, VPC 도메인은 Amazon ES 콘솔에 더 적은 정보를 표시합니다. 특히 Cluster health(클러스터 상태) 탭에는 샤드 정보가 포함되지 않으며 Indices(인덱스) 탭은 아예 표시되지 않습니다.

  • 현재 Amazon ES는 VPC 액세스 도메인에 대한 Amazon Kinesis Data Firehose와의 통합을 지원하지 않습니다. Amazon ES와 함께 이 서비스를 사용하려면 퍼블릭 액세스 도메인을 사용해야 합니다.

  • VPC에 상주하는 도메인에 대한 Kibana의 기본 설치에 액세스하려면 사용자가 VPC에 액세스할 수 있어야 합니다. 이 프로세스는 네트워크 구성에 따라 다르지만, VPN 또는 관리 네트워크 연결 또는 프록시 서버 사용이 필요할 수 있습니다. 자세한 내용은 VPC 도메인 액세스 정책에 대하여, Amazon VPC 사용 설명서Kibana에 대한 액세스 제어 단원을 참조하십시오.

VPC 도메인 액세스 정책에 대하여

Amazon ES 도메인을 VPC에 배치할 경우 강력한 내부 보안 계층이 제공됩니다. 퍼블릭 액세스를 통해 도메인을 생성할 때는 엔드포인트가 다음과 같은 형식을 따릅니다.

https://search-domain-name-identifier.region.es.amazonaws.com

"퍼블릭"이라는 단어에서 알 수 있듯이 이 엔드포인트는 사용자가 액세스 권한을 제어할 수 있더라도(제어해야 합니다) 인터넷에 연결된 디바이스라면 모두 액세스할 수 있습니다. 웹 브라우저에서 엔드포인트에 액세스하는 경우에는 Not Authorized 메시지가 수신될 수도 있지만 요청이 도메인에 전달됩니다.

VPC 액세스를 통해 도메인을 생성할 때도 엔드포인트가 아래와 같이 퍼블릭 엔드포인트와 비슷한 모습을 보입니다.

https://vpc-domain-name-identifier.region.es.amazonaws.com

하지만 웹 브라우저에서 엔드포인트에 액세스하려고 하면 요청 시간 제한에 걸릴 수도 있습니다. 따라서 기본적인 GET 요청을 실행할 때도 컴퓨터를 VPC에 연결할 수 있어야 합니다. VPC 연결은 종종 VPN, 관리형 네트워크 또는 프록시 서버의 형식을 따릅니다. 다양한 형식에 대한 자세한 내용은 Amazon VPC 사용 설명서에서 시나리오 및 예제를 참조하십시오. 개발 중심 예제는 VPC 도메인 테스트 단원을 참조하십시오.

위와 같은 연결 요건에 더하여 VPC에서는 보안 그룹을 통해 도메인 액세스를 관리할 수 있습니다. 많은 사용 사례에서 이러한 보안 기능의 조합이면 충분하며 도메인에 개방적 액세스 정책을 적용하는 데 염려가 없을 것입니다.

개방적 액세스 정책이 인터넷에 접속한 누구나 Amazon ES 도메인에 액세스하도록 허용한다는 의미는 아닙니다. 오히려 요청이 Amazon ES 도메인에 전달되어 연결된 보안 그룹이 요청을 허용하는 경우에 한해 도메인이 추가 보안 검사 없이 요청을 수락한다는 것을 의미합니다.

추가 보안 계층으로 IAM 사용자 또는 역할을 지정하는 액세스 정책 사용을 권장합니다. 이러한 정책을 적용한다는 것은 보안 그룹이 요청을 허용하고, 또한 유효한 자격 증명으로 서명되어야만 도메인이 해당 요청을 수락한다는 의미입니다.

참고

보안 그룹은 이미 IP기반 액세스 정책을 사용하므로 VPC에 상주하는 Amazon ES 도메인에 IP 기반 액세스 정책을 적용할 수는 없습니다. 퍼블릭 액세스를 사용하는 경우에도 IP 기반 정책을 사용할 수 있습니다.

VPC 도메인 테스트

VPC의 향상된 보안 기능을 통해 도메인 연결 및 기본 테스트 실행 작업을 실현할 수 있습니다. 이미 Amazon ES VPC 도메인이 있고 VPN 서버를 생성하지 않으려면 다음 프로세스를 시도합니다.

  1. 도메인의 액세스 정책에 대해 Do not require signing request with IAM credential(IAM 자격 증명으로 서명 요청이 필요하지 않음)을 선택합니다. 테스트를 마친 후에는 언제든 이 설정을 업데이트할 수 있습니다.

  2. Amazon ES 도메인과 동일한 VPC, 서브넷 및 보안 그룹에 Amazon Linux Amazon EC2 인스턴스를 생성합니다.

    이 인스턴스는 테스트용이며 거의 작업할 필요가 없으므로 t2.micro와 같은 저렴한 비용의 인스턴스 유형을 선택합니다. 인스턴스에 퍼블릭 IP 주소를 할당하고 새 키 페어를 생성하거나 기존 키 페어를 선택합니다. 새 키를 생성하는 경우 ~/.ssh 디렉터리로 다운로드합니다.

    인스턴스 생성에 대한 자세한 내용은 Amazon EC2 Linux 인스턴스 시작하기를 참조하십시오.

  3. VPC에 인터넷 게이트웨이를 추가합니다.

  4. VPC의 라우팅 테이블에서 새 라우팅을 추가합니다. 대상 주소에서 컴퓨터의 퍼블릭 IP 주소를 포함하는 CIDR 블록을 지정합니다. 대상에서 방금 생성한 인터넷 게이트웨이를 지정합니다.

    예를 들어 컴퓨터에 123.123.123.123/32를 지정하거나 컴퓨터 범위에 123.123.123.0/24를 지정할 수 있습니다.

  5. 보안 그룹의 경우 두 가지 인바운드 규칙을 지정합니다.

    유형 프로토콜 포트 범위 소스
    SSH(22) TCP(6) 22 your-cidr-block
    HTTPS(443) TCP(6) 443 your-security-group-id

    첫 번째 규칙은 SSH를 EC2 인스턴스로 가져옵니다. 두 번째는 EC2 인스턴스가 HTTPS를 통해 Amazon ES 도메인과 통신할 수 있게 허용합니다.

  6. 터미널에서 다음 명령을 실행합니다.

    ssh -i ~/.ssh/your-key.pem ec2-user@your-ec2-instance-public-ip -N -L 9200:vpc-your-amazon-es-domain.region.es.amazonaws.com:443

    이 명령은 https://localhost:9200에 대한 요청을 EC2 인스턴스를 통해 Amazon ES 도메인으로 전달하는 SSH 터널을 생성합니다. Elasticsearch는 기본적으로 포트 9200의 트래픽을 수신 대기합니다. 이 포트를 지정하면 로컬 Elasticsearch 설치를 시뮬레이션하지만 원하는 포트를 사용합니다.

    이 명령은 피드백을 제공하지 않고 무제한 실행됩니다. 이를 중단하려면 Ctrl + C를 누릅니다.

  7. 웹 브라우저에서 https://localhost:9200/_plugin/kibana/로 이동합니다. 보안 예외를 인정해야 할 수 있습니다.

    또는 curl, Postman 또는 자주 사용하는 프로그래밍 언어를 사용하여 https://localhost:9200에 요청을 보낼 수 있습니다.

    작은 정보

    인증서 불일치로 인해 curl 오류가 발생하는 경우 --insecure 플래그를 시도합니다.

이 접근 방식 대신에 도메인이 AWS Cloud9를 지원하는 리전에 있는 경우, 도메인과 동일한 VPC에 EC2 환경을 생성하고, Amazon ES 도메인 구성에 환경의 보안 그룹을 추가하고, 보안 그룹에 5단계의 HTTPS 규칙을 추가하고, AWS Cloud9에서 웹 기반 Bash를 사용하여 curl 명령을 실행할 수 있습니다.

시작하기 전에: VPC 액세스 사전 요구 사항

VPC와 새 Amazon ES 도메인 간 연결을 활성화하기 전에 다음 작업을 수행해야 합니다.

  • VPC 생성

    VPC를 만들려면, Amazon VPC 콘솔, AWS CLI를 사용하거나 또는 AWS SDK 중 하나를 사용할 수 있습니다. 자세한 내용은 VPC 만들기 단원을 참조하십시오. VPC가 이미 있는 경우에는 이 단계를 건너뛸 수 있습니다.

  • IP 주소 예약

    Amazon ES는 VPC의 서브넷에 네트워크 인터페이스를 배치하여 도메인과 VPC 간 연결을 활성화합니다. 각 네트워크 인터페이스에는 IP 주소가 연결됩니다. 서브넷에서 네트워크 인터페이스용 IP 주소를 충분히 예약해야 합니다. 자세한 내용은 VPC 서브넷에서 IP 주소 예약 단원을 참조하십시오.

VPC 만들기

VPC를 만들려면, Amazon VPC 콘솔, AWS CLI 또는 AWS SDK 중 하나를 사용할 수 있습니다. VPC에 서브넷이 한 개 있어야 하며, 다중 가용 영역을 활성화할 경우에는 두 개가 있어야 합니다. 두 서브넷은 동일한 리전의 서로 다른 가용 영역에 있어야 합니다.

다음 절차에서는 Amazon VPC 콘솔을 사용하여 퍼블릭 서브넷 1개를 포함하는 VPC를 만들고, 서브넷용 IP 주소를 예약하고, 보안 그룹을 생성하여 Amazon ES 도메인에 대한 액세스를 제어하는 방법을 설명합니다. 다른 VPC 구성은 Amazon VPC 사용 설명서시나리오 및 예제를 참조하십시오.

VPC(콘솔)를 만들려면

  1. https://console.aws.amazon.com/vpc/에서 AWS Management Console에 로그인해 Amazon VPC 콘솔을 실행합니다.

  2. 탐색 창에서 [VPC Dashboard]를 선택합니다.

  3. [Start VPC Wizard]를 선택합니다.

  4. [Select a VPC Configuration] 페이지에서 [VPC with a Single Public Subnet]을 선택합니다.

  5. [VPC with a Single Public Subnet] 페이지에서 기본값을 유지하고 [Create VPC]를 선택합니다.

  6. 나타나는 확인 메시지에서 [Close]를 선택합니다.

  7. Amazon ES 도메인에서 다중 가용 영역을 활성화하려는 경우 동일한 리전의 다른 가용 영역에 두 번째 서브넷을 생성해야 합니다. 그렇지 않으면 8단계로 건너뛰십시오.

    1. 탐색 창에서 서브넷을 선택합니다.

    2. [Create Subnet]을 선택합니다.

    3. 서브넷 생성 대화 상자에서 선택적으로 나중에 서브넷을 식별하기 위한 이름 태그를 생성할 수 있습니다.

    4. VPC에서 방금 생성한 VPC를 선택합니다.

    5. 가용 영역에서 첫 번째 서브넷과는 다른 가용 영역을 선택합니다. 두 서브넷의 가용 영역은 동일한 리전에 있어야 합니다.

    6. IPv4 CIDR 블록에서 CIDR 블록을 유지 관리 작업 시 사용하는 데 충분한 수의 Amazon ES용 IP 주소를 제공하도록 구성합니다. 자세한 내용은 VPC 서브넷에서 IP 주소 예약 단원을 참조하십시오.

      참고

      VPC 액세스를 사용하는 Amazon ES 도메인은 IPv6 주소를 지원하지 않습니다. IPv6가 활성화된 VPC를 사용할 수 있지만 ENI는 IPv4 주소를 갖습니다.

    7. [Yes, Create]를 선택합니다.

  8. 탐색 창에서 [Subnets]을 선택합니다.

  9. 서브넷 목록에서 서브넷(7단계에서 두 번째 서브넷을 생성한 경우 두 서브넷)이 있는지 찾아봅니다. Available IPv4(사용 가능한 IPv4) 열에서 충분한 수의 IP 주소가 있는지 확인합니다.

  10. 서브넷 ID와 가용 영역을 기록해 둡니다. 추후 Amazon ES 도메인을 시작하고 VPC에 Amazon EC2 인스턴스를 추가할 때 이 정보가 필요합니다.

  11. Amazon VPC 보안 그룹을 생성합니다. Amazon ES 도메인에 대한 액세스를 제어하는 데 이 보안 그룹을 사용합니다.

    1. 탐색 창에서 [Security Groups]를 선택합니다.

    2. [Create Security Group]을 선택합니다.

    3. Create Security Group(보안 그룹 생성) 대화 상자에서 이름 태그, 그룹 이름 및 설명을 입력합니다. VPC에서 VPC의 ID를 선택합니다.

    4. [Yes, Create]를 선택합니다.

  12. 보안 그룹의 네트워크 수신 규칙을 정의합니다. 이 규칙은 Amazon ES 도메인에 연결하도록 허용합니다.

    1. 탐색 창에서 Security Groups(보안 그룹)를 선택한 후 방금 생성한 보안 그룹을 선택합니다.

    2. 페이지 하단에서 Inbound Rules(인바운드 규칙) 탭을 선택합니다.

    3. 편집을 선택하고 HTTPS(443)를 선택합니다.

    4. 저장을 선택합니다.

이제 Amazon VPC에서 Amazon ES 도메인을 시작할 준비가 되었습니다.

VPC 서브넷에서 IP 주소 예약

Amazon ES는 VPC의 서브넷(다중 가용 영역을 활성화한 경우 VPC의 서브넷 두 개)에 네트워크 인터페이스를 배치하여 도메인을 VPC에 연결합니다. 각 네트워크 인터페이스에는 IP 주소가 연결됩니다. Amazon ES 도메인을 만들기 전에 VPC 서브넷에서 네트워크 인터페이스를 수용하는 데 충분한 IP 주소를 사용 가능해야 합니다.

Amazon ES에 필요한 IP 주소 수는 다음 요소에 따라 달라집니다.

  • 도메인 내 데이터 노드 수. (마스터 노드는 개수에 포함되지 않습니다.)

  • 가용 영역의 수. 가용 영역 두 개 또는 세 개를 활성화할 경우 서브넷당 한 개의 가용 영역에 필요한 IP 주소 수의 절반 또는 1/3개만 필요합니다.

기본 공식은 다음과 같습니다. 각 서브넷에 예약된 IP 주소 수 = 노드 수 곱하기 3, 나누기 가용 영역 수.

예제

  • 도메인에 10개의 데이터 노드가 있고 가용 영역이 두 개인 경우, IP 개수는 10 / 2 * 3 = 15입니다.

  • 도메인에 10개의 데이터 노드가 있고 가용 영역이 한 개인 경우, IP 개수는 10 * 3 = 30입니다.

도메인을 만들 때 Amazon ES가 IP 주소를 예약합니다. Amazon EC2 콘솔(https://console.aws.amazon.com/ec2/)의 네트워크 인스턴스 섹션에서 네트워크 인터페이스 및 연결된 IP 주소를 볼 수 있습니다. 설명 열은 네트워크 인터페이스와 연결된 Amazon ES 도메인을 보여줍니다.

작은 정보

Amazon ES 예약 IP 주소에 전용 서브넷을 생성하는 것이 좋습니다. 전용 서브넷을 사용하면 다른 애플리케이션 및 서비스와 중복을 방지하고 향후 클러스터를 확장해야 할 경우 추가 IP 주소 예약이 가능하게 할 수 있습니다. 자세히 알아보려면 VPC에서 서브넷 만들기 단원을 참조하십시오.

VPC 액세스를 위한 서비스 연결 역할

서비스 연결 역할은 서비스가 사용자 대신 리소스를 생성하고 관리할 수 있도록 권한을 위임하는 독특한 유형의 IAM 역할입니다. Amazon ES가 VPC에 액세스하고, 도메인 엔드포인트를 생성하고, VPC의 서브넷에 네트워크 인터페이스를 배치하려면 서비스 연결 역할이 필요합니다.

Amazon ES 콘솔을 사용하여 VPC에서 도메인을 만들면 Amazon ES가 자동으로 역할을 생성합니다. 이 자동 생성이 성공하려면 사용자가 iam:CreateServiceLinkedRole 작업에 대한 권한을 보유해야 합니다. 자세히 알아보려면 IAM 사용 설명서서비스 연결 역할 권한을 참조하십시오.

Amazon ES가 역할을 생성하면 IAM 콘솔을 사용하여 이 역할(AWSServiceRoleForAmazonElasticsearchService)을 볼 수 있습니다.

참고

퍼블릭 엔드포인트를 사용하는 도메인을 만들 경우, 서비스 연결 역할이 필요하지 않으므로 Amazon ES가 이 역할을 생성하지 않습니다.

이 역할 권한에 대한 모든 정보와 삭제하는 방법은 Amazon ES에 서비스 연결 역할 사용 단원을 참조하십시오.

퍼블릭 액세스에서 VPC 액세스로 마이그레이션

도메인을 만들 때 도메인이 퍼블릭 엔드포인트를 사용할지 또는 VPC에 상주할지 여부를 지정합니다. 도메인을 만든 후에는 이 옵션을 변경할 수 없습니다. 대신에 새 도메인을 만들고 수동으로 다시 인덱싱하거나 데이터를 마이그레이션할 수 있습니다. 스냅샷이 데이터를 마이그레이션하는 편리한 방법을 제공합니다. 스냅샷 생성 및 복원에 대한 자세한 내용은 Amazon Elasticsearch Service 인덱스 스냅샷 작업 단원을 참조하십시오.

Amazon VPC 문서

Amazon VPC에는 Amazon VPC를 생성하고 사용하는 방법을 설명하는 자체 문서 세트가 있습니다. 다음 표에 Amazon VPC 설명서로 연결되는 링크가 나와 있습니다.

설명 설명서
Amazon VPC 사용을 시작하는 방법 Amazon VPC 시작 안내서
AWS Management 콘솔를 통해 Amazon VPC를 사용하는 방법 Amazon VPC 사용 설명서
모든 Amazon VPC 명령의 전체 설명 Amazon EC2 명령줄 레퍼런스 (Amazon VPC 명령은 Amazon EC2 참조의 일부임)
Amazon VPC API 작업, 데이터 형식 및 오류의 전체 설명 Amazon EC2 API Reference (Amazon VPC API 작업은 Amazon EC2 참조의 일부임)
선택적인 IPsec VPN 연결 사용자 측의 게이트웨이를 구성하는 네트워크 관리자를 위한 정보 AWS Site-to-Site VPN 네트워크 관리자 안내서

Amazon Virtual Private Cloud에 대한 자세한 내용은 Amazon Virtual Private Cloud 단원을 참조하십시오.