Cassandra 노드 간 암호화 사용 설정

노드 간 (또는 노드 간) 암호화는 TLS를 사용하여 클러스터의 노드 간에 이동하는 데이터를 보호합니다. 이 페이지에서는 Private Cloud용 Edge에서 TLS를 사용하여 Cassandra 노드 간 암호화를 사용 설정하는 방법을 설명합니다. 이 단계를 수행하려면 Cassandra 링의 세부정보에 익숙해야 합니다.

Cassandra 노드 간 암호화 사용 설정

Cassandra 노드 간 암호화를 사용 설정하려면 클러스터의 모든 노드에서 아래 절차를 따르세요. 각 노드의 공개 인증서를 모든 노드에 배포해야 합니다. 이렇게 하면 각 노드의 트러스트 저장소에 인증서 node0.cer, node1.cer 등이 포함됩니다. 각 노드의 키 저장소에는 고유한 비공개 키만 포함됩니다. 예를 들어 node0는 키 저장소에 node0.pem만 포함합니다. 한 번에 하나씩 각 노드에서 암호화를 사용 설정해야 합니다.

Cassandra 노드 간 암호화를 사용 설정하려면 다음 단계를 따르세요.

  1. 부록의 단계에 따라 서버 인증서를 생성하여 자체 서명 키와 인증서를 만듭니다.

    다음 단계에서는 부록의 설명대로 keystore.node0, truststore.node0, 키 저장소 및 트러스트 저장소 비밀번호를 만들었다고 가정합니다. 다음 단계를 진행하기 전에 각 노드에서 예비 단계로 키 저장소와 트러스트 저장소를 생성해야 합니다.

  2. 다음 속성을 /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
  3. cassandra.properties 파일이 Apigee 사용자의 소유인지 확인합니다.
    chown apigee:apigee \
    /opt/apigee/customer/application/cassandra.properties

각 Cassandra 노드에서 한 번에 하나씩 다음 단계를 실행하여 사용자에게 다운타임을 일으키지 않고 변경사항이 적용되도록 합니다.

  1. Cassandra 서비스를 중지합니다.
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
  2. Cassandra 서비스를 다시 시작합니다.
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  3. TLS 암호화 서비스가 시작되었는지 확인하려면 시스템 로그에서 다음 메시지를 확인하세요.
    Starting Encrypted Messaging Service on TLS port

인증서 순환 수행

인증서를 순환하려면 다음 단계를 따르세요.

  1. 생성된 고유한 키 쌍마다 인증서를 기존 Cassandra 노드의 트러스트 저장소에 추가합니다 (부록 참조). 그러면 이전 인증서와 새 인증서가 동일한 트러스트 저장소에 존재합니다.
    keytool -import -v -trustcacerts -alias NEW_ALIAS \
    -file CERT -keystore EXISTING_TRUSTSTORE

    여기서 NEW_ALIAS은 항목을 식별하는 고유한 문자열이고, CERT는 추가할 인증서 파일의 이름이고, EXISTING_TRUSTSTORE은 Cassandra 노드에 있는 기존 트러스트 저장소의 이름입니다.

  2. scp와 같은 복사 유틸리티를 사용하여 각 노드에서 사용 중인 기존 truststore를 대체하는 클러스터의 모든 Cassandra 노드에 truststore를 배포합니다.
  3. 클러스터를 순차적으로 다시 시작하여 새 트러스트 저장소를 로드하고 새 키가 배치되기 전에 트러스트를 설정합니다.
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
  4. 클러스터의 각 Cassandra 노드에서 아래 표시된 속성을 cassandra.properties 파일의 새 키 저장소 값으로 업데이트합니다.
    conf_cassandra_keystore=NEW_KEYSTORE_PATH
    conf_cassandra_keystore_password=NEW_KEYSTORE_PASSOWRD
    
      

    where NEW_KEYSTORE_PATH is the path to the directory where the keystore file is located and NEW_KEYSTORE_PASSWORD is the keystore password set when the certificates were created, as explained in the Appendix.

  5. Stop the Cassandra service:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
  6. Cassandra 서비스를 다시 시작합니다.
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  7. 모든 노드 간에 통신이 성공적으로 설정되면 다음 Cassandra 노드로 이동합니다. 참고: 모든 노드 간에 통신이 성공적으로 설정된 경우에만 다음 노드로 넘어갑니다.

부록

다음 예시에서는 노드 간 암호화 단계를 실행하는 데 필요한 서버 인증서를 준비하는 방법을 설명합니다. 예시에 표시된 명령어는 다음 매개변수를 사용합니다.

매개변수 설명
node0 노드를 식별하는 고유 문자열입니다.
keystore.node0 키 저장소 이름. 명령어는 이 파일이 현재 디렉터리에 있다고 가정합니다.
keypass keypass는 키 저장소와 키 모두에서 동일해야 합니다.
dname node0의 IP 주소를 10.128.0.39로 식별합니다.
-validity 이 플래그에 설정된 값은 생성된 키 쌍을 10년 동안 유효하게 만듭니다.
  1. 다음 디렉터리로 이동합니다.
    cd /opt/apigee/data/apigee-cassandra
  2. 다음 명령어를 실행하여 현재 디렉터리에 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"

    중요: 키 비밀번호는 키 저장소 비밀번호와 동일해야 합니다.

  3. 인증서를 별도의 파일로 내보냅니다.
    keytool -export -alias node0 -file node0.cer \
    -keystore keystore.node0
  4. Apigee 사용자만 파일을 읽을 수 있는지 확인합니다.
    $ chown apigee:apigee \
    /opt/apigee/data/apigee-cassandra/keystore.node0
    $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
  5. 생성된 인증서 node0.cer를 노드의 트러스트 저장소로 가져옵니다.
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

    위의 명령어를 실행하면 비밀번호를 설정하라는 메시지가 표시됩니다. 이 비밀번호는 truststore 비밀번호이며 이전에 설정한 키 저장소 비밀번호와 다를 수 있습니다. 인증서를 신뢰하라는 메시지가 표시되면 yes를 입력합니다.

  6. 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
  7. 노드 간 암호화의 경우 node0.cer 파일을 각 노드에 복사하고 각 노드의 트러스트 저장소로 가져옵니다.
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node1
  8. keytool -list를 사용하여 키 저장소 및 truststore 파일의 인증서를 확인합니다.
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0