Cassandra용 TLS 구성

이 주제에서는 Cassandra 노드와 클라이언트 및 Cassandra 노드 간 통신을 위한 인증을 구성하는 방법을 설명합니다.

런타임 영역에서 Cassandra용 TLS를 구성하는 방법

Cassandra는 클라이언트 머신과 데이터베이스 클러스터 간 및 클러스터 내 노드 간의 보안 통신을 제공합니다. 암호화를 사용하면 이동 중인 데이터가 손상되지 않고 안전하게 전송됩니다. Apigee Hybrid에서는 TLS가 Cassandra 노드 간 및 클라이언트와 Cassandra 노드 간 통신을 위해 기본적으로 사용 설정됩니다.

이 주제에 설명된 대로 재정의 파일에 직접 배치되거나 Kubernetes 보안 비밀에 추가된 사용자 이름/비밀번호 조합을 사용하여 인증을 구성할 수 있습니다.

Cassandra 사용자 인증에 대한 정보

하이브리드 플랫폼은 Cassandra를 런타임 영역 데이터의 백엔드 Datastore로 사용합니다. 기본적으로 Cassandra와 클라이언트 간의 통신에는 인증이 필요합니다. Cassandra와 통신하는 클라이언트에서 사용하는 사용자에는 세 가지가 있습니다. 이러한 사용자에게 기본 비밀번호가 제공되며 개발자는 이를 변경할 필요가 없습니다.

기본 사용자를 포함한 이러한 사용자는 아래에 설명되어 있습니다.

  • DML 사용자: 클라이언트 통신이 Cassandra(KMS, KVM, 캐시 및 할당량)에서 데이터를 읽고 쓰는 데 사용됩니다.
  • DDL 사용자: 키스페이스 생성, 업데이트, 삭제와 같은 데이터 정의 작업을 위해 MART에서 사용됩니다.
  • 관리 사용자: Cassandra 클러스터에서 수행되는 모든 관리 활동에 사용됩니다.
  • 기본 Cassandra 사용자: 인증이 사용 설정되고 사용자 이름이 cassandra인 경우 Cassandra에서 기본 사용자를 생성합니다.
  • JMX 사용자: Cassandra JMX 인터페이스로 인증하고 통신하는 데 사용됩니다.
  • Jolokia 사용자: Cassandra JMX API로 인증하고 통신하는 데 사용됩니다.

재정의 파일의 기본 비밀번호 변경

Apigee Hybrid는 Cassandra 사용자의 기본 비밀번호를 제공합니다. 기본 사용자 비밀번호를 변경하려면 overrides.yaml 파일에서 변경할 수 있습니다. 다음 구성을 추가하고, 원하는 대로 기본 비밀번호('iloveapis123')를 변경하고, 변경사항을 클러스터에 적용합니다.

cassandra:
   auth:
     default:  ## the password for the new default user (static username: cassandra)
       password: "iloveapis123"
     admin: ## the password for the admin user (static username: admin_user)
       password: "iloveapis123"
     ddl: ## the password for the DDL User (static username: ddl_user)
       password: "iloveapis123"
     dml: ## the password for the DML User (static username: dml_user)
       password: "iloveapis123"
     jmx:
       username: "jmxuser" ## the username for the JMX User
       password: "iloveapis123" ## the password for the JMX User
     jolokia:
       username: "jolokiauser" ## the username to access jolokia interface
       password: "iloveapis123" ## the password for jolokia user

다음에 유의하세요.

  • 인증 기관(CA) 순환이 지원되지 않습니다.
  • 암호로 생성된 서버 인증서는 지원되지 않습니다.

Kubernetes 보안 비밀에서 사용자 이름 및 비밀번호 설정

이 섹션에서는 인증에 Kubernetes 보안 비밀을 사용하도록 Cassandra를 구성하는 방법을 설명합니다.

보안 비밀 만들기

다음 템플릿을 사용하여 Kubernetes 보안 비밀을 구성합니다. 파일에 템플릿을 저장하고 필수 속성을 수정합니다. 이 옵션을 사용하는 경우 각 비밀번호와 함께 사용자 이름을 제공해야 합니다.

apiVersion: v1
kind: Secret
metadata:
  name: $SECRET_NAME
  namespace: $APIGEE_NAMESPACE
type: Opaque
data:
  default.password: $PASSWORD   #base64-encoded string
  admin.user: $USERNAME   #base64-encoded string
  admin.password: $PASSWORD   #base64-encoded string
  dml.user: $USERNAME   #base64-encoded string
  dml.password: $PASSWORD   #base64-encoded string
  ddl.user: $USERNAME   #base64-encoded string
  ddl.password: $PASSWORD   #base64-encoded string
  jmx.user: $USERNAME   #base64-encoded string
  jmx.password: $PASSWORD   #base64-encoded string
  jolokia.user: $USERNAME   #base64-encoded string
  jolokia.password: $PASSWORD   #base64-encoded string
  

여기서 $SECRET_NAME은 보안 비밀에 대해 선택한 이름이고 $APIGEE_NAMESPACE는 Apigee 포드가 배포된 네임스페이스(기본값은 apigee)이며 $USERNAME$PASSWORD는 각 사용자의 사용자 이름과 비밀번호입니다. 사용자 이름과 비밀번호는 Base64로 인코딩되어야 합니다.

클러스터에 보안 비밀을 적용합니다. 예를 들면 다음과 같습니다.

kubectl apply -f $SECRET_FILE

재정의 파일에 보안 비밀을 추가합니다.

cassandra:
  auth:
    secret: $SECRET_NAME

업데이트된 Cassandra 재정의를 클러스터에 적용합니다.

$APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --datastore

Cassandra 로그 확인

Cassandra가 시작되는 즉시 로그를 확인합니다. 다음 로그에서는 Cassandra 클라이언트 연결이 암호화되었음을 보여줍니다.

kubectl logs apigee-cassandra-2 -n apigee -f

INFO  00:44:36 Starting listening for CQL clients on /10.0.2.12:9042 (encrypted)...
INFO  00:44:36 Binding thrift service to /10.0.2.12:9160
INFO  00:44:36 enabling encrypted thrift connections between client and server
INFO  00:44:36 Listening for thrift clients...