Amazon에서 IAM과 함께 MSK 사용하기
IAM 자격 증명 정책
아마존 서비스에서 IAM 자격증명 정책을 이용하면 Access / denied 조건을 지정하여 작업할 수 있다.
그 지정 대상으로는 특정 행위, 자원, 키 등이 존재한다. 이 지정 작업은 JSON 기반으로 돌아가는데, 가령 예를 들어서 다음과 같이 설정할 수 있는 것이다 ( Amanzon Managed Streaming for Apache Kafka 참조)
// ex1
"Action": ["kafka:action1", "kafka:action2"]
// ex2
"Action": "kafka:Describe*"
// ex3
"Resource": "*"
이제 A라는 IAM역할자에게 특정 권한만 부여하고자 한다면 이 사람에게 리소스 기반 정책을 주면 된다. '리소스 기반 정책'이라는 것은 특정 AWS 리소스에 대한 접근 권한을 제어하는 것이며, 예를 들어 가장 흔히 사용하는 S3 버킷의 리소스 기반 정책을 사용함으로써 누가 버킷에 접근할 수 있는지 설정하는 것이다.
IAM/TLS 인증이 활성화된 서버와의 연결 준비하기
IAM 인증과 TLS 암호화가 활성화된 MSK 서버 확인
MSK 서버 내에서 활성화된 설정들을 확인하고, 이제 이와 연결시킬 EC2(SpringBoot)에 설정된 IAM역할자가 해당 MSK접근 권한이 등록되어있는지 확인한다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kafka:DescribeCluster",
"kafka:GetBootstrapBrokers",
"kafka:ListTopics",
"kafka:CreateTopic",
"kafka:DeleteTopic",
"kafka:DescribeTopic",
"kafka:Write",
"kafka:Read"
],
"Resource": "arn:aws:kafka:<region>:<account-id>:cluster/<cluster-name>/*"
}
]
}
해당 정책에서 이런식으로 Kafka에 대한 접근 설정을 허용해주었으면 된다.
인바운드, 아웃바운드 설정
Client - Ec2의 설정
Client인 SpringBoot는 아웃바운드에서 KMS 서버가 포함된 상태여야 한다
MSK의 설정
MKS 측에서는 네트워킹 설정 > VPC 설정 내에서 보안그룹을 통해 해당 SpringBoot가 접근할 수 있도록 설정했어야 한다
해당 보안 그룹으로 Ec2가 포함되어있으면 된다.
완료되었다면 EC2 CLI에서 접근이 가능한지 확인해본다
(IAM과 TLS 둘 다 활성화 되었다면 기본적으로 9098 포트에 연결될 것이다.)
[ec2-user@{EC2 URL}~]$ telnet {KMS URL} 9098
Trying {URL}...
Connected to {KMS URL}
Escape character is '^]'.
Ec2 서버에 올려질 SpringBoot 작업하기
IAM 및 TLS 설정을 위한 라이브러리 추가
MVN에서 최신 AWS IAM 버전을 확인해서 넣어본다.
<!-- AWS MSK IAM 인증을 위한 AWS SDK 및 MSK IAM 라이브러리 -->
<dependencies>
<!-- Spring Kafka -->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>{알맞은버전}</version>
</dependency>
<!-- AWS MSK IAM 인증을 위한 AWS SDK 및 MSK IAM 라이브러리 -->
<dependency>
<groupId>software.amazon.msk</groupId>
<artifactId>aws-msk-iam-auth</artifactId>
<version>{알맞은버전}</version>
</dependency>
<!-- AWS SDK Auth -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>auth</artifactId>
<version>{알맞은버전}</version>
</dependency>
<!-- AWS SDK STS -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sts</artifactId>
<version>{알맞은버전}</version>
</dependency>
</dependencies>
TLS 연결을 위해 필요한 TrustStore (암호화) 작업 진행
msk는 TLS암호화를 사용하므로, 클라이언트(Ec2)에서 신뢰할 수 있는 인증서 기반의 TrustStore를 설정해야 한다.
Amazon Trust Service 인증서 다운받기
wget https://www.amazontrust.com/repository/SFSRootCAG2.pem
TrustStore 파일 생성
keytool -import -alias CARoot -file SFSRootCAG2.pem -keystore truststore.jks -storepass {password}
추후 이어서 진행