Cassandra JMX 인증 및 권한 부여: 사용자 생성

⚡ 스마트 요약

Cassandra 보안은 내부 인증, 역할 권한, 방화벽 규칙 및 JMX 액세스 제어에 기반합니다. 이 페이지에서는 각 계층을 활성화하고, 사용자를 생성하고, 권한을 부여하고, 원격 노드 도구 액세스를 안전하게 보호하는 방법을 보여줍니다.

  • 🔐 두 개의 레이어: 인증은 사용자가 누구인지 증명하고, 권한 부여는 해당 사용자가 무엇을 할 수 있는지 결정합니다.
  • ⚙️ 활성화하기: 두 기능 모두 기본적으로 비활성화되어 있으며, 인증자 및 권한 부여자 설정에서 활성화할 수 있습니다.
  • 👤 기본 계정: 내장된 카산드라 슈퍼유저가 거의 모든 계정을 생성하므로 해당 계정의 비밀번호를 즉시 변경해야 합니다.
  • 🔑 보조금 모델: SELECT, MODIFY, ALTER와 같은 권한은 GRANT 명령어를 사용하여 리소스별로 부여됩니다.
  • 📡 항구 통제: 노드 간에 7000, 7001, 7199 및 9042 포트를 열고 JMX 인증을 유지하십시오.

Cassandra JMX 인증 및 권한 부여

보안에는 두 가지 유형이 있습니다. Apache Cassandra 그리고 DataStax Enterprise.

  • 내부인증
  • 권한 부여

내부 인증 및 권한 부여란 무엇입니까?

내부 인증은 기본적으로 사용자 연결을 검증하는 것입니다. 사용자는 로그인과 비밀번호를 통해 인증됩니다. 모든 사용자 계정은 내부에서 관리됩니다. Cassandra 내부적으로.

내부 권한 부여는 사용자의 권한 관리를 의미합니다. 사용자가 수행할 수 있는 작업을 정의하는 것이죠. 예를 들어, 어떤 사용자는 데이터 읽기 권한만, 어떤 사용자는 데이터 쓰기 권한만, 또 어떤 사용자는 데이터 삭제 권한만 갖도록 권한을 부여할 수 있습니다.

하지만 인증은 Kerberos(Kerberos는 자격 증명을 안전하게 관리하는 데 사용됨) 및 LDAP(LDAP는 계정에 대한 권한 정보(예: 접근 허용 범위)를 저장하는 데 사용됨)를 사용하여 외부에서 제어할 수도 있습니다.

외부 인증은 Kerberos 및 LDAP에서 지원되는 인증입니다. Apache Cassandra 외부 인증을 지원하지 않습니다.

DataStax Enterprise만 Kerberos 및 LDAP를 사용한 외부 인증을 지원하며, 내부 인증은 두 가지 모두에서 지원됩니다. Apache Cassandra DataStax Enterprise도 포함됩니다.

인증 및 권한 부여 구성

In Cassandra기본적으로 인증 및 권한 부여 옵션은 비활성화되어 있습니다. 인증 및 권한 부여를 활성화하려면 cassandra.yaml 파일을 구성해야 합니다.

cassandra.yaml 파일을 열고 아래와 같이 내부 인증 및 권한 부여와 관련된 줄의 주석 처리를 해제하세요.

cassandra.yaml의 인증자 및 권한 부여자 라인 주석 처리 해제

  • cassandra.yaml 파일에서 기본적으로 인증자 값은 'AllowAllAuthenticator'로 설정되어 있습니다. 이 인증자 값을 'AllowAllAuthenticator'에서 'com.datastax.bdp.cassandra.auth.PasswordAuthenticator'로 변경하십시오.
  • 마찬가지로 cassandra.yaml 파일에서 기본적으로 authorizer 값은 'AllowAllAuthorizer'로 설정되어 있습니다. 이 authorizer 값을 'AllowAllAuthorizer'에서 'com.datastax.bdp.cassandra.auth'로 변경하십시오.Cassandra승인자'.

저 두 클래스 이름은 DataStax Enterprise 값입니다. 오픈 소스에 관해서는... Apache Cassandra 동일한 설정이 적용됩니다 PasswordAuthenticator CassandraAuthorizer그러면 자격 증명은 다음과 같은 위치에 저장됩니다. system_auth 키스페이스의 복제 계수를 1보다 높게 설정해야 합니다.

로그인

이제 인증이 활성화되었습니다. 키스페이스에 액세스하려고 하면 Cassandra 오류를 반환합니다.

기본적으로, Cassandra 'cassandra'라는 사용자 이름과 'cassandra'라는 비밀번호를 가진 슈퍼 계정을 제공합니다. 'cassandra' 계정으로 로그인하면 원하는 모든 작업을 수행할 수 있습니다.

