문서 메뉴
문서 홈
/ / /
PyMongo
/

인증 메커니즘.

이 페이지의 내용

  • 개요
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB-X509
  • MONGODB-AWS
  • MongoClient 자격 증명
  • 환경 변수
  • 공유 자격 증명 파일
  • Amazon Web Services 구성 파일
  • AssumeRole 요청
  • AssumeRoleWithWebIdentity
  • ECS 컨테이너 또는 EC2 인스턴스
  • API 문서

이 가이드에서는 PyMongo에서 사용자를 인증하는 데 사용할 수 있는 메커니즘에 대해 설명합니다.

중요

백분율 인코딩

퍼센트 인코딩 을 수행해야 합니다. 사용자 이름과 비밀번호를 MongoDB URI에 포함하기 전에 확인합니다. quote_plus() 메서드는 urllib.parse 모듈은 이 작업을 수행하는 한 가지 방법입니다. 예를 들어 quote_plus("and / or") 을(를) 호출하면 and+%2F+or string 이 반환됩니다.

사용자 이름이나 비밀번호를 인수로 MongoClient 에 전달할 때 퍼센트 인코딩하지 마세요.

SCRAM-SHA-256,RFC 7677 에 정의된 대로 는 MongoDB v 를 실행하는 MongoDB 배포의 기본 인증 메커니즘입니다.40 또는 그 이후 버전.

이 메커니즘으로 인증하려면 다음 연결 옵션을 설정합니다.

  • db_username: 인증할 사용자 이름입니다. 이 값을 연결 URI에 포함하기 전에 퍼센트 인코딩합니다.

  • db_password: 인증할 비밀번호입니다. 이 값을 연결 URI에 포함하기 전에 퍼센트 인코딩합니다.

  • authSource: 인증할 MongoDB database 입니다. 기본적으로 PyMongo는 연결 URI를 포함하는 경우 해당 데이터베이스에 대해 인증합니다. 그렇지 않으면 admin 데이터베이스에 대해 인증합니다.

  • authMechanism: SCRAM-SHA-256 로 설정합니다.

MongoClient 생성자에 인수를 전달하거나 연결 string 의 매개변수를 통해 두 가지 방법으로 이러한 옵션을 설정할 수 있습니다.

client = pymongo.MongoClient("mongodb://<hostname>:<port>",
username="<db_username>",
password="<db_password>",
authSource="<authentication database>",
authMechanism="SCRAM-SHA-256")
uri = ("mongodb://<percent-encoded db_username>:<percent-encoded db_password>"
"@<hostname>:<port>/?"
"authSource=<authentication database>"
"&authMechanism=SCRAM-SHA-256")
client = pymongo.MongoClient(uri)

SCRAM-SHA-1,RFC 5802 에 정의된 대로 는 MongoDB v 를 실행하는 MongoDB 배포의 기본 인증 메커니즘입니다. .36

이 메커니즘으로 인증하려면 다음 연결 옵션을 설정합니다.

  • db_username: 인증할 사용자 이름입니다. 이 값을 연결 URI에 포함하기 전에 퍼센트 인코딩합니다.

  • db_password: 인증할 비밀번호입니다. 이 값을 연결 URI에 포함하기 전에 퍼센트 인코딩합니다.

  • authSource: 인증할 MongoDB database 입니다. 기본적으로 PyMongo는 admin 데이터베이스에 대해 인증합니다.

  • authMechanism: "SCRAM-SHA-1" 로 설정합니다.

MongoClient 생성자에 인수를 전달하거나 연결 string 의 매개변수를 통해 두 가지 방법으로 이러한 옵션을 설정할 수 있습니다.

client = pymongo.MongoClient("mongodb://<hostname>:<port>",
username="<db_username>",
password="<db_password>",
authSource="<authentication database>",
authMechanism="SCRAM-SHA-1")
uri = ("mongodb://<percent-encoded db_username>:<percent-encoded db_password>"
"@<hostname>:<port>/?"
"authSource=<authentication database>"
"&authMechanism=SCRAM-SHA-1")
client = pymongo.MongoClient(uri)

TLS를 활성화하면 TLS 핸드셰이크 중에 PyMongo가 X.509 클라이언트 인증서를 MongoDB에 제공하여 신원을 증명할 수 있습니다. MONGODB-X509 인증 메커니즘은 이 인증서를 사용하여 클라이언트를 인증합니다.

