Lambda에서 클러스터 인증 방법 구성하기
Lambda에서 클러스터 인증 방법 구성하기 (Configuring cluster authentication methods in Lambda)
Lambda는 자체 관리형 Apache Kafka 클러스터와 인증하는 여러 방법을 지원해요. Kafka 클러스터가 지원되는 인증 방법 중 하나를 사용하도록 구성해야 해요.
본문
SASL/SCRAM 인증
Lambda는 TLS 암호화(SASL_SSL)와 함께 SASL/SCRAM(Simple Authentication and Security Layer/Salted Challenge Response Authentication Mechanism) 인증을 지원해요. Lambda는 암호화된 자격 증명을 보내 클러스터와 인증해요. Lambda는 평문(plaintext, SASL_PLAINTEXT)의 SASL/SCRAM은 지원하지 않아요.
Lambda는 SASL/PLAIN 인증도 지원해요. 이 메커니즘은 평문 자격 증명을 사용하므로 자격 증명을 보호하기 위해 서버에 대한 연결이 TLS 암호화를 사용해야 해요.
SASL 인증의 경우 로그인 자격 증명을 AWS Secrets Manager의 시크릿으로 저장해요.
중요
인증에 Secrets Manager를 사용하려면 시크릿이 Lambda 함수와 같은 AWS 리전에 저장되어야 해요.
상호 TLS 인증
상호 TLS(mTLS)는 클라이언트와 서버 사이의 양방향 인증을 제공해요. 클라이언트는 서버가 클라이언트를 검증하도록 인증서를 보내고, 서버는 클라이언트가 서버를 검증하도록 인증서를 보내요.
자체 관리형 Apache Kafka에서 Lambda는 클라이언트 역할을 해요. Secrets Manager의 시크릿으로 클라이언트 인증서를 구성해 Kafka 브로커와 Lambda를 인증해요. 클라이언트 인증서는 서버의 신뢰 저장소에 있는 CA가 서명해야 해요.
Kafka 클러스터는 Lambda에 서버 인증서를 보내 Kafka 브로커를 Lambda와 인증해요. 서버 인증서는 공개 CA 인증서거나 프라이빗 CA/자체 서명 인증서일 수 있어요. 공개 CA 인증서는 Lambda 신뢰 저장소에 있는 인증 기관(CA)이 서명해야 해요. 프라이빗 CA/자체 서명 인증서의 경우 Secrets Manager의 시크릿으로 서버 루트 CA 인증서를 구성해요. Lambda는 루트 인증서로 Kafka 브로커를 검증해요.
클라이언트 인증서 시크릿 구성
CLIENT_CERTIFICATE_TLS_AUTH 시크릿은 인증서 필드와 프라이빗 키 필드가 필요해요. 암호화된 프라이빗 키의 경우 시크릿에 프라이빗 키 암호가 필요해요. 인증서와 프라이빗 키 모두 PEM 형식이어야 해요.
참고
Lambda는 PBES1(PBES2는 아님) 프라이빗 키 암호화 알고리즘을 지원해요.
인증서 필드는 클라이언트 인증서로 시작하고, 중간 인증서를 거쳐 루트 인증서로 끝나는 인증서 목록을 담아야 해요. 각 인증서는 새 줄에서 시작해야 하며 다음 구조여야 해요.
-----BEGIN CERTIFICATE-----
<certificate contents>
-----END CERTIFICATE-----
Secrets Manager는 최대 65,536바이트의 시크릿을 지원하므로 긴 인증서 체인을 담을 충분한 공간이 있어요.
프라이빗 키는 PKCS #8 형식이어야 해요.
[REDACTED PRIVATE KEY]
암호화된 프라이빗 키의 경우 다음 구조를 사용해요.
[REDACTED PRIVATE KEY]
다음 예시는 암호화된 프라이빗 키를 사용한 mTLS 인증 시크릿의 내용을 보여줘요. 암호화된 프라이빗 키의 경우 시크릿에 프라이빗 키 암호를 포함해요.
{"privateKeyPassword":"testpassword",
"certificate":"-----BEGIN CERTIFICATE-----
MIIE5DCCAsygAwIBAgIRAPJdwaFaNRrytHBto0j5BA0wDQYJKoZIhvcNAQELBQAw
...
j0Lh4/+1HfgyE2KlmII36dg4IMzNjAFEBZiCRoPimO40s1cRqtFHXoal0QQbIlxk
cmUuiAii9R0=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFgjCCA2qgAwIBAgIQdjNZd6uFf9hbNC5RdfmHrzANBgkqhkiG9w0BAQsFADBb
...
rQoiowbbk5wXCheYSANQIfTZ6weQTgiCHCCbuuMKNVS95FkXm0vqVD/YpXKwA/no
c8PH3PSoAaRwMMgOSA2ALJvbRz8mpg==
-----END CERTIFICATE-----",
"privateKey":"[REDACTED PRIVATE KEY]"
}
서버 루트 CA 인증서 시크릿 구성
Kafka 브로커가 프라이빗 CA가 서명한 인증서로 TLS 암호화를 사용한다면 이 시크릿을 만들어요. VPC, SASL/SCRAM, SASL/PLAIN, 또는 mTLS 인증에 TLS 암호화를 사용할 수 있어요.
서버 루트 CA 인증서 시크릿은 PEM 형식의 Kafka 브로커 루트 CA 인증서를 담은 필드가 필요해요. 다음 예시는 시크릿의 구조를 보여줘요.
{"certificate":"-----BEGIN CERTIFICATE-----
MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dG...
-----END CERTIFICATE-----"
}