티스토리 뷰

이 글은 로그 분석을 위한 아키텍처 구현과 발생한 이슈에 대한 내용을 정리하였습니다

 

들어가기에 앞서 아키텍처 구성(AWS 서비스)은 데모 수준의 사양으로 구성되었습니다

운영을 위한 아키텍처가 필요한 경우 같은 구성에서 서버의 사양은 달리 설정해야 할 것 같습니다

 

 

진행 목록
1. Create MSK
2. Create Opensearch
3. Create EC2 for Web Application(API Server) and connect MSK
4. Create EC2 for Logstash and connect both MSK and Opensearch
5. Use Opensearch Dashboard

 

1. Create MSK

 

1_1. AWS MSK 생성

AWS MSK 콘솔에서 클러스터 생성 버튼 클릭 후 아래와 같이 설정 후 생성

 

AWS MSK 클러스터 생성 시간은 보통 20~30분 이상 소요됩니다

 

### 아래 내용은 조금 길지만 꼭 읽고 주의하시고 적용도 하셔야됩니다 ###

 

위 설정 값으로 Kafka 클러스터가 생성되고 Status 값이 Active 된 경우 이 시점부터 사용 가능합니다

그리고 AWS 에서 제공하는 Service 중 일부는 사용하기 위한 인증이 필요한데

MSK 빠른 생성 방식으로 생성한 MSK 의 인증 방식은 IAM(Default) 인증입니다

인증 방식은 아래와 같이 미인증 포함 네 가지를 사용할 수 있습니다

 

  • Unauthenticated access
  • IAM role-based authentication
  • SASL/SCRAM authentication
  • TLS client authentication through AWS Certificate Manager (ACM)

Unauthenticated access 인증을 사용하지 않은 방법으로 테스트에만 적용합니다

 

IAM role-based authentication 주의해야할 IAM 인증 방법입니다

AWS MSK 에서 지원하는 IAM 인증을 사용하려면

MSK 에 연결하려는 대상 Logstash 에서

kafka 에 요청을 보내기 위해 연결할 때 사용되는 라이브러리 logstash-integration-kakfa 에서

aws-msk-iam-auth 라이브러리를 호출하여 AWS 인증 받는 로직이 필요합니다

그러나 2023-10-19 일자 기준 확인해본 결과 지원하지 않고 있었습니다

 

참조 https://github.com/korsosa/logstash-integration-kafka/pull/1

 

Add support for AWS MSK IAM authentication by korsosa · Pull Request #1 · korsosa/logstash-integration-kafka

Planning to merge this change upstream, please visit the PR in the official Logstash plugins repository for more information: logstash-plugins#126

github.com

참조 내용은 어떤 사람이 저와 같은 상황에서 IAM 인증을 위해 자기가 직접 구현했고 해당 소스 코드를

커밋 할테니 머지 해달라는 내용인데 적용되었다는 내용이 없는 상태입니다

IAM 인증을 사용하려고 여러방법을 시도하며 많은 시간을 삽질하다가 위 내용을 확인하여

다른 인증 방법을 사용하게 되었습니다

혹시내 다른 해결 방안을 알고 계시거나 찾으셨다면 댓글 부탁드립니다 :)

 

SASL/SCRAM authentication 은 id, password 형태로 AWS KMS, AWS SM 을 이용하여 인증하는 방식인데

KMS 는 데이터 암/복호화를 위한 키를 생성하는 역할을 하며

SM 은 Key, Value 형태의 값을 보관하며 KMS 를 연결하고(입력 값 암/복호화) 인증이 필요한 서비스에

적용할 수 있는 역할을 하며 이 인증 방식을 사용했습니다

 

TLS client authentication through AWS Certificate Manager (ACM) 은 HTTPS 요청에 사용하는

인증서를 AWS 에서 지원하는 서비스를 통해 생성하고 적용하는 방법입니다

이 방법을 이용하지 않아 자세한 사용 방법은 AWS 에서 직접 확인해 보셔야합니다

 

클러스터 생성 후 AWS MSK 콘솔의 사이드 메뉴 클러스터 클릭 후 생성한 클러스터 클릭

서브 탭에서 속성 탭 클릭 스크롤 중간 쯤 내린 후 보안 설정 옆에 편집 버튼 클릭

IAM 역할 기반 인증 체크 해제하고 SASL/SCRAM 인증 체크 후 변경 사항 저장 클릭

이 변경 설정 또한 적용되는데 10분 이상 소요됩니다

변경이 적용되면 클라이언트에서 접근할 때 체크할 SASL/SCRAM 인증 아이디, 패스워드를 설정해야하며

위에서 언급한 AWS KMS, AWS SM 를 생성합니다

 

1_2. AWS KMS 생성

AWS KMS 콘솔에서 키 생성 버튼 클릭하고 모든 옵션은 그대로 두고

별칭, 키 관리, 사용 권한에 대한 AWS 사용자를 설정해주고 키를 생성합니다

 

1_3. AWS SM 생성

AWS SM 콘솔에서 새 보안 암호 저장 버튼 클릭

보안 암호 유형은 다른 유형의 보안 암호 클릭, 키/값 or 일반 텍스트(JSON) 에 값 설정

암호화 키는 앞에서 KMS 생성한 키 설정(키/값 또는 일반 텍스트 메모)

이 외에 설정에서 이름만 입력하고 나머지 설정은 default 로 두고 생성을 완료합니다

생성한 보안 암호를 클릭하면 보안 암호 ARN 을 확인할 수 있고 MSK 인증 설정에서 사용됩니다(보안 암호 ARN 메모)

 

1_4. AWS MSK 보안 설정에서 SASL/SCRAM 인증의 보안 암호 설정

클러스터의 생성 및 보안 설정 변경에 대해 모두 적용되었다면

해당 MSK 의 보안 설정에서 SASL/SCRAM 인증의 보안 암호 연결 버튼을 클릭합니다

AWS SM 생성시 메모한 보안 암호 ARN 을 붙여넣고 보안 암호 연결 버튼을 클릭합니다

 

2. Create Opensearch

 

2_1. Opensearch 생성

AWS Opensearch 콘솔에서 도메인 생성 버튼 클릭

도메인 생성 방법으로 손쉬운 생성, 엔진 버전은 Opensearch_2.9(작성일 기준 최신 버전)

네트워크는 퍼블릭 액세스(테스트에서만 사용 권장), 세분화된 액세스 제어는 마스터 사용자 생성 클릭 후

마스터 사용자 이름, 마스터 암호 입력하는데 이 내용은 클랑이언트에서 접근 시 사용됩니다(마스터 이름, 암호 메모)

AWS Opensearch 도메인 생성 시간은 보통 10~15분 이상 소요됩니다

생성 완료 후 도메인 클릭시 일반 정보탭 우측에서 접근 URL 을 확인할 수 있습니다(도메인 엔드포인트 메모)

정상적으로 작동되고 있는지 Opensearch 대시보드 URL 클릭하여 해당 브라우저에

위에서 설정한 마스터 이름, 마스터 비밀번호로 로그인하여 접속되는지 확인합니다