이 메커니즘으로 인증하려면 다음 연결 옵션을 설정합니다.

  • tls: True 로 설정합니다.

  • tlsCertificateKeyFile: 클라이언트 인증서 및 비공개 키가 포함된 .pem 파일의 파일 경로입니다.

  • authMechanism: "MONGODB-X509" 로 설정합니다.

MongoClient 생성자에 인수를 전달하거나 연결 string 의 매개변수를 통해 두 가지 방법으로 이러한 옵션을 설정할 수 있습니다.

client = pymongo.MongoClient("mongodb://<hostname>:<port>",
tls=True,
tlsCertificateKeyFile="/path/to/client.pem",
authMechanism="MONGODB-X509")
uri = ("mongodb://<hostname>:<port>/?"
"tls=true"
"&tlsCertificateKeyFile=path/to/client.pem"
"&authMechanism=MONGODB-X509")
client = pymongo.MongoClient(uri)

중요

MONGODB-AWS 인증 메커니즘에는 MongoDB v4.4 이상이 필요합니다.

MONGODB-Amazon Web Services 인증 메커니즘은 Amazon Web Services IAM(Amazon Web Services ID 및 액세스 관리) 또는 Amazon Web Services Lambda 자격 증명을 사용하여 애플리케이션을 인증합니다. 인증에 MONGODB-AWS를 사용하려면 다음 예와 같이 aws 옵션을 사용하여 PyMongo를 설치해야 합니다.

python -m pip install pymongo[aws]

PyMongo 는 Python 용 Amazon Web Services SDK인 Boto3를 사용하여 자격 증명을 처리합니다. Boto3 는 나열된 순서대로 다음 소스에서 Amazon Web Services 자격 증명을 검색하려고 시도합니다.

  1. MongoClient 생성자에 전달된 명명된 인수 또는 연결 URI의 매개변수

  2. 환경 변수

  3. 공유 자격 증명 파일

  4. Amazon Web Services 구성 파일

  5. AssumeRole Amazon Web Services Security Token Service(STS)에 대한 요청

  6. AssumeRoleWithWebIdentity Amazon Web Services STS에 요청

  7. IAM 역할이 구성된 Amazon EC2 인스턴스의 인스턴스 메타데이터 서비스

다음 섹션에서는 PyMongo를 사용하여 이러한 소스에서 자격 증명을 검색하고 이를 사용하여 애플리케이션을 인증하는 방법을 설명합니다.

먼저, PyMongo 는 Amazon Web Services 자격 증명을 MongoClient 생성자에 명명된 인수로 또는 연결 URI의 일부로 전달했는지 확인합니다. 자격 증명을 MongoClient 에 전달하려면 다음 연결 옵션을 설정합니다.

  • username: 인증할 Amazon Web Services IAM 액세스 키 ID 입니다. 이 값을 연결 URI에 포함하기 전에 퍼센트 인코딩합니다.

  • password: Amazon Web Services IAM 시크릿 액세스 키입니다. 이 값을 연결 URI에 포함하기 전에 퍼센트 인코딩합니다.

  • authMechanism: "MONGODB-AWS" 로 설정합니다.

MongoClient 생성자에 인수를 전달하거나 연결 string 의 매개변수를 통해 두 가지 방법으로 이러한 옵션을 설정할 수 있습니다.

client = pymongo.MongoClient("mongodb://@<hostname>:<port>",
username="<AWS IAM access key ID>",
password="<AWS IAM secret access key>",
authMechanism="MONGODB-AWS")
uri = ("mongodb://<percent-encoded AWS IAM access key ID>:"
"<percent-encoded AWS IAM secret access key>"
"@<hostname>:<port>/?"
"&authMechanism=MONGODB-AWS")
client = pymongo.MongoClient(uri)

MongoClient 객체를 구성할 때 사용자 이름과 비밀번호를 제공하지 않으면 PyMongo 는 다음 환경 변수에서 Amazon Web Services 자격 증명을 검색하려고 시도합니다.

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

  • AWS_SESSION_TOKEN

이러한 환경 변수를 사용하여 애플리케이션을 인증하려면 먼저 다음 코드 예제와 같이 인증에 필요한 Amazon Web Services IAM 값으로 설정합니다.

