노드 간 암호화는 TLS를 사용하여 클러스터의 노드 간에 이동하는 데이터를 보호합니다. 이 페이지에서는 프라이빗 클라우드용 Edge에서 TLS를 사용하여 Cassandra 노드 간 암호화를 사용 설정하는 방법을 설명합니다. 이 단계를 수행하려면 Cassandra 링의 세부정보를 잘 알고 있어야 합니다.
Cassandra 노드 간 암호화 사용 설정
Cassandra 노드 간 암호화를 사용 설정하려면 클러스터의 모든 노드에서 아래 절차를 따르세요. 각 노드의 공개 인증서를 모든 노드에 배포해야 합니다.
이렇게 하면 각 노드의 트러스트 스토어에 인증서 node0.cer, node1.cer 등이 포함됩니다. 각 노드는 키 저장소에 자체 비공개 키만 포함합니다. 예를 들어 node0의 키 저장소에는 node0.pem만 포함됩니다. 각 노드에서 한 번에 하나씩 암호화를 사용 설정해야 합니다.
Cassandra 노드 간 암호화를 사용 설정하려면 다음 단계를 따르세요.
부록의 단계에 따라 서버 인증서를 생성하여 자체 서명 키와 인증서를 만듭니다.
다음 단계에서는 부록에 설명된 대로 키 저장소 및 트러스트 저장소 비밀번호와 함께
keystore.node0및truststore.node0를 만들었다고 가정합니다. 다음 단계를 진행하기 전에 각 노드에서 키 저장소와 트러스트 저장소를 사전 단계로 만들어야 합니다./opt/apigee/customer/application/cassandra.properties파일에 다음 속성을 추가합니다. 파일이 없으면 만듭니다.conf_cassandra_internode_encryption=all conf_cassandra_keystore=/opt/apigee/data/apigee-cassandra/keystore.node0 conf_cassandra_keystore_password=keypass conf_cassandra_truststore=/opt/apigee/data/apigee-cassandra/truststore.node0 conf_cassandra_truststore_password=trustpass # Optionally set the following to enable 2-way TLS or mutual TLS # conf_cassandra_require_client_auth=true
cassandra.properties파일이 apigee 사용자의 소유인지 확인합니다.chown apigee:apigee \ /opt/apigee/customer/application/cassandra.properties
사용자에게 다운타임이 발생하지 않고 변경사항이 적용되도록 각 Cassandra 노드에서 다음 단계를 한 번에 하나씩 실행합니다.
- Cassandra 서비스를 중지합니다.
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- Cassandra 서비스를 다시 시작합니다.
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- TLS 암호화 서비스가 시작되었는지 확인하려면 시스템 로그에서 다음 메시지를 확인합니다.
Starting Encrypted Messaging Service on TLS port
인증서 순환 수행
인증서를 순환하려면 다음 단계를 따르세요.
- 생성된 각 고유 키 쌍의 인증서 (부록 참조)를 기존 Cassandra 노드의 truststore에 추가하여 이전 인증서와 새 인증서가 모두 동일한 truststore에 존재하도록 합니다.
keytool -import -v -trustcacerts -alias NEW_ALIAS \ -file CERT -keystore EXISTING_TRUSTSTORE
여기서
NEW_ALIAS은 항목을 식별하는 고유 문자열이고,CERT은 추가할 인증서 파일의 이름이며,EXISTING_TRUSTSTORE은 Cassandra 노드에 있는 기존 트러스트 저장소의 이름입니다. - scp와 같은 복사 유틸리티를 사용하여 클러스터의 모든 Cassandra 노드에 트러스트 스토어를 배포하고 각 노드에서 사용 중인 기존 트러스트 스토어를 대체합니다.
- 클러스터의 순차적 재시작을 수행하여 새 트러스트 저장소를 로드하고 새 키가 적용되기 전에 새 키에 대한 트러스트를 설정합니다.
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra restart
- 클러스터의 각 Cassandra 노드에서 cassandra.properties 파일의 새 키 저장소 값으로 아래 표시된 속성을 업데이트합니다.
conf_cassandra_keystore=NEW_KEYSTORE_PATH conf_cassandra_keystore_password=NEW_KEYSTORE_PASSOWRD
where
NEW_KEYSTORE_PATHis the path to the directory where the keystore file is located andNEW_KEYSTORE_PASSWORDis the keystore password set when the certificates were created, as explained in the Appendix. - Stop the Cassandra service:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- Cassandra 서비스를 다시 시작합니다.
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- 모든 노드 간에 통신이 성공적으로 설정되면 다음 Cassandra 노드로 진행합니다. 참고: 모든 노드 간에 통신이 성공적으로 설정된 경우에만 다음 노드로 진행합니다.
부록
다음 예시에서는 노드 간 암호화 단계를 수행하는 데 필요한 서버 인증서를 준비하는 방법을 설명합니다. 예시에 표시된 명령어는 다음 매개변수를 사용합니다.
| 매개변수 | 설명 |
|---|---|
node0 |
노드를 식별하는 고유한 문자열입니다. |
keystore.node0 |
키 저장소 이름입니다. 명령어는 이 파일이 현재 디렉터리에 있다고 가정합니다. |
keypass |
keypass는 키 저장소와 키 모두에 동일해야 합니다. |
dname |
node0의 IP 주소를 10.128.0.39로 식별합니다. |
-validity |
이 플래그에 설정된 값은 생성된 키 쌍을 10년 동안 유효하게 만듭니다. |
- 다음 디렉터리로 이동합니다.
cd /opt/apigee/data/apigee-cassandra
- 다음 명령어를 실행하여 현재 디렉터리에
keystore.node0이라는 파일을 생성합니다.keytool -genkey -keyalg RSA -alias node0 -validity 3650 \ -keystore keystore.node0 -storepass keypass \ -keypass keypass -dname "CN=10.128.0.39, OU=None, \ O=None, L=None, C=None"
중요: 키 비밀번호가 키 저장소 비밀번호와 동일한지 확인합니다.
- 인증서를 별도의 파일로 내보냅니다.
keytool -export -alias node0 -file node0.cer \ -keystore keystore.node0
- Apigee 사용자만 파일을 읽을 수 있고 다른 사용자는 읽을 수 없는지 확인합니다.
$ chown apigee:apigee \ /opt/apigee/data/apigee-cassandra/keystore.node0 $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
- 생성된 인증서
node0.cer를 노드의 트러스트 저장소로 가져옵니다.keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node0
위 명령어는 비밀번호를 설정하라는 메시지를 표시합니다. 이 비밀번호는 트러스트 저장소 비밀번호이며 이전에 설정한 키 저장소 비밀번호와 다를 수 있습니다. 인증서를 신뢰하라는 메시지가 표시되면
yes를 입력합니다. - openssl을 사용하여 키가 없는 인증서의 PEM 파일을 생성합니다.
cqlsh는 생성된 형식의 인증서에서 작동하지 않습니다.$ keytool -importkeystore -srckeystore keystore.node0 \ -destkeystore node0.p12 -deststoretype PKCS12 -srcstorepass \ keypass -deststorepass keypass $ openssl pkcs12 -in node0.p12 -nokeys -out node0.cer.pem \ -passin pass:keypass $ openssl pkcs12 -in node0.p12 -nodes -nocerts -out node0.key.pem -passin pass:keypass
- 노드 간 암호화의 경우
node0.cer파일을 각 노드에 복사하고 각 노드의 트러스트 저장소로 가져옵니다.keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node1
keytool -list를 사용하여 키 저장소 및 트러스트 저장소 파일에서 인증서를 확인합니다.$ keytool -list -keystore keystore.node0 $ keytool -list -keystore truststore.node0