이에 대한 아래 스크린샷을 살펴보겠습니다. 기본값을 사용하지 않는 경우 로그인이 허용되지 않습니다. Cassandra "사용자 이름과 비밀번호".

기본 자격 증명을 사용하지 않을 경우 cqlsh 로그인이 거부됩니다.

두 번째 스크린샷에서 보시다시피, 사용 후의 모습입니다. Cassandra 기본 로그인 자격 증명을 사용하면 로그인할 수 있습니다.

기본 Cassandra 자격 증명을 사용하여 cqlsh 로그인에 성공했습니다.

이 계정으로 다른 사용자를 생성할 수도 있습니다. 기본 비밀번호를 변경하는 것이 좋습니다. 다음은 해당 계정으로 로그인하는 예시입니다. Cassandra 사용자 이름과 기본 비밀번호 변경.

alter user cassandra with password 'newpassword';

새 사용자 만들기

'cassandra' 계정으로 새 계정을 만들 수 있습니다.

새 사용자를 생성할 때는 로그인 아이디와 비밀번호를 지정하고, 해당 사용자가 관리자 권한(슈퍼유저)을 갖고 있는지 여부를 지정합니다. 관리자 권한만 새 사용자를 생성할 수 있습니다.

create user robin with password 'manager' superuser;
create user robin with password 'newhire';

다음 구문을 사용하면 모든 사용자 목록을 얻을 수 있습니다.

list users;

출력 결과에는 모든 계정과 해당 계정의 관리자 권한 플래그가 함께 나열됩니다.

list users 명령의 출력 결과 (계정 및 슈퍼유저 플래그 표시)

다음 구문을 사용하여 사용자를 삭제할 수 있습니다.

drop user laura;

권한 부여

권한 부여란 사용자에게 권한을 할당하는 것으로, 특정 사용자가 수행할 수 있는 작업을 결정하는 것입니다.

다음은 사용자에게 권한을 할당하는 일반적인 구문입니다.

GRANT permission ON resource TO user

사용자에게 부여할 수 있는 권한에는 다음과 같은 유형이 있습니다.

  1. 공통
  2. 바꾸다
  3. 승인
  4. 몹시 떠들어 대다
  5. DROP
  6. 수정
  7. SELECT

다음은 사용자에게 권한을 할당하는 예입니다.

Create user laura with password 'newhire'; 
grant all on dev.emp to laura;
revoke all on dev.emp to laura;
grant select on dev.emp to laura;

새로운 사용자 'laura'가 'newhire'라는 비밀번호로 생성됩니다.

다음은 사용자 'laura'가 emp_bonus 테이블에 접근하려고 시도하는 예입니다. Laura는 dev.emp 테이블에만 접근 권한이 있고 dev.emp_bonus 테이블에는 접근 권한이 없기 때문에 오류가 발생했습니다.

Laura가 권한 없이 emp_bonus 테이블을 조회할 때 오류가 발생합니다.

select* form emp_bonus;

사용자에게 할당된 모든 권한 목록을 가져올 수 있습니다. 다음은 권한 정보를 가져오는 예시입니다.

Laura의 모든 권한을 나열한 결과

list all permissions of laura;

리소스에 대한 모든 권한을 나열할 수도 있습니다. 다음은 테이블에서 권한을 가져오는 예입니다.

dev.emp의 모든 권한 목록을 출력합니다.

list all permissions on dev.emp;

방화벽 구성

방화벽이 실행 중이면 일부 노드를 포함하여 노드 간 통신을 위해 다음 포트를 열어야 합니다. Cassandra 포트. 만약에 Cassandra 포트가 열리지 않습니다. Cassandra 노드는 데이터베이스 클러스터에 참여하는 대신 독립형 데이터베이스 서버로 작동합니다.

Cassandra 클라이언트 포트

포트 번호 기술설명
9042 Cassandra 클라이언트 포트
9160 Cassandra 클라이언트 포트 중고품

Cassandra 노드 간 포트

포트 번호 기술설명
7000 Cassandra 노드 간 클러스터 통신
7001 Cassandra SSL 노드 간 클러스터 통신
7199 Cassandra JMX 모니터링 포트

공용 포트

포트 번호 기술설명
22 SSH 포트
8888 OpsCenter 웹사이트. 브라우저 http 요청.

Cassandra OpsCenter 포트

포트 번호 기술설명
61620 OpsCenter 모니터링 포트.
61621 Opscenter 에이전트 포트

현재 드라이버는 9042 포트만 사용합니다. 9160 포트는 기존 Thrift 인터페이스에 사용되며 새 클러스터에서는 닫힌 상태로 유지될 수 있습니다.

