4.13. 클러스터 연결 보안
클러스터의 브로커 간 내부 연결은 내부 커넥터와 어셉터를 사용하며, 둘 다 Artemis 로 이름이 지정됩니다. SSL을 활성화하여 TLS(Transport Layer Security) 프로토콜을 사용하여 클러스터의 브로커 간 연결을 보호할 수 있습니다.
SSL 지원 수락자는 클러스터의 모든 브로커에 대한 공통 TLS 인증서가 포함된 시크릿을 지정합니다. SSL 지원 커넥터에서는 TLS 인증서의 공개 키가 포함된 신뢰 저장소를 지정합니다. 각 브로커의 신뢰 저장소에 공개 키가 필요하므로 브로커는 TLS 연결을 설정할 때 클러스터의 다른 브로커를 신뢰할 수 있습니다.
다음 예제 절차에서는 자체 서명된 인증서를 사용하여 클러스터의 브로커 간에 내부 연결을 보호하는 방법을 설명합니다.
프로세스
자체 서명된 TLS 인증서를 생성하여 키 저장소 파일에 추가합니다.
인증서의
주체 대체 이름(SAN) 필드에서 다음 예와 같이 클러스터의 모든 브로커와 일치하는 와일드카드 DNS 이름을 지정합니다. 이 예제는테스트네임스페이스에 배포된ex-aao라는 CR을 사용하는 것을 기반으로 합니다.$ keytool -storetype jks -keystore server-keystore.jks -storepass artemis -keypass artemis -alias server -genkey -keyalg "RSA" -keysize 2048 -dname "CN=AMQ Server, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -validity 365 -ext bc=ca:false -ext eku=sA -ext san=dns:*.ex-aao-hdls-svc.test.svc.cluster.local인증서가 와일드카드 DNS 이름 사용을 지원하지 않는 경우 클러스터의 모든 브로커 Pod에 대한 인증서의
SAN필드에 쉼표로 구분된 DNS 이름 목록을 포함할 수 있습니다. 예를 들면 다음과 같습니다.keytool -storetype jks -keystore server-keystore.jks -storepass artemis -keypass artemis -alias server -genkey -keyalg "RSA" -keysize 2048 -dname "CN=AMQ Server, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -validity 365 -ext bc=ca:false -ext eku=sA -ext san=dns:ex-aao-ss-0.ex-aao-hdls-svc.test.svc.cluster.local,dns:ex-aao-ss-1.ex-aao-hdls-svc.test.svc.cluster.local-
TLS 인증서가 DNS 이름 사용을 지원하지 않는 경우 아래 설명된 대로
ActiveMQArtemisCR에서 호스트 확인을 비활성화해야 합니다.
신뢰 저장소 파일로 가져올 수 있도록 키 저장소 파일에서 TLS 인증서의 공개 키를 내보냅니다. 예를 들면 다음과 같습니다.
$ keytool -storetype jks -keystore server-keystore.jks -storepass artemis -alias server -exportcert -rfc > server.crt클러스터의 다른 브로커가 인증서를 신뢰할 수 있도록 TLS 인증서의 공개 키를 신뢰 저장소 파일로 가져옵니다. 예를 들면 다음과 같습니다.
$ keytool -storetype jks -keystore server-truststore.jks -storepass artemis -keypass artemis -importcert -alias server -file server.crt -noprompt키 저장소 및 신뢰 저장소 파일 및 관련 암호를 저장할 시크릿을 생성합니다. 예를 들면 다음과 같습니다.
oc create secret generic artemis-ssl-secret --namespace test --from-file=broker.ks=server-keystore.jks --from-file=client.ts=server-truststore.jks --from-literal=keyStorePassword=artemis --from-literal=trustStorePassword=artemis브로커 배포에 대해
ActiveMQArtemisCR을 편집하고 Artemis라는 내부 어셉터를추가합니다. Artemisacceptor에서sslEnabled속성을true로 설정하고sslSecret특성에서 생성한 시크릿 이름을 지정합니다. 예를 들면 다음과 같습니다.spec: .. deploymentPlan: size: 2 acceptors: - name: artemis port: 61616 sslEnabled: true sslSecret: artemis-ssl-secret ..클러스터의 각 브로커가 클러스터
의다른 브로커에 연결하는 데 사용하는 Artemis 커넥터에 대해 SSL을 활성화합니다.brokerProperties속성을 사용하여 SSL을 활성화하고 TLS 인증서의 공개 키가 포함된 truststore 파일의 경로와 자격 증명을 지정합니다.spec: .. deploymentPlan: size: 2 acceptors: - name: artemis port: 61616 sslEnabled: true sslSecret: artemis-ssl-secret brokerProperties: - 'connectorConfigurations.artemis.params.sslEnabled=true' - 'connectorConfigurations.artemis.params.trustStorePath=/etc/artemis-ssl-secret-volume/client.ts' - 'connectorConfigurations.artemis.params.trustStorePassword=artemis' ..- connectorConfigurations.artemis.params.trustStorePath
-
이 값은 브로커 Pod의 truststore 파일
client.ts와 일치해야 합니다. 시크릿의 truststore 파일 및 관련 암호 파일은 각 브로커 Pod의/etc/<시크릿 이름>-volume디렉터리에 마운트됩니다. 이전 예제에서는artemis-ssl-secret이라는 시크릿에 있는 신뢰 저장소의 위치를 지정합니다.
TLS 인증서에서 DNS 이름 사용을 지원하지 않는 경우
brokerProperties속성을 사용하여 호스트 확인을 비활성화합니다. 예를 들면 다음과 같습니다.spec: .. brokerProperties: .. - 'connectorConfigurations.artemis.params.verifyHost=false' ..- CR을 저장합니다.