export AWS_ACCESS_KEY_ID=<AWS IAM access key ID>
export AWS_SECRET_ACCESS_KEY=<AWS IAM secret access key>
export AWS_SESSION_TOKEN=<AWS session token>

중요

이러한 환경 변수의 값은 퍼센트 인코딩하지 마세요.

이러한 환경 변수를 설정한 후 authMechanism 연결 옵션을 "MONGODB-AWS" 로 설정합니다. MongoClient 생성자에 인수를 전달하거나 연결 string 의 매개변수를 통해 이 옵션을 설정할 수 있습니다.

client = pymongo.MongoClient("mongodb://<hostname>:<port>",
authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS"
client = pymongo.MongoClient(uri)

AWS Lambda

AWS Lambda 런타임은 초기화 중에 이러한 환경 변수를 자동으로 설정할 수 있습니다. AWS Lambda 환경에서 환경 변수를 사용하는 방법에 대한 자세한 내용은 Lambda 환경 변수 사용 을 참조하세요. AWS 설명서에 있습니다.

PyMongo 가 앞의 환경 변수에서 Amazon Web Services 자격 증명을 찾지 못하면 공유 자격 증명 파일에서 읽으려고 시도합니다.

공유 자격 증명 파일을 사용하여 애플리케이션을 인증하려면 파일이 환경에 존재하고 올바르게 구성되어 있는지 확인합니다. 공유 자격 증명 파일을 만드는 방법을 알아보려면 자격 증명 을 참조하세요.3 Boto 문서 및 구성 Amazon Web Services 문서에서 확인 가능합니다.

공유 자격 증명 파일을 생성한 후 authMechanism 연결 옵션을 "MONGODB-AWS" 로 설정합니다. MongoClient 생성자에 인수를 전달하거나 연결 string 의 매개변수를 통해 이 옵션을 설정할 수 있습니다.

client = pymongo.MongoClient("mongodb://<hostname>:<port>",
authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS"
client = pymongo.MongoClient(uri)

PyMongo가 인증에 공유 자격 증명 파일을 사용하지 못하도록 하려면 다음 작업 중 하나를 수행합니다.

  • 터미널에서 AWS_SHARED_CREDENTIALS_FILE 환경 변수를 "" (으)로 설정합니다.

  • 스크립트 또는 애플리케이션에 os.environ["AWS_SHARED_CREDENTIALS_FILE"] = "" 을(를) 추가합니다.

  • 특히 MongoDB 자격 증명을 위한 Amazon Web Services 프로필을 생성합니다. AWS_PROFILE 환경 변수를 생성한 프로필의 이름으로 설정합니다.

PyMongo 가 공유 자격 증명 파일에서 자격 증명을 찾지 못하면 Amazon Web Services 구성 파일에서 읽으려고 시도합니다.

Amazon Web Services 구성 파일을 사용하여 애플리케이션을 인증하려면 파일이 환경에 존재하고 올바르게 구성되어 있는지 확인합니다. Amazon Web Services 구성 파일을 만드는 방법을 알아보려면 자격 증명 을 참조하세요.3 Boto 문서 및 구성 Amazon Web Services 문서에서 확인 가능합니다.

구성 파일을 만든 후 authMechanism 연결 옵션을 "MONGODB-AWS" 로 설정합니다. MongoClient 생성자에 인수를 전달하거나 연결 string 의 매개변수를 통해 이 옵션을 설정할 수 있습니다.

client = pymongo.MongoClient("mongodb://<hostname>:<port>",
authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS"
client = pymongo.MongoClient(uri)

Amazon Web Services 구성 파일에 Amazon Web Services 자격 증명을 저장하는 대신, Amazon Web Services STS 엔드포인트에 AssumeRole 요청을 하도록 PyMongo 에 지시할 수 있습니다. 이 요청은 애플리케이션이 인증에 사용할 수 있는 임시 자격 증명을 반환합니다.

AssumeRole 요청에서 반환된 임시 Amazon Web Services IAM 자격 증명으로 인증하려면 Amazon Web Services 구성 파일이 사용자 환경에 있고 올바르게 구성되어 있는지 확인합니다. Amazon Web Services 구성 파일을 생성하고 구성하는 방법을 알아보려면 자격 증명 을 참조하세요.3 Boto 문서 및 구성 Amazon Web Services 문서에서 확인 가능합니다.

구성 파일을 생성한 후 다음 연결 옵션을 설정합니다.

  • username: AssumeRole 요청에서 반환된 인증을 위한 Amazon Web Services IAM 액세스 키 ID 입니다. 이 값을 연결 URI에 포함하기 전에 퍼센트 인코딩합니다.

  • password: AssumeRole 요청에서 반환된 Amazon Web Services IAM 시크릿 액세스 키입니다. 이 값을 연결 URI에 포함하기 전에 퍼센트 인코딩합니다.

  • authMechanismProperties: AWS_SESSION_TOKEN: 로 설정하고 AssumeRole 요청에 의해 반환된 AWS 세션 토큰으로 설정합니다.

  • authMechanism: "MONGODB-AWS" 로 설정합니다.

MongoClient 생성자에 인수를 전달하거나 연결 string 의 매개변수를 통해 두 가지 방법으로 이러한 옵션을 설정할 수 있습니다.

참고

authMechanismProperties 값에 쉼표가 포함된 경우 MongoClient 생성자를 사용하여 인증 옵션을 설정해야 합니다.

client = pymongo.MongoClient("mongodb://@<hostname>:<port>",
username="<AWS IAM access key ID>",
password="<AWS IAM secret access key>",
authMechanismProperties="AWS_SESSION_TOKEN:<AWS session token>",
authMechanism="MONGODB-AWS")
uri = ("mongodb://<percent-encoded AWS IAM access key ID>:"
"<percent-encoded AWS IAM secret access key>"
"@<hostname>:<port>/?"
"authMechanismProperties=AWS_SESSION_TOKEN:<AWS session token>"
"&authMechanism=MONGODB-AWS")
client = pymongo.MongoClient(uri)

AssumeRole 요청을 사용하여 애플리케이션을 인증하는 방법에 대한 자세한 내용은 다음 Amazon Web Services 설명서를 참조하세요.

중요

애플리케이션은 EKS 지원을 위해 pymongo_auth_aws v1.1.0 이상을 사용해야 합니다.

애플리케이션이 OIDC(OpenID Connect) ID 제공자로부터 EKS 클러스터의 사용자를 인증하는 경우, PyMongo 는 AssumeRoleWithWebIdentity 요청을 통해 OIDC 토큰을 애플리케이션의 임시 Amazon Web Services 자격 증명으로 교환할 수 있습니다.

AssumeRoleWithWebIdentity 요청에서 반환된 임시 Amazon Web Services IAM 자격 증명으로 인증하려면 Amazon Web Services 구성 파일이 사용자 환경에 있고 올바르게 구성되어 있는지 확인합니다. Amazon Web Services 구성 파일을 생성하고 구성하는 방법을 알아보려면 자격 증명 을 참조하세요.3 Boto 문서 및 구성 Amazon Web Services 문서에서 확인 가능합니다.

AssumeRoleWithWebIdentity 요청에 대한 환경을 구성한 후 authMechanism 연결 옵션을 "MONGODB-AWS" 로 설정합니다. MongoClient 생성자에 인수를 전달하거나 연결 string 의 매개변수를 통해 이 옵션을 설정할 수 있습니다.

client = pymongo.MongoClient("mongodb://<hostname>:<port>",
authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS"
client = pymongo.MongoClient(uri)

AssumeRoleWithWebIdentity 요청을 사용하여 애플리케이션을 인증하는 방법에 대한 자세한 내용은 다음 Amazon Web Services 설명서를 참조하세요.

애플리케이션이 Elastic Container Service(ECS) 컨테이너의 Amazon Elastic Cloud Compute(EC2) 인스턴스에서 실행되는 경우, PyMongo 는 ECS 엔드포인트에서 임시 Amazon Web Services 자격 증명을 자동으로 검색할 수 있습니다.

EC2 인스턴스 내에서 임시 자격 증명을 사용하려면 authMechanism 연결 옵션을 "MONGODB-AWS" 로 설정합니다. MongoClient 생성자에 인수를 전달하거나 연결 string 의 매개변수를 통해 이 옵션을 설정할 수 있습니다.

client = pymongo.MongoClient("mongodb://<hostname>:<port>",
authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS"
client = pymongo.MongoClient(uri)

PyMongo에서 애플리케이션을 인증하는 방법에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.

돌아가기

데이터 보안 유지

다음

엔터프라이즈 인증 메커니즘