Amazon Cognito를 이용한 AWS Elasticsearch Service의 Kibana 인증
엘라스틱서치를 사용하면 ELK 스택 중 하나인 키바나에 눈이 간다. 키바나는 오픈소스 웹 기반 분석 및 시각화 도구이다. 엘라스틱서치에 저장된 문서를 다양하게 시각화해서 보여주며 이전 포스팅에서 작성했던 Elasticsearch-head보다 많은 기능을 지원한다. 다양한 방법으로 키바나 플러그인을 설치해서 사용할 수 있겠지만 오늘은 AWS Elasticsearch Service에서 키바나를 사용할 수 있도록 인증하는 법을 소개한다.
우선 AWS에서 제공하는 키바나 인증 방법을 알아보자. AWS에서는 키바나에 대한 액세스 제어를 두 가지의 방법으로 제공하고 있다. 제공하는 두 가지의 방법은 몇 번의 설정으로 키바나 사용이 가능하다. 두 가지 방법을 알아보면 다음과 같다.
- 퍼블릭 액세스
- Kibana에 대한 Amazon Cognito 인증
- 프록시 서버를 이용하거나 이용하지 않고 IP 기반 액세스 정책을 구성
- VPC 액세스
- Kibana에 대한 Amazon Cognito 인증
- 프록시 서버를 이용하거나 이용하지 않고 오픈 액세스 정책을 구성하고, 보안 그룹을 이용해 액세스를 제어
Amazon Cognito는 사용자 가입, 로그인 및 액세스 제어 기능을 추가할 수 있는 AWS의 인증 서비스이다. 페이스북, 구글 같은 SNS 인증을 통한 로그인 기능을 지원한다. 또한 다양한 플랫폼에서도 로그인 기능을 구현할 수 있도록 지원한다. 앱을 잘 만드는 데 집중하고 인증은 자기들에게 맡기라는 신조를 내세우고 있다. 별다른 옵션 없이 사용하게 되면 5만 MAU까지는 무료이고 이후로는 요금이 부과된다. AWS Elasticsearch Service는 X-PACK을 지원하지 않기 때문에 보안과 사용자 인증의 대책으로 Amazon Cognito를 사용하는 느낌이다.
이 포스팅에서는 비교적 익숙한 VPC, 보안 그룹, IP 기반 액세스 정책을 제외한 Amazon Cognito를 이용한 인증 방식으로 키바나를 사용할 수 있는 방법에 대해서 알아본다.
퍼블릭 액세스 : Amazon Cognito를 이용한 인증 방식
Amazon Cognito를 이용한 인증 방식은 크게 사용자 풀, 연동 자격 증명으로 이루어진다. 사용자 풀은 인증 대상의 풀을 만들고 사용자를 관리한다.
Amazon Cognito 메인 페이지에서 [사용자 풀 관리]를 선택하고 [사용자 풀 생성]을 클릭한다.
사용자 풀 이름을 지정하고 기본값 검토로 풀 생성을 한다. 나머지 옵션은 다음에 변경이 가능하다.
풀 생성이 끝나면 좌측 네비게이션 바에서 [도메인 이름]을 선택하고 Amazon Cognito 도메인 이름을 생성한다. 생성한 도메인은 나중에 인증 페이지로 사용된다.
다음으로 앱 클라이언트를 생성한다. 클라이언트 이름을 지정하고 생성한다.
생성한 앱 클라이언트 ID와 사용자 풀 ID는 나중에 자격 증명에서 사용되기 때문에 기억 해두는 편이 좋다.
사용자 풀의 설정은 끝났고 사용자를 생성한다.
사용자 이름은 이메일로 작성해야 되며 필수 사항이다. 초대장 전송 옵션을 체크하게 되면 사용자 생성 시 사용자의 전화번호나 이메일로 임시 암호가 전송된다. 나는 간단하게 사용자 이름과 임시 암호만 입력했다. 사용자 생성이 완료되면 다음과 같이 리스트에 나타난다. 다음에 키바나에 로그인하게 되면 비밀번호는 필수로 변경해야 사용할 수 있다.
사용자 생성 후 [자격 증명 풀]로 넘어간다. 자격 증명 풀은 자격 증명을 제공하여 기타 AWS 서비스에 대한 사용자 액세스 권한을 부여한다. 좌측 상단의 [연동 자격 증명]을 클릭한 다음 [새 자격 증명 풀 만들기]를 선택하면 다음과 같은 화면이 나타난다.
자격 증명 풀 이름을 입력하고 인증 공급자에 아까 생성한 [사용자 풀 ID]와 [앱 클라이언트 ID]를 입력한다. 사용자 풀 ID는 사용자 풀의 일반 설정에서 확인할 수 있다. 인증 공급자에서 Cognito 뿐만 아니라 다른 SNS를 포함한 인증 공급자를 선택할 수 있다. 사용자 풀 ID와 앱 클라이언트 ID를 입력했으면 풀 생성을 한다.
풀 생성을 누르면 새로운 IAM을 생성하는데 허용을 누르면 자격 증명 풀이 생성된다. 다음 페이지는 자격 연동에 대한 샘플 코드를 보여주는 것이 때문에 생략한다.
이로써 AWS Elasticsearch Service에서 키바나를 사용하기 위한 Amazon Cognito 설정은 끝났다. Amazon Cognito를 이용한 키바나 로그인 인증을 위해서 엘라스틱서치 클러스터를 생성한다.
엘라스틱서치 클러스터의 다른 설정은 자신의 상황에 맞게 진행하면 된다. VPC 액세스에서도 Amazon Cognito를 이용한 인증이 가능하지만 여기서는 가장 기본인 퍼블릭 액세스로 진행한다.
다음은 Amazon Cognito 관련 옵션에 대한 세팅을 확인한다. Amazon Cognito 인증을 활성화하고 위에서 생성한 사용자 풀과 자격 증명 풀을 선택한다.
다음으로 액세스 정책은 [하나 이상의 AWS 계정 또는 IAM 사용자에 대한 액세스 허용 또는 거부]를 선택한다.
위의 항목을 선택하면 사용자 액세스에 대한 다이얼로그가 뜬다. 예제에 나와있는 자신의 AWS 계정 ID를 [계정 ID 또는 ARN*]에 작성하고 확인을 눌러준다.
액세스 정책의 설정이 끝나면 클러스터가 생성된다. 생성까지는 약 10분 정도가 소요된다. 생성이 완료되면 엘라스틱서치의 엔드포인트와 키바나 플러그인의 엔드포인트를 확인할 수 있다.
키바나 플러그인의 엔드포인트를 클릭하면 아래와 같이 로그인 페이지가 뜬다. 위에서 설정한 도메인을 확인할 수 있다. 사용자 풀에서 생성한 계정으로 로그인을 진행하면 임시비밀번호를 변경하고 키바나 페이지로 넘어간다.
하지만 키바나 페이지가 보일 것이라는 예상과는 다르게 인증이 제대로 진행되지 않았음을 확인할 수 있다.
What happened? 에서 보여주는 메시지를 참고해 Auth_Role에 대한 액세스 정책을 아래와 같이 변경한다.
"Principal": {
"AWS": "arn:aws:sts::<your account id>:assumed-role/Cognito_<your identity pool name>Auth_Role/CognitoIdentityCredentials"
}
도메인 상태가 다시 활성화가 되면 로그인을 진행한다. 로그인하면 키바나 페이지를 확인할 수 있다. 로그인 인증이 되었기 때문에 좌측 하단에 로그아웃 버튼을 확인할 수 있다. 이로써 Amazon Cognito를 이용한 키바나 인증 사용법은 끝난다.
추가로 Amazon Cognito 때문에 잘 동작하던 엘라스틱서치가 동작하지 않을 수 있는데 이는 서명 버전 4 서명 프로세스를 통해 엘라스틱서치 클라이언트 라이브러리 쪽에 인증을 받을 수 있는 로직을 만들거나 IAM Role을 추가로 설정해줘야 하는 거 같다. (이 부분은 조금 더 확인이 필요함) 또한 사용자별 접근 권한 또한 커스터마이징 된 Role에 대한 설정이 필요하다.