Cassandra용 인증 구성

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

런타임 영역에서 Cassandra용 인증을 구성하는 방법

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

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

Cassandra 사용자 인증에 대한 정보

하이브리드 플랫폼은 Cassandra를 런타임 영역 데이터의 백엔드 Datastore로 사용합니다. 기본적으로 Cassandra와 클라이언트 간의 통신에는 인증이 필요합니다. Cassandra와 통신하는 여러 클라이언트 사용자가 있습니다. 이러한 사용자에게 기본 비밀번호가 제공됩니다. 기본 비밀번호를 변경하는 데 필요한 단계는 재정의 파일에서 기본 비밀번호 변경을 참조하세요.

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

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

기본 Cassandra 사용자 정보

Apigee Hybrid 클러스터가 생성되고 Cassandra 인증이 사용 설정되면 초기 사용자 계정은 사용자 이름 cassandra로 식별되는 기본 Cassandra 사용자입니다. 기본 cassandra 사용자는 수퍼유저 역할을 하며 사용자 역할 추가 및 데이터베이스 스키마 수정과 같은 작업을 담당합니다.

Apigee Hybrid apigee-cassandra-user-setup 작업에서는 기본 cassandra 사용자를 활용하여 새 역할을 설정하고 이 기본 사용자와 연결된 비밀번호를 업데이트합니다. apigee-cassandra-user-setup 작업은 Apigee Hybrid 인스턴스의 초기 설치, 후속 인스턴스 업그레이드, 리전 확장 중 새 인스턴스 프로비저닝 중에 실행됩니다.

Apigee Hybrid apigee-cassandra-user-setup 작업이 실행되면 새 설치 또는 업그레이드의 일부로 데이터베이스 수준 구성을 업데이트하고 수정하는 기능이 필요합니다. 기본 cassandra 사용자는 apigee-cassandra-user-setup 작업이 새 Cassandra 포드를 설정할 때 존재가 보장되는 유일한 사용자입니다. 수퍼유저 액세스 권한이 있는 알려진 사용자가 없으면 Apigee Hybrid 업그레이드 및 리전 확장이 제대로 작동하지 않습니다.

기본 cassandra 사용자 비밀번호는 보안 강화 조치에 따라 최초 사용 후 변경됩니다. 따라서 기본 cassandra 사용자가 계속 사용 설정되어 있어도 기본 cassandra 사용자를 사용하려면 새 비밀번호를 알아야 합니다. 기본 cassandra 사용자는 새 설치 및 리전 확장 중 apigee-cassandra-user-setup 작업을 제외한 다른 구성요소에서 사용되지 않습니다.

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

보안 권장사항에 따라 Cassandra의 기본 비밀번호를 변경하는 것이 좋습니다. overrides.yaml 파일에서 수행할 수 있습니다. 다음 구성을 추가하고 기본 비밀번호를 원하는 대로 변경하고 변경사항을 클러스터에 적용합니다. cassandra를 참조하세요. values.yaml 파일에서 기본 비밀번호를 볼 수 있습니다.

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

다음에 유의하세요.

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

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

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

보안 비밀 만들기

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

apiVersion: v1
kind: Secret
metadata:
  name: SECRET_NAME
  namespace: APIGEE_NAMESPACE
type: Opaque
data:
  default.password: DEFAULT_PASSWORD   #base64-encoded string
  admin.user: ADMIN_USERNAME   #base64-encoded string
  admin.password: ADMIN_PASSWORD   #base64-encoded string
  dml.user: DML_USERNAME   #base64-encoded string
  dml.password: DML_PASSWORD   #base64-encoded string
  ddl.user: DDL_USERNAME   #base64-encoded string
  ddl.password: DDL_PASSWORD   #base64-encoded string
  jmx.user: JMX_USERNAME   #base64-encoded string
  jmx.password: JMX_PASSWORD   #base64-encoded string
  jolokia.user: JOLOKIA_USERNAME   #base64-encoded string
  jolokia.password: JOLOKIA_PASSWORD   #base64-encoded string
  

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

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

kubectl apply -f SECRET_FILE

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

cassandra:
  auth:
    secret: SECRET_NAME

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

helm upgrade datastore apigee-datastore/ \
--namespace APIGEE_NAMESPACE \
--atomic \
-f OVERRIDES_FILE.yaml

Cassandra 로그 확인

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

kubectl logs apigee-cassandra-2 -n APIGEE_NAMESPACE -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...