Keyfile 인증을 사용하여 자체 관리 복제본 세트 배포
개요
복제본 세트에 대한 액세스 제어를 시행하려면 다음을 구성해야 합니다.
내부 인증을 사용하는 복제본 세트 멤버 간의 보안
자체 관리형 배포서버에서 역할 기반 액세스 제어를 사용하여 연결 클라이언트와 복제본 세트 간의 보안을 유지합니다.
이 튜토리얼에서는 복제본 세트의 각 멤버가 동일한 내부 인증 메커니즘과 설정을 사용합니다.
내부 인증을 설정하면 사용자 액세스 제어도 강화됩니다. mongosh
와 같은 클라이언트의 경우, 복제본 세트에 연결하려면 사용자 계정을 사용해야 합니다. 자세한 내용은 사용자 및 인증 메커니즘을 참조하세요.
클라우드 관리자 및 운영 관리자
현재 Cloud Manager 또는 Ops Manager를 사용 중이거나 사용할 계획이 있는 경우, 액세스 제어를 실행하려면 Cloud Manager 설명서 또는 Ops Manager 설명서를 참조하세요.
고려 사항
중요
변경된 IP 주소로 인해 구성이 업데이트되는 것을 방지하려면 IP 주소 대신 DNS 호스트 이름을 사용하세요. 특히 복제본 세트 구성원 또는 샤딩된 클러스터 구성원을 구성할 때 IP 주소 대신 DNS 호스트 이름을 사용하는 것이 중요합니다.
IP 주소 대신 호스트 이름을 사용하여 스플릿 네트워크 호라이즌 전반에 걸쳐 클러스터를 구성하세요. MongoDB 5.0부터 IP 주소로만 구성된 노드는 스타트업 유효성 검사에 실패하며 시작되지 않습니다.
IP 바인딩
mongod
mongos
{ 2} 및 는 기본적으로 로컬 호스트에 바인딩됩니다. 배포 구성원이 다른 호스트에서 실행되거나 원격 클라이언트를 배포에 연결하려는 경우 --bind_ip
또는 net.bindIp
를 지정해야 합니다.
운영 체제
이 자습서에서는 주로 mongod
프로세스를 참조합니다. 윈도우 사용자는 mongod.exe
프로그램을 대신 사용해야 합니다.
키 파일 보안
키파일은 관리 용이성 및 암호화 강도 측면에서 제한이 있으므로 테스트 및 개발 환경에서만 사용하는 것이 좋습니다. 프로덕션 환경에서는 x를509 사용할 것을 적극 권장합니다. 인증서 . 키파일은 제어된 특정 시나리오에서는 안전할 수 있지만 복잡한 배포에서는 확장성 및 관리 문제가 발생합니다. x.509 인증서는 더욱 강력한 보안 기능을 제공하고, 더 나은 키 관리 를 활성화 하며, 개별 인증 을 지원 하고, 민감한 데이터 보호에 대한 업계 표준을 준수합니다.
사용자 및 인증 메커니즘
이 자습서는 admin
데이터베이스에 최소한의 관리 사용자를 만드는 방법만 다룹니다. 사용자 인증에는 기본 SCRAM 인증 메커니즘을 사용합니다. 시도-응답 보안 메커니즘은 테스트 또는 개발 환경에 가장 적합합니다. 프로덕션 환경의 경우 x.509 인증서 또는 자체 관리형 LDAP 프록시 인증(MongoDB Enterprise에서만 사용 가능) 또는 자체 관리형 배포에서 Kerberos 인증(MongoDB Enterprise에서만 사용 가능)을 사용하는 것이 좋습니다.
특정 인증 메커니즘에 대한 사용자 생성에 대한 자세한 내용은 특정 인증 메커니즘 페이지를 참조하세요.
사용자 생성 및 관리에 대한 권장사항은 ➤ 역할 기반 액세스 제어 구성을 참조하세요.
키 파일 액세스 제어가 포함된 새 복제본 세트 배포
중요
변경된 IP 주소로 인해 구성이 업데이트되는 것을 방지하려면 IP 주소 대신 DNS 호스트 이름을 사용하세요. 특히 복제본 세트 구성원 또는 샤딩된 클러스터 구성원을 구성할 때 IP 주소 대신 DNS 호스트 이름을 사용하는 것이 중요합니다.
IP 주소 대신 호스트 이름을 사용하여 스플릿 네트워크 호라이즌 전반에 걸쳐 클러스터를 구성하세요. MongoDB 5.0부터 IP 주소로만 구성된 노드는 스타트업 유효성 검사에 실패하며 시작되지 않습니다.
키 파일을 생성합니다.
키 파일 인증을 사용하면 복제본 세트의 각 mongod
인스턴스는 배포서버에서 다른 멤버를 인증하기 위한 공유 암호로 키 파일의 내용을 사용합니다. 올바른 키 파일을 가진 mongod
인스턴스만 복제본 세트에 참여할 수 있습니다.
참고
내부 멤버십 인증을 위한 키파일은 YAML 형식을 사용해 키파일에 여러 키를 허용합니다. YAML 형식은 다음 중 하나를 허용합니다.
단일 키 문자열(이전 버전과 동일)
키 문자열의 순서
YAML 형식은 텍스트 파일 형식을 사용하는 기존의 단일 키 키파일과 호환됩니다.
키 길이는 6~1024자 사이여야 하며, base64 세트의 문자만 포함할 수 있습니다. 복제본 세트의 모든 멤버는 하나 이상의 공통 키를 공유해야 합니다.
참고
UNIX 시스템에서는 키 파일에 그룹 또는 월드 권한이 없어야 합니다. Windows 시스템에서는 키 파일 권한이 확인되지 않습니다.
원하는 방법을 사용하여 키 파일을 생성할 수 있습니다. 예를 들어 다음 작업에서는 openssl
사용하여 공유 암호로 사용할 복잡한 의사 난수 1024자 문자열을 생성합니다. 그런 다음 chmod
사용하여 파일 소유자에게만 읽기 권한을 제공하도록 파일 권한을 변경합니다.
openssl rand -base64 756 > <path-to-keyfile> chmod 400 <path-to-keyfile>
키파일 사용에 대한 추가 세부 정보 및 요구 사항은 키파일을 참조하세요.
액세스 제어를 활성화한 상태에서 복제본 세트의 각 멤버를 시작합니다.
복제본 세트의 각 멤버에 대해 security.keyFile
구성 파일 설정 또는 --keyFile
명령줄 옵션을 사용하여 mongod
를 시작합니다. --keyFile
명령줄 옵션 또는 security.keyFile
구성 파일 설정과 함께 mongod
를 실행하면 자체 관리형 내부/멤버십 인증과 자체 관리형 배포서버에서 역할 기반 액세스 제어가 모두 실행됩니다.
구성 파일
구성 파일을 사용하는 경우 다음을 설정합니다.
security.keyFile
를 키 파일의 경로로 설정replication.replSetName
를 복제본 세트 이름으로 설정
구성에 필요한 추가 옵션을 포함합니다. 예를 들어 원격 클라이언트가 배포에 연결하거나 배포 멤버가 다른 호스트에서 실행되도록 하려면 net.bindIp
설정을 지정하세요.
security: keyFile: <path-to-keyfile> replication: replSetName: <replicaSetName> net: bindIp: localhost,<hostname(s)|ip address(es)>
구성 파일을 사용하여 mongod
를 시작합니다.
mongod --config <path-to-config-file>
구성 파일에 대한 자세한 내용은 구성 옵션을 참조하세요.
명령줄
명령줄 옵션을 사용하는 경우 다음 옵션을 사용하여 mongod
를 시작합니다.
--keyFile
를 키 파일 경로로 설정--replSet
를 복제본 세트 이름으로 설정
구성에 필요한 추가 옵션을 포함합니다. 예를 들어 원격 클라이언트를 배포에 연결하거나 배포 구성원이 다른 호스트에서 실행되도록 하려면 --bind_ip
를 지정합니다.
mongod --keyFile <path-to-keyfile> --replSet <replicaSetName> --bind_ip localhost,<hostname(s)|ip address(es)>
중요
변경된 IP 주소로 인해 구성이 업데이트되는 것을 방지하려면 IP 주소 대신 DNS 호스트 이름을 사용하세요. 특히 복제본 세트 구성원 또는 샤딩된 클러스터 구성원을 구성할 때 IP 주소 대신 DNS 호스트 이름을 사용하는 것이 중요합니다.
IP 주소 대신 호스트 이름을 사용하여 스플릿 네트워크 호라이즌 전반에 걸쳐 클러스터를 구성하세요. MongoDB 5.0부터 IP 주소로만 구성된 노드는 스타트업 유효성 검사에 실패하며 시작되지 않습니다.
명령줄 옵션에 대한 자세한 내용은 mongod
참고 페이지에서 확인하세요.
로컬 호스트 인터페이스를 통해 복제본 세트의 멤버에 연결합니다.
localhost 인터페이스를 통해 mongosh
를 mongod
인스턴스 중 하나에 연결합니다. mongod
인스턴스와 동일한 물리적 컴퓨터에서 mongosh
를 실행해야 합니다.
배포를 위해 생성된 사용자가 없기 때문에 로컬 호스트 인터페이스를 사용할 수 있습니다. 첫 번째 사용자 생성 후 localhost 인터페이스는 닫힙니다.
복제본 세트를 시작합니다.
mongosh
에서 rs.initiate()
메서드를 실행합니다.
rs.initiate()
는 선택 사항으로 복제본 세트 구성 문서를 가져올 수 있습니다. 복제본 세트 구성 문서에 다음을 포함합니다.
_id
필드는replication.replSetName
또는--replSet
옵션에 지정된 복제본 세트 이름으로 설정됩니다.복제본 세트의 각 멤버에 대한 문서가 있는
members
배열.
다음 예는 멤버가 3명인 복제본 세트를 초기화하는 예시입니다.
중요
복제본 세트에 대해 단 mongod
rs.initiate()
하나의 인스턴스에서만 를 실행합니다.
중요
변경된 IP 주소로 인해 구성이 업데이트되는 것을 방지하려면 IP 주소 대신 DNS 호스트 이름을 사용하세요. 특히 복제본 세트 구성원 또는 샤딩된 클러스터 구성원을 구성할 때 IP 주소 대신 DNS 호스트 이름을 사용하는 것이 중요합니다.
IP 주소 대신 호스트 이름을 사용하여 스플릿 네트워크 호라이즌 전반에 걸쳐 클러스터를 구성하세요. MongoDB 5.0부터 IP 주소로만 구성된 노드는 스타트업 유효성 검사에 실패하며 시작되지 않습니다.
rs.initiate( { _id : "myReplSet", members: [ { _id : 0, host : "mongo1.example.net:27017" }, { _id : 1, host : "mongo2.example.net:27017" }, { _id : 2, host : "mongo3.example.net:27017" } ] } )
rs.initiate()
는 투표를 트리거하고 멤버 중 하나를 프라이머리로 선출합니다.
계속하기 전에 프라이머리에 연결합니다. 프라이머리 멤버를 찾으려면 rs.status()
를 사용하세요.
사용자 관리자를 만듭니다.
중요
첫 번째 사용자를 만든 후에는 로컬 호스트 예외를 더 이상 사용할 수 없습니다.
첫 번째 사용자는 userAdminAnyDatabase
와 같은 다른 사용자를 만들 수 있는 권한이 있어야 합니다. 이렇게 하면 자체 관리형 배포의 Localhost 예외가 종료된 후 추가 사용자를 생성할 수 있습니다.
적어도 한 명의 사용자에게 사용자를 만들 수 있는 권한이 없는 경우 로컬 호스트 예외가 종료되면 새 권한으로 사용자를 만들거나 수정할 수 없으므로 필요한 작업에 액세스하지 못할 수 있습니다.
db.createUser()
메서드를 사용하여 사용자를 추가합니다. 사용자는 admin
데이터베이스에서 최소한 userAdminAnyDatabase
역할을 갖고 있어야 합니다.
사용자를 생성하려면 프라이머리에 연결되어 있어야 합니다.
다음 예에서는 admin
데이터베이스에 userAdminAnyDatabase
역할을 가진 fred
사용자를 만듭니다.
중요
시스템 보안을 보장하고 악의적인 액세스를 방지하거나 지연하려면 암호는 임의적이고 길며 복잡해야 합니다.
팁
메서드/명령 호출에서 암호를 직접 지정하는 대신 passwordPrompt()
메서드를 다양한 사용자 인증/관리 메서드/명령과 함께 사용하여 암호를 묻는 메시지를 표시할 수 있습니다. 그러나 이전 버전의 mongo
shell에서와 마찬가지로 비밀번호를 직접 지정할 수도 있습니다.
admin = db.getSiblingDB("admin") admin.createUser( { user: "fred", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
메시지가 표시되면 비밀번호를 입력합니다. 데이터베이스 관리 작업과 관련된 기본 제공 역할의 전체 목록은 데이터베이스 사용자 역할에서 확인하세요.
사용자 관리자로 인증합니다.
admin
데이터베이스에 인증합니다.
mongosh
에서는 db.auth()
를 사용하여 인증합니다. 예를 들어, 다음은 사용자 관리자 fred
를 인증하는 방법입니다.
팁
메서드/명령 호출에서 암호를 직접 지정하는 대신 passwordPrompt()
메서드를 다양한 사용자 인증/관리 메서드/명령과 함께 사용하여 암호를 묻는 메시지를 표시할 수 있습니다. 그러나 이전 버전의 mongo
shell에서와 마찬가지로 비밀번호를 직접 지정할 수도 있습니다.
db.getSiblingDB("admin").auth("fred", passwordPrompt()) // or cleartext password
또는 -u <username>
, -p <password>
및 --authenticationDatabase
매개 변수를 사용해 새로운 mongosh
인스턴스를 프라이머리 복제본 세트 구성원에 연결합니다.
mongosh -u "fred" -p --authenticationDatabase "admin"
클러스터 관리자를 만듭니다.
clusterAdmin
역할은 복제본 세트 구성과 같은 복제 작업에 대한 액세스를 부여합니다.
클러스터 관리자 사용자를 만들고 admin
데이터베이스에서 clusterAdmin
역할을 할당합니다.
팁
메서드/명령 호출에서 암호를 직접 지정하는 대신 passwordPrompt()
메서드를 다양한 사용자 인증/관리 메서드/명령과 함께 사용하여 암호를 묻는 메시지를 표시할 수 있습니다. 그러나 이전 버전의 mongo
shell에서와 마찬가지로 비밀번호를 직접 지정할 수도 있습니다.
db.getSiblingDB("admin").createUser( { "user" : "ravi", "pwd" : passwordPrompt(), // or cleartext password roles: [ { "role" : "clusterAdmin", "db" : "admin" } ] } )
메시지가 표시되면 비밀번호를 입력합니다.
복제본 세트 및 샤딩된 클러스터 작업과 관련된 기본 제공 역할의 전체 목록은 클러스터 관리 역할을 참조하세요.
추가 사용자 만들기(선택 사항).
클라이언트가 복제본 세트에 연결하고 상호 작용할 수 있도록 사용자를 생성합니다. 읽기 전용 및 읽기/쓰기 사용자를 생성할 때 사용할 수 있는 기본 제공 역할은 데이터베이스 사용자 역할에서 확인하세요.
추가 관리 사용자가 필요할 수도 있습니다. 사용자에 대한 자세한 내용은 자체 관리 배포의 사용자를 참조하세요.
x.509 내부 인증
내부 인증에 x.509를 사용하는 방법에 대한 자세한 내용은 자체 관리형 MongoDB의 멤버십 인증에 x.509 인증서 사용을 참조하세요.
키 파일 내부 인증 에서 x로 업그레이드 합니다.509 내부 인증, 키 파일 인증에서 자체 관리형 MongoDB 를 x로 업그레이드를 참조하세요.509 인증.