AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.

Atlas 앱 Connections와 앱 통합

Atlas 앱 Connections는 사용자가 위임한 액세스를 통해 애플리케이션이 Atlas 사용자를 대신하여 작업을 수행할 수 있도록 하는 MongoDB Atlas OAuth 2.1 플랫폼입니다. 사용자가 애플리케이션을 승인하면 애플리케이션은 사용자가 Atlas 조직에서 보유한 것과 동일한 권한으로 Atlas Administration API를 호출하는 데 사용할 수 있는 토큰 세트를 받습니다. 플랫폼에 대한 개요와 조직이 연결된 애플리케이션을 관리하는 방법에 대한 자세한 내용은 Atlas 앱 Connections 개요를 참조하세요.

이 가이드에서는 전체 통합을 다룹니다.

  • OAuth 2.1 초기화 중 코드 교환을 위한 증명 키(PKCE)를 사용한 권한 부여 코드 흐름

  • 권한 부여 코드를 토큰으로 교환하고 토큰 새로 고침

  • 위임된 액세스를 사용하여 Atlas Administration API 사용

  • 위임된 액세스의 범위 및 제한 이해

  • 네트워크 액세스 구성 및 데이터베이스 사용자 관리

  • 취소 및 오류 처리

위임된 액세스
애플리케이션은 자체적으로가 아니라 Atlas user를 대신하여 작업을 수행합니다. 사용자 자신의 조직 역할 및 프로젝트 권한에 따라 작업 성공 여부가 결정됩니다. 사용자가 조치를 수행할 수 없는 경우, 애플리케이션도 사용자를 대신하여 해당 조치를 수행할 수 없습니다.
조직 위임 설정
각 Atlas 조직은 타사 앱 연결 허용 여부를 제어합니다. 사용자가 애플리케이션에 권한을 부여하더라도 특정 조직에 대한 작업은 해당 조직에서 타사 앱 연결이 활성화된 경우에만 성공합니다. 위임은 기존 조직에 대해 기본적으로 비활성화되어 있습니다. 사용자는 여러 조직에 속할 수 있으므로 각 조직의 위임 설정에 따라 단일 권한 부여가 사용자의 일부 조직에서는 성공하고 다른 조직에서는 실패할 수 있습니다.
코드 교환의 증명 키(PKCE)
OAuth 2.1에 대한 보안 확장 권한 부여 코드 가로채기 공격으로부터 보호하는 권한 부여 코드 흐름입니다. PKCE를 사용하려면 클라이언트가 임의의 code_verifier를 생성하고, 이로부터 code_challenge를 도출한 다음, 권한 부여 요청과 함께 과제를 전송해야 합니다. 그런 다음 클라이언트는 권한 부여 코드를 토큰으로 교환할 때 원본 code_verifier을(를) 보내 자신이 요청을 시작했음을 증명합니다.