JMX 인증 활성화

기본 설정으로는 CassandraJMX는 로컬 호스트에서만 접근할 수 있습니다. 원격으로 JMX에 접근하려면 cassandra-env.sh 파일에서 LOCAL_JMX 설정을 변경하고 인증 또는 SSL을 활성화하십시오.

JMX 인증을 활성화한 후 다음을 확인하세요. 운영센터 및 nodetool은 인증을 사용하도록 구성됩니다.

순서

JMX 인증을 활성화하려면 다음 단계를 따르세요.

  1. cassandra-env.sh 파일에서 다음 줄을 추가하거나 업데이트합니다.
    JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
    JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password"

    또한 cassandra-env.sh 파일에서 LOCAL_JMX 설정을 변경하십시오.

    LOCAL_JMX=no
  2. /jdk_install_location/lib/management/ 에서 jmxremote.password.template 파일을 /etc/cassandra/ 로 복사하고 이름을 jmxremote.password로 변경하십시오.
    cp /jdk_install_dir/lib/management/jmxremote.password.template /etc/cassandra/jmxremote.password
  3. jmxremote.password의 소유권을 실행하는 사용자로 변경하십시오. Cassandra 권한을 읽기 전용으로 변경하세요.
    chown cassandra:cassandra /etc/cassandra/jmxremote.password 
    chmod 400 /etc/cassandra/jmxremote.password
  4. jmxremote.password를 편집하고 JMX 호환 유틸리티에 대한 사용자 및 비밀번호를 추가하십시오.
    monitorRole QED 
    controlRole R&D 
    cassandra cassandrapassword
  5. 추가 Cassandra /jdk_install_location/lib/management/jmxremote.access에 대한 읽기 및 쓰기 권한이 있는 사용자
    monitorRole readonly
    cassandra readwrite
    controlRole readwrite \
    create javax.management.monitor.,javax.management.timer. \ 
    unregister
  6. 다시 시작 Cassandra.
  7. 다음과 같이 nodetool을 실행하세요. Cassandra 사용자 및 비밀번호.
    $ nodetool status -u cassandra -pw cassandra

자주 묻는 질문

두 데이터 모두 system_auth 키스페이스의 roles 및 role_permissions 테이블에 존재합니다. system_auth 복제본이 손실되면 모든 사용자의 접근이 차단될 수 있으므로, 프로덕션 환경에서 인증을 활성화하기 전에 복제 계수를 높여야 합니다.

CQL 역할은 기존 사용자 구문을 대체합니다. 역할은 권한을 가지며 다른 역할에 권한을 부여할 수 있으므로 최신 버전에서는 CREATE USER 대신 CREATE ROLE을 사용하며, 사용자 명령은 별칭으로 유지됩니다.

아니요. 인증은 신원만 확인할 뿐이며, client_encryption_options가 활성화되지 않은 경우 비밀번호는 암호화되지 않은 상태로 네트워크를 통해 전송됩니다. 클라이언트-노드 간 트래픽과 노드-노드 간 트래픽에 대해 각각 TLS를 활성화하십시오.

전용 슈퍼유저 계정을 생성한 다음 내장된 Cassandra 암호를 변경하거나 계정을 삭제하세요. 문서화된 Cassandra/Cassandra 쌍을 활성 상태로 유지하는 것이 가장 일반적인 방법입니다. Cassandra 잘못된 구성.

권한은 캐시됩니다. 변경 사항은 권한 유효 기간이 만료된 후에만 적용되므로, 권한 부여 또는 취소를 테스트할 때는 cassandra.yaml 파일에서 해당 설정을 더 짧게 하거나 노드를 재시작하십시오.

인증되지 않은 JMX 포트 7199를 사용하면 노드 해제를 포함한 모든 노드 제어가 가능합니다. Cassandra 따라서 로컬에 바인딩되며, 원격 액세스는 암호 파일이나 SSL이 설정된 경우에만 허용됩니다.

머신러닝 모델은 역할별로 일반적인 쿼리 형태, 로그인 시간 및 소스 주소를 분석한 다음, 애플리케이션 계정이 관련 없는 키스페이스를 읽는 것과 같은 편차를 표시합니다. 이를 통해 정적 규칙이 놓치는 자격 증명 오용 사례를 찾아낼 수 있습니다.

Copilot은 댓글을 기반으로 CREATE ROLE 및 GRANT 문을 빠르게 생성하지만, 광범위한 권한을 제안하는 경향이 있습니다. Rev실제 환경에서 실행하기 전에 최소 권한 원칙에 따라 생성된 모든 권한 부여 내역을 검토하십시오. 클러스터.

이 게시물을 요약하면 다음과 같습니다.