문서 메뉴

문서 홈애플리케이션 개발MongoDB 드라이버Ruby MongoDB Driver

인증

이 페이지의 내용

  • 자격 증명 제공
  • authSource
  • 인증 메커니즘.
  • SCRAM
  • 클라이언트 인증서(X.509)
  • AWS
  • LDAP(SASL PLAIN)
  • Kerberos(GSSAPI)
  • MONGODB-CR

MongoDB는 다양한 인증 메커니즘을 지원합니다.

이러한 각 인증 메커니즘에 대해 MongoDB Server를 구성하는 방법에 대한 자세한 내용은 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' )

사용자의 인증 소스는 해당 사용자의 인증 자격 증명이 저장되는 데이터베이스입니다.

자격 증명이 지정될 때마다 사용자의 인증 소스를 지정할 수 있습니다.

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-1SCRAM-SHA-256 인증 메커니즘의 경우 기본 인증 소스는 클라이언트가 연결 중인 데이터베이스입니다. 데이터베이스를 지정하지 않으면 admin 데이터베이스가 기본 데이터베이스이므로 기본 인증 소스가 됩니다. PLAIN 메커니즘(LDAP)의 경우, 기본 인증 소스는 클라이언트가 연결 중인 데이터베이스입니다. 데이터베이스가 지정되지 않으면 $external 데이터베이스가 인증 소스로 사용됩니다. AWS, GSSAPIMONGODB_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 인증 은 MongoDB의 기본 인증 메커니즘입니다. MongoDB에는 SCRAM-SHA-1(MongoDB 3.0부터 사용 가능)과 SCRAM-SHA-256(MongoDB 4.0부터 사용 가능)의 두 가지 SCRAM 메커니즘이 있습니다. 인증 메커니즘이 지정되지 않았지만 사용자 자격 증명이 지정된 경우, 드라이버는 서버 3.0 이상에서 SCRAM 인증을 사용하려고 시도하고 서버 버전 및 특정 사용자에 대해 정의된 메커니즘을 기반으로 사용할 메커니즘을 협상합니다( 서버에서 사용자가 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")

드라이버는 TLS 협상 중에 X.509 인증서를 제공합니다. MONGODB-X509 인증 메커니즘은 이 인증서의 고유 주체 이름에서 파생된 사용자 이름을 인증합니다.

이 인증 방법을 사용하려면 인증서 유효성 검사와 함께 TLS 연결을 사용해야 합니다.

클라이언트를 인증하려면 유효한 TLS 인증서와 비공개 암호화 키가 필요합니다. 이러한 파일은 별도의 파일로 저장하거나 하나의 파일(PEM 형식)에 함께 저장할 수 있습니다. 인증서와 비공개 키가 동일한 파일에 저장되어 있더라도 ssl_certssl_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' )

MongoDB Enterprise Edition과 서버 버전 4.4 이상이 필요합니다.

Amazon Web Services 인증 메커니즘은 Amazon Web Services Identity and Access Management(IAM) 을(를) 사용합니다. 및 Amazon Web Services 보안 토큰 서비스(STS) MongoDB Server에 클라이언트의 ID를 증명합니다. 간단히 말해서, Amazon Web Services 인증은 다음과 같이 작동합니다.

  1. 클라이언트는 Amazon Web Services IAM 자격 증명을 사용하여 MongoDB Server로 전송되는 서명을 생성합니다.

  2. 서버는 클라이언트의 서명을 사용하여 Amazon Web Services STS에 요청을 보냅니다.

  3. STS 요청이 성공하면 클라이언트가 사용한 자격 증명에 해당하는 사용자 이름(엄밀히 말하면 IAM 사용자 또는 역할의 ARN)이 반환됩니다. IAM 사용자 ARN은 서버에서 정의된 사용자를 조회하는 데 사용되며 클라이언트는 이 사용자로 인증한 것으로 간주됩니다.

참고

다른 인증 메커니즘과 달리, 클라이언트를 생성할 때 애플리케이션이 제공하는 사용자 이름과 서버 사용자의 사용자 이름은 다릅니다. 클라이언트의 사용자 이름은 Amazon Web Services 액세스 키 ID이지만 서버의 사용자 이름은 IAM 사용자의 ARN입니다. 또는 액세스 키 ID에 해당하는 역할.

Amazon Web Services 자격 증명은 다음과 같이 구성됩니다.

  • 액세스 키 ID입니다.

  • 비밀 액세스 키입니다.

  • 선택적 세션 토큰입니다.

AWS 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_KEYAWS_SESSION_TOKEN 환경 변수입니다. 이러한 환경 변수는 공식 Amazon Web Services Ruby SDK 및 Atlas CLI와 같은 다양한 Amazon Web Services 관련 라이브러리 및 도구에서 인식됩니다. 또한 Amazon Web Services Lambda 환경에서 실행할 때 정의됩니다.

  • Amazon Web Services ECS 작업 메타데이터 엔드포인트. 그러면 container에 할당된 ECS 작업 역할과 연결된 자격 증명이 반환됩니다.

  • AWS EC2 인스턴스 메타데이터 엔드포인트. 그러면 인스턴스에 할당된 EC2 인스턴스 역할과 연결된 자격 증명이 반환됩니다.

참고

모든 자격 증명을 제공하는 자격 증명 소스는 전체 자격 증명 세트를 제공해야 합니다. 예를 들어, AWS_ACCESS_KEY_ID 또는 AWS_SECRET_ACCESS_KEY 환경 변수 중 하나만 채워지고 다른 환경 변수는 채워지지 않으면 드라이버에서 오류가 발생합니다.

참고

애플리케이션이 EC2 인스턴스의 ECS container에서 실행 중이고 container가 인스턴스 메타데이터에 액세스할 수 있는 경우 인 경우 드라이버는 ECS 작업 엔드포인트에서 Amazon Web Services 인증 메커니즘에 대한 자격 증명을 검색하려고 시도하므로 ECS 작업 엔드포인트에서 ECS 작업 역할 자격 증명을 조회할 수 없는 경우 EC2 인스턴스에 할당된 IAM 역할로 인증할 수 있습니다.

MongoDB Enterprise Edition이 필요합니다.

MongoDB Enterprise Edition은 경량 디렉토리 액세스 프로토콜 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' )

MongoDB Enterprise Edition이 필요합니다.

MongoDB Server를 Kerberos를 사용하도록 구성하려면 서버 Kerberos 설명서를 참조하세요.

Kerberos 인증자를 구현하는 추가 라이브러리인 Ruby MongoDB 드라이버와 함께 Kerberos 인증 메커니즘을 사용하려면 - mongo_kerberos - 을(를) 설치하고 로드해야 합니다. 이렇게 하려면 Gemfile 에 다음을 추가합니다.

gem 'mongo', '~> 2'
gem 'mongo_kerberos', '~> 2'

... 애플리케이션 코드에 다음을 추가합니다.

require 'mongo'
require 'mongo_kerberos'

자기공명공( MRI)과 함께 Kerberos 인증을 사용하는 경우, 드라이버 구성에 암호가 지정되지 않았으며 드라이버가 암호를 MongoDB 서버로 전송하지 않습니다. 대신 드라이버 외부에서 Kerberos 세션을 설정해야 하며 드라이버가 이 세션을 사용하여 서버에 사용자의 ID를 증명합니다. 이 세션을 설정하려면 호스트 시스템이 Kerberos 인증을 위해 구성되어야 합니다. Kerberos 문서 참조 자세한 내용은 운영 체제 설명서를 참조하세요. kenit 유틸리티 사용 Kerberos 세션을 설정합니다.

JRuby 와 함께 Kerberos 인증을 사용하는 경우, 자기공명 영상(MRI)에 대해 위에서 설명한 프로세스를 사용하여 드라이버 외부에서 Kerberos 세션을 설정할 수 있습니다. 또는 클라이언트 구성을 통해 비밀번호를 드라이버에 직접 제공하거나 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 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 메커니즘을 명시적으로 요청해야 합니다.

←  클라이언트 생성모니터링 →