시작하기 전에 다음 사항을 확인하세요.

  • 디자인 제휴하다 상태 승인.

  • 등록된 OAuth 애플리케이션입니다. MongoDB는 온보딩 중에 client_id을(를) 제공합니다. 기밀 클라이언트(서버 측 웹 애플리케이션)도 client_secret을(를) 받습니다. 공용 클라이언트(네이티브 및 단일 페이지 애플리케이션)는 client_id 으로만 인증하며 비밀을 받지 않습니다.

  • OAuth 애플리케이션에 등록된 리디렉션 URI. 루프백 주소(localhost, 127.0.0.1, ::1)를 제외한 모든 리다이렉트 URI는 HTTPS를 사용해야 합니다. 루프백 주소는 어떤 포트에서든 HTTP를 사용할 수 있습니다. Redirect URI는 프래그먼트(#)를 포함할 수 없습니다.

  • OAuth 2.1 에 대한 이해 권한 부여 코드 흐름 및 PKCE(Proof Key for Code Exchange).

통합을 위해 MongoDB 로고와 같은 MongoDB 브랜딩 자산이 필요한 경우 MongoDB 브랜드 리소스 페이지를 참조하세요.

프로덕션 환경에서 통합을 개발하고 출시하세요. Atlas는 별도의 제휴 환경을 제공하지 않습니다.

모든 OAuth 및 API 엔드포인트는 두 개의 프로덕션 기본 URL을 사용합니다.

Base
URL

권한 부여 기반({OAUTH_BASE})

https://authorize.mongodb.com

클라우드 기반 ({CLOUD_BASE})

https://cloud.mongodb.com

이 가이드 전체에서 이러한 이름은 위의 URL을 대신합니다. 예시, 토큰 엔드포인트는 {OAUTH_BASE}/tokens입니다.

사용자가 로그인하고 액세스 권한을 부여하는 권한 부여 엔드포인트는 클라우드 기반({CLOUD_BASE}/oauth/authorize)에서 호스팅되는 반면, 토큰 및 기타 OAuth 엔드포인트는 권한 부여 기반({OAUTH_BASE})에서 호스팅됩니다. 이 분할은 의도적인 것입니다. Atlas Administration API는 클라우드 기반({CLOUD_BASE}/api/atlas)에서 호스팅됩니다.

팁

엔드포인트 자동 검색

Atlas는 {OAUTH_BASE}/.well-known/oauth-authorization-server에서 OAuth 2.1 서버 메타데이터를 게시합니다. 많은 OAuth 클라이언트 라이브러리와 SDK는 이 엔드포인트를 읽어 권한 부여, 토큰 및 관련 엔드포인트를 자동으로 검색하고 구성할 수 있으므로 엔드포인트 URL을 하드코딩할 필요가 없습니다.

Atlas 앱 Connections는 OAuth 2.1을 사용합니다. PKCE(Proof Key for Code Exchange)를 사용한 권한 부여 코드 흐름. 이 흐름에는 사용자 상호 작용이 필요합니다. 사용자가 Atlas에 로그인하고 애플리케이션이 요청하는 권한을 승인해야 합니다.

흐름은 세 단계로 진행됩니다.

  1. 애플리케이션이 PKCE 코드 검증기와 과제를 생성하고 사용자를 Atlas 권한 부여 엔드포인트로 리디렉션하면 사용자가 동의 화면에서 액세스를 승인합니다.

  2. 애플리케이션은 권한 부여 코드를 액세스 토큰 및 새로 고침 토큰으로 교환합니다.

  3. 애플리케이션은 액세스 토큰을 사용하여 Atlas Administration API를 호출하고, 액세스 토큰이 만료되기 전에 새로 고침 토큰을 사용하여 새 액세스 토큰을 얻습니다.

다음 매개변수를 사용하여 사용자를 Atlas 권한 부여 엔드포인트(https://cloud.mongodb.com/oauth/authorize)로 안내합니다. 애플리케이션이 이 엔드포인트를 표시하는 방법(기존 창 내 리디렉션, 새 브라우저 창 또는 팝업)은 사용자가 제어합니다.

Parameter
필수 사항
설명

response_type

필수 사항

code이어야 합니다.

client_id

필수 사항

온보딩 과정에서 MongoDB가 제공한 애플리케이션의 클라이언트 ID입니다.

redirect_uri

필수 사항

사용자가 승인한 후 Atlas가 권한 부여 코드를 보내는 HTTPS URI입니다. OAuth 애플리케이션에 등록된 URI와 일치해야 합니다.

code_challenge

필수 사항

code_verifier에서 파생된 PKCE 코드 과제입니다. code_verifier로 사용할 43~ 128자 길이의 임의 string을 생성한 다음 BASE64URL(SHA256(code_verifier))를 계산합니다.

code_challenge_method

필수 사항

S256이어야 합니다. plain 메서드는 지원되지 않으며 거부됩니다.

state

필수 사항

애플리케이션이 권한 부여 요청과 콜백 간의 상태를 유지하는 데 사용하는 불투명한 값입니다. 이를 사용하여 사이트 간 요청 위조(CSRF) 공격으로부터 보호하고 리디렉션 후 애플리케이션 상태를 복원하세요.

이전 표에 있는 매개변수만 전송하세요. 권한 부여 엔드포인트는 resource 매개변수를 요구하지 않으므로 OAuth 2.1 사양에 정의되어 있더라도 권한 부여 요청에서 생략하세요.

다음 예시는 가독성을 위해 URL을 여러 줄로 나눕니다. 한 줄로 보내세요:

https://cloud.mongodb.com/oauth/authorize ?response_type=code &client_id=<YOUR_CLIENT_ID> &redirect_uri=https://yourapp.example.com/callback &code_challenge=<CODE_CHALLENGE> &code_challenge_method=S256 &state=<RANDOM_STATE_VALUE>

사용자가 Atlas에 로그인하면 애플리케이션이 요청하는 권한이 나열된 동의 화면이 표시됩니다.

  • 액세스 권한이 있는 Atlas 리소스를 확인하세요

  • Atlas 조직에서 귀하를 대신하여 작업

동의 화면에는 사용자에게 다음과 같은 알림도 표시됩니다.

애플리케이션을 승인하면:

  • 귀하의 계정 권한을 사용하여 귀하와 마찬가지로 MongoDB Atlas 리소스에 액세스하고 조치를 취할 수 있도록 허용하는 것입니다.

  • 언제든지 액세스 권한을 취소할 수 있습니다.

사용자가 Authorize을(를) 클릭하면 Atlas는 권한 부여 code, 제공한 state 값, iss 매개변수와 함께 redirect_uri (으)로 리디렉션합니다. 사용자가 Decline을(를) 클릭하면 Atlas는 error 매개변수와 함께 리디렉션합니다.

콜백 핸들러는 다음을 수행해야 합니다.

  1. CSRF 공격을 방지하려면 state이(가) 권한 부여 요청에서 보낸 값과 일치하는지 확인하세요.

  2. 권한 부여 서버 혼동 공격을 방지하기 위해 iss이(가) 권한 부여 기반(https://authorize.mongodb.com)과 일치하는지 확인하세요.

  3. error 매개변수를 확인하고 code을(를) 사용하기 전에 거부 상황을 적절하게 처리하세요.

권한 부여 코드는 일회용이며 10 분 이내에 만료됩니다. 즉시 교환하세요.

Atlas 토큰 엔드포인트에 POST 요청을 보내 권한 부여 코드를 토큰으로 교환합니다.

POST https://authorize.mongodb.com/tokens
본문 매개변수
필수 사항
설명

grant_type

필수 사항

authorization_code이어야 합니다.

code

필수 사항

리디렉션에서 받은 권한 부여 코드입니다.

redirect_uri

필수 사항

권한 부여 요청에 사용된 것과 동일한 리디렉션 URI입니다.

code_verifier

필수 사항

원본 PKCE 코드 검증자 문자열입니다.

client_id

필수 사항

애플리케이션의 클라이언트 ID입니다.

client_secret

조건부

애플리케이션의 클라이언트 시크릿입니다. 기밀 클라이언트(서버 측 웹 애플리케이션)에만 필요합니다. 퍼블릭 클라이언트(네이티브 및 단일 페이지 애플리케이션)는 client_id 으로만 인증하며 이 매개변수는 생략합니다.

요청 예시:

curl --request POST \ --url https://authorize.mongodb.com/tokens \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data 'grant_type=authorization_code' \ --data 'code=<AUTHORIZATION_CODE>' \ --data 'code_verifier=<CODE_VERIFIER>' \ --data 'redirect_uri=https://yourapp.example.com/callback' \ --data 'client_id=<YOUR_CLIENT_ID>' \ --data 'client_secret=<YOUR_CLIENT_SECRET>'

응답에는 다음이 포함됩니다.

필드
유형
설명

access_token

문자열

Atlas Administration API 요청을 인증하기 위한 Bearer token입니다. 수명이 짧습니다. 수명을 하드코딩하는 대신 expires_in 값을 사용하여 새로 고침 시기를 결정하세요.

refresh_token

문자열

현재 액세스 토큰이 만료될 때 새 액세스 토큰을 얻는 데 사용되는 토큰입니다. 안전하게 저장하세요.

token_type

문자열

항상 Bearer.

expires_in

integer

액세스 토큰 수명(초)입니다. 현재 600 (10 분)입니다. 기본값은 변경될 수 있으므로 수명을 하드코딩하는 대신 이 값을 사용하여 새로 고침 시기를 결정하세요.

액세스 토큰은 수명이 짧습니다(현재 10 분). 만료 후 Atlas Administration API를 호출하기 전에 새로 고침 토큰을 새 액세스 토큰으로 교환하세요.

curl --request POST \ --url https://authorize.mongodb.com/tokens \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data 'grant_type=refresh_token' \ --data 'refresh_token=<YOUR_REFRESH_TOKEN>' \ --data 'client_id=<YOUR_CLIENT_ID>' \ --data 'client_secret=<YOUR_CLIENT_SECRET>'

응답은 항상 새로운 access_token 및 새로운 refresh_token을(를) 반환합니다. 이전 새로 고침 토큰은 즉시 무효화됩니다. 항상 저장된 두 값을 모두 바꿉니다.

중요

리프레시 토큰은 7 일 동안 비활성 상태일 때 만료됩니다(유휴 수명). 활동 여부와 관계없이 사용자는 30 일마다 다시 인증해야 합니다(최대 유효 기간). Organization Owner는 더 엄격한 제한을 설정할 수 있습니다. 새로 고침 토큰이 만료되면 사용자는 애플리케이션을 다시 승인해야 합니다. 사용자에게 다시 연결하라는 메시지를 표시하여 이 문제를 원활하게 처리하도록 애플리케이션을 설계하세요.

액세스 토큰을 얻은 후 Authorization 헤더에 포함하여 Atlas Administration API 요청을 수행하는 데 사용합니다.

Authorization: Bearer <ACCESS_TOKEN>

요청 예시:

curl --request GET \ --url 'https://cloud.mongodb.com/api/atlas/v2/orgs' \ --header 'Authorization: Bearer <ACCESS_TOKEN>' \ --header 'Accept: application/vnd.atlas.2023-01-01+json'

애플리케이션은 각 요청 시점에 권한을 부여하는 사용자가 보유한 것과 동일한 권한으로 작동합니다. 권한 부여 후 사용자의 역할이 변경되면 애플리케이션의 유효 권한도 그에 따라 변경됩니다.

특정 Atlas 조직에 대한 작업은 다음 두 가지가 모두 참인 경우에만 성공합니다.

  • 조직에 타사 앱 연결이 활성화되어 있습니다. Organization Owner는 Organization Settings > App Connections에서 이 설정을 구성합니다. 이러한 설정에 대해 자세히 알아보려면 Atlas 앱 연결 개요를 참조하세요.

  • 권한을 부여하는 사용자는 해당 조직 또는 프로젝트 내에서 작업에 필요한 역할을 가지고 있습니다.

사용자가 이미 애플리케이션을 승인한 후 조직에 대해 위임이 비활성화되면 해당 조직을 대상으로 하는 API 호출은 403 Forbidden 응답을 반환합니다.

권한 부여가 완료되었다고 해서 Atlas Administration API 호출이 성공하는 것은 아닙니다. Atlas는 권한 부여 시 한 번이 아니라 모든 요청 시 조직의 위임 설정과 사용자의 역할을 평가하므로 OAuth 흐름과 동의 화면은 깔끔하게 완료될 수 있지만 요청은 여전히 403 Forbidden을(를) 반환할 수 있습니다.

권한 부여 후 GET /api/atlas/v2/orgs을 호출하여 애플리케이션이 작업을 수행할 수 있는 조직을 확인합니다. Atlas는 삼자 앱 연결을 허용하는 조직만 반환합니다. 따라서 빈 목록은 사용자가 속한 조직 중 어떤 조직도 이를 활성하지 않았음을 의미합니다.

빈 목록은 실패가 아니라 설정 단계입니다. 사용자에게 Organization Owner에게 조직에 대한 앱 연결을 활성화하도록 요청하고 Atlas 앱 연결 개요를 참조하도록 안내하세요. 사용자의 자격 증명과 동의가 유효하므로 빈 목록을 권한 부여 또는 인증 오류로 표시하지 마세요.

위임된 액세스는 권한을 부여하는 사용자의 권한을 그대로 사용하므로, 쓰기 (write) 작업 역시 해당 사용자의 역할에 따라 달라집니다. 일반적인 프로비저닝 작업에는 다음 역할이 필요합니다.

Organization Member 역할만 보유한 사용자는 액세스 권한이 있는 리소스를 읽을 수 있지만 쓰기 (write) 작업은 403 Forbidden을(를) 반환합니다. 사용자가 올바른 역할을 요청할 수 있도록 오류 처리에서 필요한 역할을 지정하세요. 사용 가능한 모든 역할에 대해 학습하려면 Atlas user 역할을 참조하세요.

애플리케이션이 사용자를 대신하여 조직을 만들 때, 새 조직은 아직 제3자 앱 연결을 허용하지 않습니다. 이를 활성화하는 것은 수동 단계입니다. 조직을 허용 목록에 추가하려면 MongoDB에 문의하세요. 그때까지는 사용자가 애플리케이션에 권한을 부여했더라도 애플리케이션이 조직에 대해 작업을 수행할 수 없습니다.

위임된 액세스는 대부분의 Atlas Administration API 엔드포인트에 적용되지만, Atlas는 권한 부여 사용자의 권한과 관계없이 일부 엔드포인트를 다르게 처리합니다.

차단된 엔드포인트는 권한을 부여하는 사용자에게 일반적으로 작업을 허용하는 역할이 있는 경우에도 403 Forbidden 응답을 반환합니다. Atlas는 페더레이션 및 SSO(Single Sign-On) 구성을 읽고 수정하는 페더레이션 설정 엔드포인트를 차단합니다. 자격 증명 공급자 구성은 페더레이션의 모든 조직에서 공유되므로 이에 대한 위임된 액세스는 귀하의 애플리케이션을 승인하지 않은 조직을 노출하거나 방해할 수 있습니다.

필터 엔드포인트는 호출을 수락하지만, 타사 앱 연결에 동의한 조직에 따라 호출이 보고 변경할 수 있는 내용을 제한합니다. 애플리케이션은 해당 조직에만 도달할 수 있으며, Atlas는 옵트인하지 않은 조직의 리소스에 대한 액세스를 차단합니다.

사용자가 액세스할 수 있는 모든 조직, 프로젝트 또는 클러스터를 나열하는 엔드포인트와 같이 조직에 걸쳐 있는 엔드포인트는 타사 앱 연결을 허용하는 조직만 반환합니다. 리소스를 생성하는 요청의 경우 Atlas는 대상 조직의 유효성을 검사하고 해당 조직이 옵트인하지 않은 경우 호출을 거부합니다.

Organization Owner는 Organization Settings > App Connections에서 옵트인합니다. 자세한 내용은 권한 및 조직 위임 설정을 참조하세요.

Atlas는 시간이 지남에 따라 위임된 액세스에 대한 추가 엔드포인트를 차단하거나 필터링할 수 있습니다.

Atlas Administration API는 제어 평면 액세스를 제공합니다. 조직, 프로젝트, 클러스터, 사용자와 같은 Atlas 리소스를 생성, 구성 및 관리할 수 있습니다. 직접적인 데이터 평면 액세스(데이터베이스의 문서 읽기 또는 쓰기)는 제공하지 않습니다.

Atlas 클러스터의 데이터에 액세스하려면 Atlas Administration API를 통해 클러스터 연결 문자열을 조회하고 데이터베이스 사용자 및 MongoDB 드라이버 또는 shell을 사용하여 연결하세요. 연결 문자열과 데이터베이스 자격 증명은 OAuth Bearer token과 별개입니다.

취소는 컨트롤 플레인과 데이터 플레인 액세스에 다르게 영향을 미칩니다. 데이터 플레인 효과를 참조하세요.

위임된 액세스는 애플리케이션의 토큰을 권한을 부여하는 사용자와 연결합니다. 해당 사용자의 역할이 변경되거나, 사용자가 오프보딩되거나, 또는 사용자가 리프레시 토큰 수명 내에 재인증하지 않는 경우, 통합 자체는 여전히 활성 상태이더라도 애플리케이션은 필요한 권한을 잃게 됩니다.

예를 들어 클러스터 크기 조정이나 배포서버 리전 변경과 같이 특정 사용자의 권한 부여 상태에 의존하지 않는 지속적인 Atlas Administration API 액세스가 필요한 통합의 경우, 해당 워크플로에 대해 위임된 액세스에 의존하는 대신 고객의 조직 및 프로젝트에 대한 서비스 계정을 만드세요.

서비스 계정은 OAuth 2.0을 사용하여 인증합니다. 권한 부여 코드 흐름이 아닌 클라이언트 자격 증명 흐름을 사용하므로 사용자의 진행 중인 세션에 의존하지 않습니다. 각 서비스 계정은 하나의 조직에 속하며, 해당 조직 내의 프로젝트 수에 관계없이 액세스 권한을 부여할 수 있습니다. Atlas 역할은 사용자의 역할을 제한하는 것과 동일한 방식으로 서비스 계정의 액세스 토큰이 인증할 수 있는 작업을 제한합니다. 서비스 계정은 Atlas UI에 로그인할 수 없으며 위임된 액세스와 마찬가지로 데이터 평면 액세스를 제공하지 않습니다.

고객의 조직에 대한 서비스 계정을 만들려면 서비스 계정 개요 및 조직에 대한 서비스 계정 만들기를 참조하세요.

대부분의 제휴하는 통합은 권한을 부여하는 사용자를 대신하여 Atlas 리소스를 프로비저닝합니다. 다음 시퀀스는 승인된 연결에서 사용 가능한 연결 문자열로 이어지는 일반적인 경로를 다룹니다. 2각 요청은 3단계: 토큰 교환 의 Bearer token을 사용합니다.

1

GET /api/atlas/v2/orgs을 호출하여 권한을 부여받은 사용자가 액세스할 수 있는 조직을 나열한 다음, GET /api/atlas/v2/orgs/{orgId}/groups을 호출하여 조직 내의 프로젝트를 나열합니다.

타사 앱 연결을 허용하는 조직만 사용 가능한 대상으로 표시됩니다. 자세한 내용은 권한 및 조직 위임 설정을 참조하세요.

2

프로젝트 이름과 대상 조직의 orgId을(를) 사용하여 POST /api/atlas/v2/groups을(를) 호출합니다. Atlas는 요청 본문의 orgId을(를) 확인하고 해당 조직이 타사 앱 연결을 허용하지 않는 경우 403 Forbidden을(를) 반환합니다.

3

클러스터 이름, 클러스터 유형 및 복제 사양으로 POST /api/atlas/v2/groups/{groupId}/clusters을(를) 호출합니다. 클러스터 생성은 비동기식입니다. 클러스터의 stateName이(가) IDLE이(가) 될 때까지 GET /api/atlas/v2/groups/{groupId}/clusters/{clusterName}을(를) 폴링합니다.

4

애플리케이션이 데이터 평면 액세스에 사용하는 ID를 생성하려면 POST /api/atlas/v2/groups/{groupId}/databaseUsers을(를) 호출하세요. 역할 및 수명 주기 지침은 데이터베이스 사용자 수명 주기를 참조하세요.

5

애플리케이션의 아웃바운드 IP 주소를 프로젝트 액세스 목록에 추가하거나 프라이빗 연결 옵션을 구성하세요. 자세한 내용은 네트워크 구성 및 IP 허용 목록을 참조하세요.

6

클러스터 리소스에서 connectionStrings 필드를 읽은 후, 생성한 데이터베이스 사용자를 사용하여 MongoDB 드라이버로 연결합니다. 연결 문자열 및 데이터베이스 자격 증명은 OAuth Bearer token과 별개입니다.

각 엔드포인트의 요청 및 응답 스키마 전체는 Atlas Administration API Specification을 참조하세요.

Atlas Administration API는 공용 인터넷을 통해서만 사용할 수 있습니다. VPC(Virtual Private 클라우드) 피어링이나 비공개 엔드포인트를 통해서는 사용할 수 없습니다. 애플리케이션은 포트 443에서 cloud.mongodb.com에 도달할 수 있어야 합니다.

참고

Atlas Administration API에 대한 위임된 액세스는 고객이 구성한 제어 평면 API 액세스 목록(API 키 IP 허용 목록) 제한을 우회합니다. 액세스는 제어 평면 IP 제한이 아니라 권한을 부여하는 사용자의 권한과 조직의 위임 설정에 의해 관리됩니다. 자세한 내용은 제한 사항을 참조하세요.

데이터 평면 액세스의 경우, 연결하려는 Atlas 클러스터에 IP 액세스 목록이 구성되어 있을 수 있습니다. 애플리케이션의 아웃바운드 IP 주소를 클러스터의 IP 액세스 목록에 추가하거나, 배포서버에 적합한 네트워크 피어링 또는 비공개 엔드포인트를 구성해야 합니다.

초기 릴리스의 연결 패턴:

  • 애플리케이션은 데이터 평면 액세스를 위한 IP 허용 목록 구성을 담당합니다. 이는 Atlas 앱 Connections 플랫폼에서 자동으로 처리되지 않습니다.

  • 애플리케이션이 프로비저닝하거나 액세스하는 각 클러스터에 대해 POST /api/atlas/v2/groups/{groupId}/accessList 엔드포인트를 사용하여 아웃바운드 IP 또는 CIDR(Classless Inter-Domain Routing) 범위를 클러스터의 IP 액세스 목록에 추가합니다.

  • 데이터 평면을 공용 인터넷에 노출하지 마십시오. IP 액세스 목록 또는 네트워크 피어링이나 비공개 엔드포인트와 같은 비공개 연결을 사용하여 데이터 평면 액세스를 항상 제한하십시오.

사용자의 애플리케이션은 사용자를 대신하여 Atlas 클러스터를 프로비저닝할 때 데이터베이스 사용자를 생성하고 관리해야 할 수 있습니다. 초기 릴리즈에서는 다음 패턴이 지원됩니다.

인증 사용자의 Bearer token을 사용하여 Atlas Administration API 엔드포인트 POST /api/atlas/v2/groups/{groupId}/databaseUsers을 통해 데이터베이스 사용자를 생성합니다. 사용자는 데이터베이스 사용자 관리를 허용하는 프로젝트 역할을 보유해야 합니다.

  • 데이터베이스 사용자 제한을 준수하세요. Atlas는 프로젝트당 100 명의 데이터베이스 사용자라는 기본값 제한을 시행하다. 각 작업에 대해 새 사용자를 만드는 대신 가능한 경우 기존 데이터베이스 사용자를 재사용하고, 제한에 도달하지 않도록 더 이상 필요하지 않은 사용자를 프로비저닝 해제하세요.

  • 범위가 지정된 역할을 사용하세요. atlasAdmin 대신 사용 사례에 필요한 최소한의 데이터베이스 역할로 데이터베이스 사용자를 생성하세요.

  • 더 이상 필요하지 않을 때 사용자 계정을 해제합니다. 사용자가 애플리케이션에 대한 액세스를 취소하면, 애플리케이션이 사용자를 대신하여 생성한 모든 데이터베이스 사용자를 삭제합니다. Atlas는 액세스가 취소되면 데이터베이스 사용자를 자동으로 제거하지 않습니다.

  • 정해진 일정에 따라 자격 증명을 교체합니다. 애플리케이션이 데이터베이스 사용자 암호를 저장하는 경우 PATCH /api/atlas/v2/groups/{groupId}/databaseUsers/ {databaseName}/{username} 엔드포인트를 사용하여 정기적으로 암호를 교체하세요.

중요

사용자가 액세스 권한을 취소할 때 Atlas는 애플리케이션이 생성한 데이터베이스 사용자나 기타 리소스를 자동으로 삭제하지 않습니다. 애플리케이션이 생성한 리소스는 애플리케이션이 직접 정리해야 합니다. 데이터베이스 사용자를 프로비저닝 해제하지 않으면 사용자가 애플리케이션 연결을 끊은 후에도 해당 사용자의 Atlas 계정에서 자격 증명이 활성 상태로 유지됩니다. 자세한 내용은 제한 사항을 참조하세요.

Atlas가 애플리케이션이 프로비저닝한 리소스(예: 데이터베이스 사용자 비밀번호) 자격 증명을 변경하는 경우, 사용자가 자격 증명을 직접 업데이트할 필요 없이 선택 사항인 웹훅을 통해 애플리케이션에 알림을 보낼 수 있습니다. 이것은 OAuth client_secret 토큰을 로테이션하는 것과 관련이 없습니다. 이에 대해서는 토큰 및 시크릿 저장을 참조하십시오. 웹후크를 구현하려면 자격 증명 순환 웹후크 구현을 참조하십시오.

이 섹션에서는 통합 시 자격 증명 및 민감한 정보를 처리하기 위한 최소 보안 요구 사항을 설명합니다. 이러한 관행은 보안 사고의 영향을 줄이며 제휴 파트너에게 필요합니다.

애플리케이션은 저장 시 암호화되어야 하는 여러 범주의 민감한 정보를 처리합니다.

  • 연결 문자열. Atlas 연결 문자열에는 포함된 자격 증명이 포함되어 있거나 데이터베이스 사용자를 참조합니다. AES(Advanced Encryption Standard)-256 또는 동급의 암호화를 사용하여 저장된 모든 연결 문자열을 암호화합니다. 설정 파일, 환경 변수 저장소 또는 데이터베이스에 연결 문자열을 일반 텍스트로 저장하지 마십시오.

  • OAuth 토큰. 새로 고침 토큰은 수명이 긴 자격 증명입니다. 암호화됨 비밀 관리자(예시: HashiCorp Vault, Amazon Web Services(AWS) Secrets Manager 또는 Azure Key Vault)에 저장하세요. 암호화 없이 애플리케이션 데이터베이스에 새로 고침 토큰을 저장하지 마세요.

  • 클라이언트 비밀. client_secret은(는) 비밀번호와 동일합니다. 비밀 관리자에 저장하고 노출된 것으로 의심되는 경우 교체하십시오.

팁

비밀번호 없는 인증을 선호하세요

Atlas는 PKCE를 사용하는 비밀 없는 인증을 지원하므로 client_secret을(를) managed할 필요를 전혀 제거합니다. 클라이언트 유형이 허용하는 경우, 클라이언트 비밀을 프로비저닝하고 저장하는 대신 가장 안전한 옵션으로 비밀 없는 인증을 사용하세요.

애플리케이션이 사용자를 대신하여 Atlas Administration API에서 연결 문자열을 조회하는 경우:

  • 가능한 경우 연결 문자열을 장기간 저장하기보다는 필요할 때 조회하세요.

  • 애플리케이션이 연결 문자열을 유지해야 하는 경우, 자격 증명과 별도로 필요한 정보(예시: 호스트 이름 및 포트)만 저장하세요.

  • 연결 문자열을 로그에 기록하거나 오류 메시지 또는 스택 추적에 포함하지 마십시오.

  • 토큰이나 비밀 정보를 소스 제어에 커밋하지 마세요.

  • 액세스 토큰, 새로 고침 토큰 또는 클라이언트 비밀을 기록하지 마십시오. 애플리케이션이 디버깅을 위해 Atlas Administration API 요청을 기록하는 경우 Authorization 헤더를 수정하십시오.

  • secrets manager의 비밀에 대한 액세스 권한을 해당 비밀이 필요한 서비스로만 제한하세요.

  • client_secret을(를) 주기적으로, 그리고 침해가 의심되는 경우 즉시 교체하세요. OAuth 애플리케이션과 관련된 비밀을 교체하려면 MongoDB에 문의하세요.

탄력적인 통합을 설계하려면 취소 동작을 이해하는 것이 중요합니다. 취소는 여러 가지 방법으로 트리거될 수 있으며 제어 평면 및 데이터 평면 액세스에 다르게 영향을 미칩니다.

다음 조치 중 하나를 통해 취소할 수 있습니다.

  • Atlas UI(User Settings > Connected Apps)에서 사용자가 액세스 권한을 취소 합니다.

  • Organization Owner가 Organization Settings에서 전체 조직의 타사 앱 연결을 제한합니다.

  • 새로 고침 토큰이 만료되었습니다. 조직의 최대 새로 고침 토큰 수명에 도달했거나 토큰이 유휴 수명 제한을 초과하여 유휴 상태였기 때문입니다.

  • 애플리케이션은 액세스가 더 이상 필요하지 않을 때 자체 토큰을 취소합니다.

중요

위의 트리거는 OAuth 흐름을 통해 발급된 토큰을 취소합니다. 서비스 계정은 개별 사용자의 권한 부여와 연결되어 있지 않으므로 지속적인 액세스를 위해 생성한 서비스 계정에는 영향을 주지 않습니다(서비스 계정을 통한 지속적인 액세스 참조).

개별 사용자가 위임된 액세스를 취소하거나 조직에서 오프보딩되었다는 이유만으로 고객의 서비스 계정 자격 증명을 취소하거나 삭제하지 마십시오. 서비스 계정은 해당 사용자의 개별 액세스가 아니라 통합의 지속적인 권한 부여를 나타냅니다.

고객이 귀하의 제품에서 해당 조치가 의미하는 바에 따라 귀하의 통합을 삭제하거나 연결 해제할 때 서비스 계정의 자격 증명을 취소하십시오.

사용자가 자신의 인터페이스에서 애플리케이션 연결을 끊거나 통합에 더 이상 액세스 권한이 필요하지 않은 경우 토큰이 만료되도록 두지 말고 토큰을 취소하세요. 취소 엔드포인트에 POST 요청을 전송합니다.

curl --request POST \ --url https://authorize.mongodb.com/tokens/revoke \ --header 'Content-Type: application/x-www-form-urlencoded' \ --user '<YOUR_CLIENT_ID>:<YOUR_CLIENT_SECRET>' \ --data 'token=<REFRESH_OR_ACCESS_TOKEN>' \ --data 'token_type_hint=refresh_token'
Parameter
필수 사항
설명

token

필수 사항

취소할 액세스 토큰 또는 새로 고침 토큰입니다.

token_type_hint

옵션

access_token 또는 refresh_token 중 하나입니다. 서버가 토큰 조회를 최적화하도록 돕습니다.

리프레시 토큰을 취소하면 해당 토큰에서 발급된 모든 액세스 토큰도 무효화됩니다. 엔드포인트는 토큰의 유효 여부와 관계없이 200 OK을(를) 반환하므로, 성공 응답은 토큰이 존재했다는 증거가 아니라 더 이상 사용할 수 없다는 확인으로 간주해야 합니다.

취소 조치가 얼마나 빨리 적용되는지는 액세스를 취소하는 주체에 따라 다라집니다.

  • Organization Owner가 타사 앱 연결을 제한하는 경우: Atlas Administration API는 모든 호출 시 조직의 위임 설정을 확인하므로 해당 조직에 대한 요청은 즉시 403 Forbidden을(를) 반환하기 시작합니다.

  • 사용자가 애플리케이션의 액세스 권한을 취소하는 경우: 새로 고침 토큰은 즉시 무효화되지만 이미 발급된 액세스 토큰은 만료될 때까지 유효합니다. 액세스 토큰은 수명이 짧기 때문에 애플리케이션은 최대 10 분 동안 성공적인 호출을 할 수 있습니다. 그 이후에는 호출이 401 Unauthorized을(를) 반환합니다.

  • MongoDB가 OAuth 클라이언트를 삭제합니다: 취소는 애플리케이션이 연결된 모든 조직에 걸쳐 연쇄적으로 발생하며, 완료되는 데 최대 15 분이 소요됩니다.

401 및 403 응답을 즉각적인 전파에 의존하기보는 선제적으로 처리하도록 애플리케이션을 설계하세요.

Atlas Administration API 액세스를 취소해도 기존 데이터 평면 연결이 즉시 종료되지는 않습니다. 애플리케이션은 OAuth 토큰과 독립적인 자격 증명으로 인증하여 생성된 데이터베이스 사용자들을 통해 데이터 평면에 도달합니다. 토큰을 취소해도 해당 자격 증명은 무효화되지 않습니다. 열려 있는 MongoDB 드라이버 세션 및 연결 풀 연결은 시간 초과, 유휴 닫기 또는 애플리케이션에 의한 명시적 닫기와 같은 일반적인 연결 수명 주기 이벤트에 의해 닫힐 때까지 활성 상태로 유지됩니다.

취소는 애플리케이션이 생성한 데이터베이스 사용자를 제거하지 않으므로 연결 해제 흐름의 일부로 정리하세요. 자세히 알아보려면 데이터베이스 사용자 수명 주기를 참조하세요.

Scenario
상태
권장 조치

액세스 토큰이 만료되었습니다

401

새로 고침 토큰을 사용하여 새 액세스 토큰을 얻습니다.

액세스 토큰이 취소되었습니다

401

사용자에게 재인증을 요청하세요. 새로 고침 토큰도 무효화됩니다.

새로 고침 토큰이 만료되었거나 취소됨

400

사용자에게 재인증을 요청하세요. 권한 부여 코드 흐름을 다시 시작합니다.

잘못된 클라이언트 자격 증명

401

client_id 및 client_secret을(를) 확인하세요.

조직의 위임이 비활성화되었습니다.

403

사용자의 Atlas 조직에서 타사 앱 연결을 허용하지 않는다는 사실을 알립니다. Organization Owner에게 문의하도록 안내합니다.

차단된 엔드포인트

403

요청된 엔드포인트는 위임된 액세스를 통해 사용할 수 없습니다. 통합에서 호출을 제거합니다.

사용자에게 필요한 역할이 없습니다.

403

승인 사용자에게는 이 작업에 필요한 역할이 없습니다. 사용자에게 알리고 Organization Owner에게 필요한 역할을 요청하도록 제안합니다.

권한 부여 및 토큰 엔드포인트의 오류는 표준 OAuth 구조를 따릅니다.

{ "error": "error_code", "error_description": "Human-readable explanation"}

다음 표에는 일반적인 error 값이 나열되어 있습니다.

오류 코드
언제
권장 조치

invalid_request

필수 매개변수가 누락되었거나 형식이 잘못되었습니다.

필수 매개변수와 형식을 확인하십시오.

invalid_client

클라이언트 인증이 실패했습니다.

client_id 및 client_secret을(를) 확인하세요.

invalid_grant

권한 부여 코드가 만료되었거나 이미 사용되었거나, 또는 새로 고침 토큰이 유효하지 않습니다.

권한 부여 코드 흐름을 다시 시작합니다.

unauthorized_client

이 클라이언트는 이 권한 부여 유형에 대해 승인되지 않았습니다.

클라이언트 등록에 authorization_code이/가 포함되어 있는지 확인합니다.

access_denied

사용자가 동의를 거부했습니다.

사용자에게 알립니다. 자동으로 재시도하지 마십시오.

invalid_target

resource 매개변수가 잘못되었거나 누락되었습니다.

리소스가 클라이언트에 등록되어 있는지 확인합니다.

unsupported_token_type

token_type_hint 값이 유효하지 않습니다.

access_token 또는 refresh_token을 사용합니다.

동일한 권한 부여 코드가 두 번 이상 제시되면 서버는 코드 가로채기에 대한 보안 조치로 해당 권한 부여와 관련된 모든 토큰을 무효화합니다. 이 경우 사용자는 처음부터 다시 권한을 부여해야 합니다.

MongoDB는 예를 들어 사고 대응이나 파트너 오프보딩 중에 등록된 클라이언트를 비활성화할 수 있습니다. 클라이언트가 비활성화된 동안 서버는 새로운 권한 부여 흐름을 시작하거나 새 토큰을 발급하는 것을 거부합니다.

  • 권한 부여 엔드포인트는 사용자를 error=access_denied 및 client is disabled의 error_description와 함께 redirect_uri (으)로 리디렉션합니다.

  • 토큰 엔드포인트는 invalid_client 및 동일한 설명과 함께 401을(를) 반환합니다. 이는 refresh_token을(를) 포함한 모든 권한 부여 유형에 적용되므로, 애플리케이션이 비활성화된 동안에는 기존 새로 고침 토큰을 교환할 수 없습니다.

클라이언트가 비활성화되기 전에 발급된 액세스 토큰은 만료될 때까지 유효합니다. 클라이언트를 비활성화하면 기존 토큰이 무효화되는 대신 새 토큰이 차단됩니다.

비활성화된 클라이언트는 스스로 복구할 수 없습니다. client is disabled을(를) 터미널 조건으로 간주하세요. 재시도를 중지하고, 실패를 표시하고, 클라이언트를 다시 활성화하기 위해 MongoDB 파트너 팀에 문의하세요.

이 페이지 평가하기