AWS/Logging

Amazon Elasticsearch Service(Amazon ES) - VPC 액세스(권장)

TTwY 2020. 7. 30. 14:41
728x90
반응형

Amazon Elasticsearch Service(Amazon ES)는 AWS 클라우드에서 Elasticsearch 클러스터를 쉽게 배포, 운영 및 조정할 수 있는 관리형 서비스입니다. Elasticsearch는 로그 분석, 실시간 애플리케이션 모니터링, 클릭 스트림 분석 같은 사용 사례를 위한 인기 있는 오픈 소스 검색 및 분석 엔진입니다. Amazon ES를 사용하면 Elasticsearch API에 바로 액세스해 기존 코드 및 애플리케이션을 서비스를 통해 원활하게 사용할 수 있습니다.

 

이번 글에서는 Amazon Elasticsearh Service(Amazon ES) 구성글입니다.

Amazon ES를 생성하면 액세스 및 보안 구성에서 VPC 액세스(권장)과 퍼블릭 액세스 방식이 있는대 VPC 액세스(권장)으로 구성하게 되면 가장 큰 이점은 보안입니다. 퍼블릭 액세스 방식은 결국 퍼블릭에 Amazon ES가 노출되게 됨을 의미합니다.

 

AWS 공식 Doc에도 VPC 액세스(권장)에 대한 강점이 나와있습니다.

(https://docs.aws.amazon.com/ko_kr/elasticsearch-service/latest/developerguide/es-vpc.html#es-vpc-security)

 

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

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

docs.aws.amazon.com

구성도

빨간색 박스에 있는 Amazon ES와 Proxy Server를 두어 VPC 액세스(권장) 방식으로 구성을 해보도록 하겠습니다.

 

Amazon Elasticsearch Service (Amazon ES) 생성

 

Amazon Elasticsearch Service를 클릭하면 Amazon Elasticsearch Service 대시보드가 나타납니다. 새 도메인 생성을 클릭하여 Amazon ES를 생성합니다.

 

배포 유형은 개발 및 테스트, 버전은 가장 최신 버전인 7.7 (latest)로 구성 진행하도록 하겠습니다.

 

도메인 이름을 작성해주고 테스트 용으로 구성을 하기 때문에 인스턴스 유형은 프리 티어를 사용할 수 있는 t2.small.elasticsearch 인스턴스를 이용하여 구성토록 하겠습니다. 데이터 노드, 데이터 노드 스토리지, 전용 마스터 노드는 디폴트 값을 그대로 두고 넘어가도록 하겠습니다.

액세스 및 보안 구성에서 이번 테스트 구성은 Private 환경에 두고 진행을 할 것이기 때문에 VPC 액세스(권장)을 선택하고 아래의 VPC, 서브넷, 보안그룹을 Private 환경에 맞게 선택하여 진행합니다.

액세스 정책에서 도메인 액세스 정책에서 AWS 계정, IAM, IPv4 주소 또는 CIDR로 액세스를 허용하거나 거부 할 수 있으니 본인의 용도에 맞게 설정을 해주시면 됩니다. 이번 테스트 과정에서는 따로 설정하지 않고 ALL(*)로 두어 진행 하도록 하겠습니다.

검토에서 설정한 내용에 이상이 없는지 확인 후 확인 버튼을 클릭하여 Elasticsearch 도메인 생성을 진행하겠습니다.

아래와 같이 도메인 상태가 로드 중으로 나오며 생성이 완료 되면 VPC 앤드포인트와 Kibana의 경로가 표시 됩니다.(생성 시간 약 10분 정도 소요)

도메인 상태가 활성화가 되면 아래와 같이 VPC 엔드포인트오 Kibana 경로가 표시됩니다. 하지만 현재 VPC 액세스로 설정하여 Private로 설정되어 있기 때문에 외부에서 접근 할 수 있는 방법이 없습니다.

외부(퍼블릭 환경)에서 이 ES나 Kibana에 접근을 하기 위하여 nginx의 (리버스)프록시 기능을 이용하여 외부에서 접근을 할 수 있도록 설정해보도록 하겠습니다.

 

nginx (리버스)프록시 구성

외부에서 ES 또는 Kibana에 접근하기 위해서 퍼블릭 구간에 EC2 인스턴스를 생성해서 해당 EC2 인스턴스에 nginx를 설치하고 nginx의 설정파일을 수정하여 (리버스)프록시 할 수 있도록 구성해보도록 하겠습니다.

 

EC2인스턴스(Amazon linux 2)에 nginx 설치는 이전 게시글에 작성하였으니, 아래 게시글을 참고하시기 바랍니다.

https://longtermsad.tistory.com/11

 

Amazon Linux 2에 nginx 설치

Amazon Linux 2 OS의 EC2에서 nginx 설치하는 방법에 대해서 알아보겠습니다. Amazon Linux 2에서는 yum을 통한 nginx 설치가 지원되지 않습니다. 일반적인 yum 을 통한 설치 시 에러가 발생하는 것을 볼 수 있��

longtermsad.tistory.com

퍼블릭에 생성한 nginx ec2에 ssh 접속을 합니다.

nginx가 설치가 완료된 ec2 인스턴스 터미널에서 다음과 같은 명령어로 프록시 서버 설정을 진행 할 겁니다.

$ sudo vi /etc/nginx/nginx.conf

 

vim에서 Server 안에 location 코드를 추가해 줍니다.

location / {
    proxy_pass es의 vpc 앤드포인트;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
}

설정을 추가 후 :wq 입력하여 빠져나옵니다.

설정 반영을 위해 nginx를 재시작을 해줍니다.

sudo service nginx restart

nginx 서버 Public IPv4 IP를 통하여 접근합니다.

nginx EC2 Public IPv4
52.78.14.244

위와 같은 화면이 나오면 Amazon ES가 잘 설치되어 있는것이며, 위와 같이 접근하면 Amazon ES의 정보를 볼 수 있습니다.

Amazon ES를 설치하면 같이 제공되는 kibana에도 접속 하도록 하겠습니다.

nginx EC2 Public IPv4/_plugin/kibana
52.78.14.244/_plugin/kibana

위와 같이 Kibana로도 접속이 잘 되는 것을 확인할 수 있습니다.

Try our sample data로 kibana 시각화 연습을 진행하여도 되고, Amazon ES로 로그 데이터 등의 데이터 전송 셋팅을 끝낸 후에 kibana에서 create index pattern을 설정하여 시각화를 진행해 볼 수도 있습니다.

 

Amazon ES에 데이터 전송 연결은 추후 기회가 된다면 글을 작성할 수 있도록 하겠습니다.

이번 글에서 추가로 말씀드릴 점은 지금 환경은 TEST를 위한 구성이었기 때문에 액세스 정책에 대하여 ALL(*)로 Open 설정!! 한 것을 운영이나 보안이 필요한 환경에서는 해당 요구사하에 맞는 액세스 정책을 꼭 적용한 후 서비스를 제공해야 한다는 것을 잊지 마시길!!!

 

감사합니다.

728x90
반응형