인증
이 페이지의 내용
MongoDB는 다양한 인증 메커니즘을 지원합니다.
이러한 각 인증 메커니즘에 대해 MongoDB 서버를 구성하는 방법에 대한 자세한 내용은 MongoDB의 온라인 설명서를 참조하세요.
사용자 및 사용자 관리 를 위한 Ruby 드라이버의 헬퍼에 대한 자세한 내용은 사용자 관리 튜토리얼을 참조하세요.
자격 증명 제공
인증이 활성화된 경우 새 클라이언트를 생성할 때 자격 증명을 제공합니다.
client = Mongo::Client.new([ '127.0.0.1:27017' ], user: 'test', password: '123', database: 'mydb' ) # If using a URI: client = Mongo::Client.new("mongodb://test:123@127.0.0.1:27017/mydb")
클라이언트 인스턴스에서 인증 자격 증명을 변경하여 Client#with
메서드를 사용하여 새 클라이언트를 얻을 수 있습니다.
authenticated_client = client.with( user: 'another-user', password: '123' )
클라이언트의 데이터베이스와 자격 증명을 한 번에 변경할 수도 있습니다.
authenticated_music_client = client.with( database: 'music', user:'test', password:'123' )
authSource
사용자의 인증 소스는 해당 사용자의 인증 자격 증명이 저장되는 데이터베이스입니다.
자격 증명이 지정될 때마다 사용자의 인증 소스를 지정할 수 있습니다.
client = Mongo::Client.new([ '127.0.0.1:27017' ], database: 'mydb', user: 'test', password: '123', auth_source: 'admin' ) # If using a URI: client = Mongo::Client.new("mongodb://test:123@127.0.0.1:27017/mydb?authSource=admin")
인증 소스를 지정하지 않으면 클라이언트가 기본값을 사용합니다. 기본 인증 소스는 연결에 사용되는 인증 메커니즘에 따라 달라집니다.
MONGODB-CR
, SCRAM-SHA-1
및 SCRAM-SHA-256
인증 메커니즘의 경우 기본 인증 소스는 클라이언트가 연결 중인 데이터베이스입니다. 데이터베이스를 지정하지 않으면 admin
데이터베이스가 기본 데이터베이스이므로 기본 인증 소스가 됩니다. PLAIN
메커니즘(LDAP)의 경우, 기본 인증 소스는 클라이언트가 연결 중인 데이터베이스입니다. 데이터베이스가 지정되지 않으면 $external
데이터베이스가 인증 소스로 사용됩니다. AWS
, GSSAPI
및 MONGODB_X509
메커니즘의 경우 인증 소스는 항상 $external
입니다.
SRV URI를 사용하여 클라이언트를 구성하는 경우 드라이버는 SRV 레코드에 해당하는 TXT DNS 레코드에서 URI 옵션을 찾습니다. 예를 들어 MongoDB Atlas는 일반적으로 admin
데이터베이스를 인증 소스로 사용하지만 데이터베이스가 TXT 레코드에서 URI 옵션으로 제공되기 때문에 SRV URI에는 지정되지 않습니다.
SRV URI를 사용하는 경우 SRV 쿼리와 TXT 쿼리가 별도로 수행됩니다. DNS 확인이 100% 신뢰할 수 없는 시스템에서 TXT 레코드 조회에 실패하면 드라이버가 잘못된 인증 소스를 사용할 수 있으므로 인증 오류가 발생할 수 있습니다. 안정적인 DNS 확인을 보장할 수 없는 경우 인증 소스를 SRV URI에서 URI 옵션으로 명시적으로 지정할 수 있습니다.
Mongo::Client.new("mongodb+srv://username:myRealPassword@cluster0.mongodb.net/test?w=majority&authSource=admin")
참고
메서드를 사용하여 with
데이터베이스를 변경하는 경우 인증 소스는 Client
적용되는 전체 옵션 세트를 사용하여 새 인스턴스에서 결정됩니다. 예를 들어 원래 클라이언트에 인증 소스가 지정된 경우 이 인증 소스는 with
호출에서 지정된 데이터베이스보다 우선합니다. 원래 클라이언트에 인증 소스가 지정되지 않은 경우 사용된 인증 메커니즘 규칙에 따라 새 데이터베이스가 새 인증 소스가 됩니다.
인증 메커니즘.
MongoDB는 이 섹션에 자세히 설명된 대로 여러 인증 메커니즘을 지원합니다. 사용할 인증 메커니즘은 클라이언트를 생성할 때 명시적으로 지정할 수 있습니다. 애플리케이션에서 인증 메커니즘을 제공하지 않는 경우 다음과 같이 선택됩니다.
MongoDB 4.0 이상의 경우 클라이언트는 서버와 SCRAM 메커니즘 협상을 수행합니다. 클라이언트 구성에 지정된 사용자가 SCRAM-SHA-256을 통한 인증을 허용하는 경우 SCRAM-SHA-256이 인증에 사용됩니다. 그렇지 않으면 SCRAM-SHA-1이 사용됩니다.
MongoDB 3.0부터 3.6까지는 SCRAM-SHA-1이 사용됩니다.
MongoDB 2.6의 경우 MONGODB-CR이 사용됩니다.
참고 사항:
X.509, Amazon Web Services, LDAP 및 Kerberos 인증 메커니즘은 항상 명시적으로 요청해야 합니다.
클라이언트가 연결 중인 MongoDB 서버가 SCRAM을 지원하는 경우, 인증 메커니즘이 명시적으로 지정되지 않은 경우 클라이언트는 SCRAM을 사용하여 인증을 시도합니다. MONGODB-CR을 사용하여 MongoDB 3.0 이상 서버에 인증하려면 MONGODB-CR 메커니즘을 명시적으로 요청해야 합니다.
SCRAM
SCRAM 인증 은 MongoDB의 기본 인증 메커니즘입니다. MongoDB에는 SCRAM-SHA-1 (MongoDB 3.0 부터 사용 가능) 및 SCRAM-SHA-256 (MongoDB 4.0 부터 사용 가능)의 두 가지 SCRAM 메커니즘이 있습니다. 인증 메커니즘이 지정되지 않았지만 사용자 자격 증명이 지정된 경우 드라이버는 3 서버에서 SCRAM 인증을 사용하려고 시도합니다.0 이상이며 서버 버전과 특정 사용자에 대해 정의된 메커니즘을 기반으로 사용할 메커니즘을 협상합니다(서버에서 사용자가 SCRAM-SHA-1 메커니즘만 허용하도록 구성할 수 있으며 SCRAM만 허용 -SHA-256 메커니즘 또는 둘 다).
SCRAM-SHA-1을 인증 메커니즘으로 명시적으로 지정하려면 다음과 같이 auth_mech: :scram
Ruby 클라이언트 옵션 또는 authMechanism
URI 옵션의 값으로 SCRAM-SHA-1
를 사용합니다.
client = Mongo::Client.new([ '127.0.0.1:27017' ], database: 'mydb', user: 'test', password: '123', auth_mech: :scram ) client = Mongo::Client.new("mongodb://test:123@127.0.0.1:27017/mydb?authMechanism=SCRAM-SHA-1")
SCRAM-SHA-256을 인증 메커니즘으로 명시적으로 지정하려면 다음과 같이 auth_mech: :scram256
Ruby 클라이언트 옵션 또는 authMechanism
URI 옵션의 값으로 SCRAM-SHA-256
를 사용합니다.
client = Mongo::Client.new([ '127.0.0.1:27017' ], database: 'mydb', user: 'test', password: '123', auth_mech: :scram256 ) client = Mongo::Client.new("mongodb://test:123@127.0.0.1:27017/mydb?authMechanism=SCRAM-SHA-256")
클라이언트 인증서(X.509)
드라이버는 TLS 협상 중에 X.509 인증서를 제공합니다. MONGODB-X509 인증 메커니즘은 이 인증서의 고유 주체 이름에서 검색된 사용자 이름을 인증합니다.
참고
사용자 이름은 인증서에서 검색되므로 사용자 이름을 지정할 필요가 없습니다. 사용자 이름을 지정하면 그대로 서버로 전송됩니다. 비밀번호를 입력하면 오류가 발생합니다.
이 인증 방법을 사용하려면 인증서 유효성 검사와 함께 TLS 연결을 사용해야 합니다.
클라이언트를 인증하려면 유효한 TLS 인증서와 비공개 암호화 키가 필요합니다. 이러한 파일은 별도의 파일로 저장하거나 하나의 파일(PEM 형식)에 함께 저장할 수 있습니다. 인증서와 비공개 키가 동일한 파일에 저장되어 있더라도 ssl_cert
및 ssl_key
옵션을 모두 클라이언트에 전달하여 해당 파일의 경로를 지정해야 합니다.
MongoDB에서 X.509 인증을 구성하는 방법에 대한 자세한 내용은 MongoDB 매뉴얼의 X.509 튜토리얼을 참조하세요.
client = Mongo::Client.new([ '127.0.0.1:27017' ], auth_mech: :mongodb_x509, ssl: true, ssl_cert: '/path/to/client.pem', ssl_key: '/path/to/client.pem', ssl_ca_cert: '/path/to/ca.pem' )
AWS
MongoDB Enterprise Edition과 서버 버전 4.4 이상이 필요합니다.
Amazon Web Services 인증 메커니즘은 Amazon Web Services ID 및 액세스 관리(IAM) 를 MongoDB 사용합니다. 및 Amazon Web Services Security Token Service(STS) 서버에 클라이언트의 ID를 증명합니다. Amazon Web Services 인증은 다음과 같이 작동합니다.
클라이언트는 Amazon Web Services IAM 자격 증명을 사용하여 MongoDB Server로 전송되는 서명을 생성합니다.
서버는 클라이언트의 서명을 사용하여 Amazon Web Services STS에 요청을 보냅니다.
STS 요청이 성공하면 클라이언트가 사용한 자격 증명에 해당하는 사용자 이름(엄밀히 말하면 IAM 사용자 또는 역할의 ARN)이 반환됩니다. IAM 사용자 ARN은 서버에서 정의된 사용자를 조회하는 데 사용되며 클라이언트는 이 사용자로 인증한 것으로 간주됩니다.
참고
다른 인증 메커니즘과 달리, 클라이언트를 생성할 때 애플리케이션이 제공하는 사용자 이름과 서버 사용자의 사용자 이름은 다릅니다. 클라이언트의 사용자 이름은 Amazon Web Services 액세스 키 ID이지만 서버의 사용자 이름은 IAM 사용자의 ARN입니다. 또는 액세스 키 ID에 해당하는 역할.
Amazon Web Services 자격 증명은 다음과 같이 구성됩니다.
액세스 키 ID입니다.
비밀 액세스 키입니다.
선택적 세션 토큰입니다.
Amazon Web Services IAM 자격 증명 을 사용한 인증 은(는) 액세스 키 ID 와 비밀 액세스 키를 사용합니다. 임시 Amazon Web Services IAM 자격 증명 을 사용한 인증 세 가지 구성 요소를 모두 사용합니다.
참고
드라이버는 네트워크를 통해 비밀 액세스 키 또는 세션 토큰을 전송하지 않습니다.
임시 자격 증명은 다음과 함께 사용됩니다.
Ruby 드라이버를 사용하면 일반 자격 증명과 임시 자격 증명을 Ruby 옵션 또는 URI 옵션으로 명시적으로 제공할 수 있습니다. 자격 증명이 명시적으로 제공되지 않으면 드라이버는 아래에 설명된 환경 변수와 EC2 인스턴스 및 ECS 작업 메타데이터 엔드포인트에서 자격 증명을 검색하려고 시도합니다.
명시적 자격 증명 제공
일반(임시) IAM 자격 증명은 다음과 같이 Ruby 옵션으로 제공할 수 있습니다.
client = Mongo::Client.new(['mongodb.example.com'], auth_mech: :aws, user: '<AWS-ACCESS-KEY-ID>', password: '<AWS-SECRET-ACCESS-KEY>', database: 'mydb', )
URI를 통해 제공할 수도 있습니다.
client = Mongo::Client.new( 'mongodb://<AWS-ACCESS-KEY-ID>:<AWS-SECRET-ACCESS-KEY>@mongodb.example.com/mydb?authMechanism=MONGODB-AWS')
참고
URI를 통해 자격 증명이 제공되는 경우 퍼센트로 이스케이프되어야 합니다.
임시 자격 증명을 제공하려면 다음과 같이 인증 메커니즘 속성에서 세션 토큰을 지정합니다.
client = Mongo::Client.new(['mongodb.example.com'], auth_mech: :aws, user: '<AWS-ACCESS-KEY-ID>', password: '<AWS-SECRET-ACCESS-KEY>', auth_mech_properties: { aws_session_token: '<AWS-SESSION-TOKEN>', }, database: 'mydb', )
임시 자격 증명은 URI를 통해 제공할 수도 있습니다.
client = Mongo::Client.new( 'mongodb://<AWS-ACCESS-KEY-ID>:<AWS-SECRET-ACCESS-KEY>@mongodb.example.com/mydb?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<AWS-SESSION-TOKEN>')
자격 증명 자동 검색
클라이언트는 환경이나 EC2 또는 ECS 메타데이터 엔드포인트에서 자격 증명을 검색할 수 있습니다. 자격 증명을 자동으로 검색하려면 Amazon Web Services 인증 메커니즘을 지정하되 사용자 이름이나 비밀번호는 지정하지 마십시오.
client = Mongo::Client.new(['mongodb.example.com'], auth_mech: :aws, database: 'mydb', ) # Using a URI: client = Mongo::Client.new( 'mongodb://mongodb.example.com/mydb?authMechanism=MONGODB-AWS')
드라이버는 지정된 순서대로 다음 소스에서 자격 증명을 얻으려고 시도합니다.
AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
및AWS_SESSION_TOKEN
환경 변수입니다. 이러한 환경 변수는 공식 Amazon Web Services Ruby SDK 및 Atlas CLI와 같은 다양한 Amazon Web Services 관련 라이브러리 및 도구에서 인식됩니다. 또한 Amazon Web Services Lambda 환경에서 실행할 때 정의됩니다.Amazon Web Services STS AssumeRoleWithWebIdentity 작업. 그러면 서비스 계정 토큰과 연결된 자격 증명이 반환됩니다. 이 메커니즘을 사용하려면 다음 환경 변수를 설정해야 합니다.
AWS_WEB_IDENTITY_TOKEN_FILE
- 서비스 계정 토큰이 포함된 파일의 경로입니다.AWS_ROLE_ARN
- 호출자가 맡는 역할의 Amazon 리소스 이름(ARN)입니다.AWS_ROLE_SESSION_NAME
(선택 사항) - 수임된 역할 세션의 식별자입니다. 생략하면 드라이버에서 임의의 이름을 생성합니다.
Amazon Web Services ECS 작업 메타데이터 엔드포인트. 그러면 컨테이너에 할당된 ECS 작업 역할과 연결된 자격 증명이 반환됩니다.
Amazon Web Services EC2 인스턴스 메타데이터 엔드포인트. 그러면 인스턴스에 할당된 EC2 인스턴스 역할과 연결된 자격 증명이 반환됩니다.
참고
모든 자격 증명을 제공하는 자격 증명 소스는 전체 자격 증명 세트를 제공해야 합니다. 예를 들어, AWS_ACCESS_KEY_ID
또는 AWS_SECRET_ACCESS_KEY
환경 변수 중 하나만 채워지고 다른 환경 변수는 채워지지 않으면 드라이버에서 오류가 발생합니다.
참고
애플리케이션이 EC 인스턴스의 ECS 컨테이너에서 실행2 중이고 컨테이너가 인스턴스 메타데이터에 액세스할 수 있는 경우 , 드라이버는 EC 인스턴스 메타데이터 엔드포인트에서 Amazon Web Services 인증 메커니즘에 대한 자격 증명을 검색하려고 시도하므로 ECS 작업을 검색할 수2 없는 경우 EC 인스턴스에 할당된 IAM2 역할로 인증할 수 있습니다. ECS 작업 엔드포인트의 역할 자격 증명.
LDAP(SASL PLAIN)
MongoDB Enterprise Edition이 필요합니다.
MongoDB Enterprise Edition은 경량 디렉토리 액세스 프로토콜 LDAP 를 사용하여 인증을 위임할 수 있는 LDAP 인증 메커니즘을 지원합니다. 서버.
경고
LDAP를 사용하는 경우 비밀번호는 일반 텍스트로 서버에 전송됩니다. 이러한 이유로 LDAP를 인증 메커니즘으로 사용할 때는 TLS를 활성화할 것을 강력히 권장합니다.
MongoDB에서 LDAP 인증을 구성하는 방법에 대한 자세한 내용은 MongoDB 매뉴얼의 SASL/LDAP 튜토리얼을 참조하세요.
client = Mongo::Client.new([ '127.0.0.1:27017' ], auth_mech: :plain, ssl: true, ssl_verify: true, ssl_cert: '/path/to/client.pem', ssl_ca_cert: '/path/to/ca.pem' )
Kerberos(GSSAPI)
MongoDB Enterprise Edition이 필요합니다.
Kerberos를 사용하도록 MongoDB 서버를 구성하려면 서버 Kerberos 설명서를 참조하세요.
Ruby MongoDB 드라이버와 함께 Kerberos 인증 메커니즘을 사용하려면 Kerberos 인증자를 구현하는 추가 라이브러리인 mongo_kerberos 를 사용합니다. - 을(를) 설치하고 로드해야 합니다. 이렇게 하려면 Gemfile
에 다음을 추가합니다.
gem 'mongo', '~> 2' gem 'mongo_kerberos', '~> 2'
... 애플리케이션 코드에 다음을 추가합니다.
require 'mongo' require 'mongo_kerberos'
자기공명영상( MRI)과 함께 Kerberos 인증을 사용하는 경우, 드라이버 구성에 비밀번호가 지정되지 않았으며 드라이버가 비밀번호를 MongoDB 서버로 전송하지 않습니다. 대신 드라이버 외부에서 Kerberos 세션을 설정해야 하며 드라이버가 이 세션을 사용하여 서버에 사용자의 ID를 증명합니다. 이 세션을 설정하려면 호스트 시스템이 Kerberos 인증을 위해 구성되어야 합니다.Kerberos 설명서 참조 또는 운영 체제 설명서에서 자세한 내용을 확인하세요. kinit 유틸리티 사용 Kerberos 세션을 설정합니다.
JRuby 와 함께 Kerberos 인증을 사용하는 경우, Kerberos 세션은 위에서 설명한 자기공명(MRI) 프로세스를 사용하여 드라이버 외부에서 설정할 수 있습니다. 또는 클라이언트 구성을 통해 비밀번호를 드라이버에 직접 제공하거나 java.security.auth.login.config
시스템 속성에 저장된 구성을 통해 키탭 파일 경로를 제공할 수 있습니다. 또한 Kerberos에 맞게 Java 런타임 환경을 구성해야 합니다.MongoDB Java 드라이버 Kerberos 설명서 를 참조하세요. 을(를) 참조하세요.
참고
서버 Kerberos 설명서에 따라, Kerberos 인증을 사용할 때는 MongoDB를 실행하는 호스트의 FQDN을 지정해야 합니다.
참고
MongoDB URI를 사용하는 경우 /
및 @
과 같은 특수 문자가 사용자 이름에 나타날 때 퍼센트 이스케이프 처리해야 합니다.
# Authenticate as appuser@MYREALM: client = Mongo::Client.new("mongodb://appuser%40MYREALM@myserver.mycompany.com:27017/mydb?authMechanism=GSSAPI") # Authenticate as myapp/appuser@MYREALM: client = Mongo::Client.new("mongodb://myapp%2Fappuser%40MYREALM@myserver.mycompany.com:27017/mydb?authMechanism=GSSAPI") # Authenticate using Ruby options: client = Mongo::Client.new(['myserver.mycompany.com:27017'], auth_mech: :gssapi, user: 'myapp/appuser@MYREALM')
MONGODB-CR
더 이상 사용되지 않음: MONGODB-CR 메커니즘은 MongoDB 3.6 부터 더 이상 사용되지 않으며 MongoDB 4.0 부터 제거되었습니다. 대신 SCRAM 인증 을 사용하세요.
MONGODB-CR은 버전 2.6까지 MongoDB의 기본 인증 메커니즘이었습니다.
메커니즘은 자격 증명을 사용하여 명시적으로 설정할 수 있습니다.
client = Mongo::Client.new([ '127.0.0.1:27017' ], database: 'mydb', user: 'test', password: '123', auth_mech: :mongodb_cr )
참고
클라이언트가 연결 중인 MongoDB 서버가 SCRAM을 지원하는 경우, 인증 메커니즘이 명시적으로 지정되지 않은 경우 클라이언트는 SCRAM을 사용하여 인증을 시도합니다. MONGODB-CR을 사용하여 MongoDB 3.0 이상 서버에 인증하려면 MONGODB-CR 메커니즘을 명시적으로 요청해야 합니다.