Cassandra 노드 간 암호화 사용 설정

노드 간 (또는 노드 간) 암호화는 TLS를 사용하여 클러스터의 노드 간에 이동하는 데이터를 보호합니다. 이 페이지에서는 프라이빗 클라우드용 Edge에서 TLS를 사용하여 Cassandra 인터노드 암호화를 사용 설정하는 방법을 설명합니다. 이 단계를 수행하려면 Cassandra 링의 세부정보를 잘 알고 있어야 합니다.

Cassandra 노드 간 암호화 사용 설정

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

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

    FIPS 지원 운영체제에서 Edge for Private Cloud를 사용하는 경우 BouncyCastle FIPS 키 저장소 (BCFKS)를 사용하세요. BCFKS 유형 키 저장소 작업에 관한 팁은 아래 부록을 참고하세요.

    다음 단계에서는 부록에 설명된 대로 keystore.node0truststore.node0와 키 저장소 및 트러스트 저장소 비밀번호를 만들었다고 가정합니다. 다음 단계를 진행하기 전에 각 노드에서 키 저장소와 신뢰 저장소를 초기 단계로 만들어야 합니다.

  2. /opt/apigee/customer/application/cassandra.properties 파일에 다음 속성을 추가합니다. 파일이 없으면 만듭니다.
    conf_cassandra_server_encryption_internode_encryption=all
    conf_cassandra_server_encryption_keystore=/opt/apigee/data/apigee-cassandra/keystore.node0
    conf_cassandra_server_encryption_keystore_password=keypass
    conf_cassandra_server_encryption_truststore=/opt/apigee/data/apigee-cassandra/truststore.node0
    conf_cassandra_server_encryption_truststore_password=trustpass
        
    # Optionally set the following to enable 2-way TLS or mutual TLS
    conf_cassandra_server_encryption_require_client_auth=true
      
    # Set the following in FIPS enabled operating systems
    # With FIPS, older TLS protocols are disabled, so set to TLSv1.2
    conf_cassandra_server_encryption_protocol=TLSv1.2
    # With FIPS, use BCFKS keystores
    conf_cassandra_server_encryption_store_type=BCFKS
      
  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 암호화 서비스가 시작되었는지 확인하려면 시스템 로그에서 다음 메시지를 확인하세요.
    Internode messaging enabled TLS protocols
    Internode messaging enabled cipher suites
    

인증서 순환 수행

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

  1. 생성된 고유한 각 키 쌍의 인증서 (부록 참고)를 기존 Cassandra 노드의 트러스트스토어에 추가하여 이전 인증서와 새 인증서가 모두 동일한 트러스트스토어에 있도록 합니다.
    keytool -import -v -trustcacerts -alias NEW_ALIAS \
    -file CERT -keystore EXISTING_TRUSTSTORE
    

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

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

    여기서 NEW_KEYSTORE_PATH는 키 저장소 파일이 있는 디렉터리의 경로이고 NEW_KEYSTORE_PASSWORD부록에 설명된 대로 인증서가 생성될 때 설정된 키 저장소 비밀번호입니다.

  5. Cassandra 서비스를 중지합니다.
    /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 키 저장소와 키의 키패스는 동일해야 합니다.
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
    )로 가져옵니다.

    위 명령어를 실행하면 비밀번호를 설정하라는 메시지가 표시됩니다. 이는 트러스트스토어 비밀번호이며 이전에 설정한 키 저장소 비밀번호와 다를 수 있습니다. 인증서를 신뢰하라는 메시지가 표시되면 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를 사용하여 키 저장소 및 트러스트 저장소 파일에서 인증서를 확인합니다.
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0

FIPS 지원 운영체제의 BCFKS 키 저장소 사용

FIPS 지원 운영체제에서 작업할 때는 BouncyCastle FIPS 키 저장소 (BCFKS)를 사용하세요. 아래 섹션에서는 BCFKS 유형 키 저장소를 사용하는 방법을 설명합니다. 키 저장소를 사용하는 다른 단계(예: 파일 소유권, 파일 위치 등)는 이 부록에 설명된 것과 동일하게 유지됩니다.

BCFKS 유형의 키 저장소를 생성하려면 아래 명령어를 사용하세요.

keytool -genkeypair -keyalg RSA -alias node0 -validity 365 -keystore keystore.node0 \
-storepass keypass -keypass keypass -v \
-dname "EMAILADDRESS=youremail@domain.com, CN=yourcn, OU=yourou, O=youro, L=yourl, C=yourc" \
-storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS

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

참고: Apigee에서 제공하는 bc-fips jar를 사용하거나 BouncyCastle 저장소에서 동일한 jar를 다운로드할 수 있습니다. BCFKS 키 저장소를 생성하는 방법에 관한 자세한 내용은 BouncyCastle 문서를 참고하세요.

인증서를 별도의 파일로 내보냅니다.

keytool -export -v -alias node0 -file node0.cer -keystore keystore.node0 -storepass keypass \
-storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS

생성된 인증서 node0.cer를 노드의 트러스트 저장소로 가져옵니다.

keytool -import -v -alias node0 -file node0.cer -keystore truststore.node0 -storepass storepass \
-storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS