개요
이 가이드 에서는 Atlas Agent Engine API 에 애플리케이션 을 인증하는 데 필요한 자격 증명 을 관리 방법을 학습 수 있습니다. Atlas Agent Engine은 API 경로에서 API 키와 서비스 계정 액세스 토큰을 허용합니다. 이러한 자격 증명 프로젝트 및 조직 관리 경로와 에이전트 호출 경로에서 작동합니다.
대신 agentengine CLI 사용하여 자신의 계정을 인증하려면 설치 및 인증을 참조하세요.
참고
공개 미리 보기 중 API 안정성
Atlas Agent Engine 공개 API 공개 미리 보기 중에 변경될 수 있습니다. 엔드포인트, 요청 형식 및 응답 형식은 이전 버전과 호환되는 마이그레이션 경로 없이 변경될 수 있습니다. 자동화 의존하는 agentengine CLI 버전을 고정하고 업그레이드 전에 출시하다 노트를 검토 .
공개 미리 보기 중에 적용 모든 제한 사항을 검토 하려면 MongoDB Atlas Agent 엔진 제한 사항을 참조하세요.
서비스 계정으로 인증
서비스 계정은 사람이 아닌 프로젝트 또는 조직 에 속하는 계정입니다. 애플리케이션 서버 자체 사용자를 대신하여 에이전트를 호출할 때 서비스 계정을 사용하여 애플리케이션 개별 자격 증명에 의존하지 않도록 합니다.
중요
서비스 계정 메모리 ID
서비스 계정이 배포된 에이전트 호출하면 Atlas Agent Engine은 서비스 계정의 자체 ID를 런타임 메모리 ID로 사용합니다. 플랫폼은 호출 요청 또는 agentengine invoke --user-id 플래그가 제공하는 모든 최종 사용자 user_id 값을 무시합니다.
자동 회전 기록, 추출, 통합 및 app.memory 작업은 이 확인된 ID를 사용합니다. 결과적으로 동일한 서비스 계정을 통해 인증하는 호출은 하나의 메모리 사용자 범위를 주식 .
이 제한은 서비스 계정이 호출하는 배포된 에이전트에만 적용됩니다. 독립형 프로젝트 범위 메모리 서비스는 영향을 받지 않습니다. 이 서비스는 호출자로부터 명시적인 user_id 및 session_id 값을 계속 받습니다.
최종 사용자별로 메모리를 격리하려면 애플리케이션 에서 독립형 메모리 서비스를 호출하고 각 호출에 명시적인 user_id 및 session_id 값을 전달합니다. 자세한 학습 은 독립형 메모리 서비스 사용을 참조하세요.
서비스 계정 만들기
이 섹션에서는 API, UI 및 agentengine CLI 사용하여 서비스 계정을 만드는 방법을 설명합니다.
프로젝트 범위의 서비스 계정을 생성하려면 프로젝트 에 대해 PROJECT_OWNER 역할 있어야 합니다.
API 사용
서비스 계정을 생성하려면 /api/v1/projects/{id}/service-accounts 엔드포인트에 POST 요청 보냅니다.
다음 요청에서 $SESSION_TOKEN는 Atlas Agent Engine에 로그인할 때 사용하는 사용자의 세션 토큰입니다. 서비스 계정의 액세스 토큰으로 서비스 계정을 관리 할 수 없습니다. Atlas Agent Engine은 세션 토큰에서 새 서비스 계정의 소유자를 정의하므로 서비스 계정을 생성, 순환, 비활성화 또는 제한하는 모든 요청 필요한 역할 보유한 로그인한 사용자로부터 이루어져야 합니다.
curl -s "https://agentengine.mongodb.com/api/v1/projects/$PROJECT_ID/service-accounts" \ -X POST \ -H "Authorization: Bearer $SESSION_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "my-app-server", "description": "Invokes agents from the support app", "roles": ["PROJECT_OWNER"], "secret_expires_after_hours": 2160 }'
secret_expires_after_hours 필드 선택 사항이며 기본값은 2160시간, 즉 90일입니다. 응답은 다음 출력과 유사합니다.
{ "client_secret": "ae_sa_sk_...", "service_account": { "client_id": "ae_sa_id_...", "name": "my-app-server", "is_active": true } }
중요
Atlas Agent Engine에 클라이언트 시크릿이 표시되면 저장합니다. Atlas Agent Engine은 생성 시에만 시크릿을 표시합니다.
서비스 계정 클라이언트 ID는 ae_sa_id_로 시작하고, 클라이언트 시크릿은 ae_sa_sk_로 시작합니다. 조직 범위의 서비스 계정을 생성하려면 ORG_GROUP_CREATOR 역할 있어야 합니다. /api/v1/organizations/{id}/service-accounts 엔드포인트에 POST 요청 보냅니다.
curl -s "https://agentengine.mongodb.com/api/v1/organizations/$ORG_ID/service-accounts" \ -X POST \ -H "Authorization: Bearer $SESSION_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "my-app-server", "description": "Invokes agents from the support app", "roles": ["ORG_GROUP_CREATOR"], "secret_expires_after_hours": 2160 }'
응답의 형식은 프로젝트 범위 응답과 동일합니다.
UI 사용
Atlas Agent Engine UI 에서 서비스 계정을 만들고 관리 할 수 있습니다. 프로젝트 범위 서비스 계정의 경우 프로젝트 탐색에서 Service Accounts을 클릭합니다. 조직 범위 서비스 계정의 경우 Organization Settings로 이동하여 Service Accounts를 클릭합니다.
CLI 사용
agentengine CLI 사용하여 서비스 계정을 생성하고 관리 할 수도 있습니다. 다음 명령어는 프로젝트 범위 서비스 계정을 만듭니다.
agentengine service-account create my-app-server \ --project-id $PROJECT_ID \ --role PROJECT_OWNER \ --description "Invokes agents from the support app"
조직 범위의 서비스 계정을 생성하려면 --project-id 대신 --org-id을 전달합니다. 둘 다 통과하지 못하면 CLI 현재 로그인 상태 의 프로젝트 사용하고, 선택된 프로젝트 없으면 조직 으로 돌아갑니다.
다음 플래그를 사용할 수 있습니다.
플래그 | 설명 |
|---|---|
| (필수) 서비스 계정에 부여할 역할 입니다. 이 플래그는 정확히 하나 역할 허용합니다. 프로젝트 범위 계정의 경우 |
| 서비스 계정의 프로젝트 범위입니다. |
| 서비스 계정의 조직 범위입니다. |
| 서비스 계정에 대한 사람이 읽을 수 있는 설명입니다. |
| 전체 시간 단위의 기간인 시크릿 수명(예: |
| 자격 증명을 사용할 수 있는 주소를 제한합니다. 기본값은 무제한입니다. |
service-account 명령은 동일한 범위 플래그를 허용하는 list, get, rotate 및 delete 하위 명령도 제공합니다.
액세스 토큰 요청
/api/v1/oauth/token 엔드포인트에 POST 요청 전송하여 클라이언트 ID 와 클라이언트 시크릿을 액세스 토큰으로 교환합니다. 다음 예시 와 같이 자격 증명 HTTP 기본 자격 증명 으로 전달하거나 요청 본문의 client_id 및 client_secret 필드로 전달합니다.
curl -s "https://agentengine.mongodb.com/api/v1/oauth/token" \ -X POST \ -u "$CLIENT_ID:$CLIENT_SECRET" \ -d "grant_type=client_credentials"
grant_type 필드 client_credentials 값만 허용합니다. 응답은 다음 출력과 유사합니다.
{ "access_token": "...", "token_type": "Bearer", "expires_in": 3600 }
액세스 토큰은 1시간 동안 유효합니다. 현재 토큰이 만료되기 전에 새 토큰을 요청하세요. Atlas Agent Engine은 각 서비스 계정에 대한 토큰 요청 속도를 제어하고 클라이언트 토큰을 너무 자주 요청하는 경우 429 오류 코드를 반환합니다.
액세스 토큰으로 에이전트 호출
호출 요청 의 Authorization 헤더에 액세스 토큰을 전송하여 액세스 토큰으로 에이전트 호출합니다:
curl -s "https://agentengine.mongodb.com/api/v1/projects/$PROJECT_ID/workspaces/$WORKSPACE_ID/invoke" \ -X POST \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"message": "Hello, agent!"}'
프로젝트 범위 서비스 계정은 자체 프로젝트 에서만 작동할 수 있습니다. 요청 경로가 다른 프로젝트 이름을 지정하는 경우 Atlas Agent Engine은 해당 요청 거부합니다. 조직 범위 서비스 계정은 자체 조직 에서 프로젝트 이름을 지정해야 합니다.
ORG_GROUP_CREATOR 역할 만으로는 조직 의 모든 프로젝트 에 대한 호출 액세스 을 부여할 수 없습니다. ORG_GROUP_CREATOR 역할 있는 조직 범위 서비스 계정은 Atlas Agent Engine이 관리하는 프로젝트에서만 에이전트를 호출할 수 있습니다. Atlas 지원 프로젝트 에서 에이전트 호출하려면 PROJECT_OWNER 역할 있는 프로젝트 범위 서비스 계정을 사용합니다.
서비스 계정 회전 및 비활성화
서비스 계정의 비밀을 대체하려면 계정 범위의 순환 엔드포인트에 POST 요청 보냅니다. 프로젝트 범위 계정의 경우 다음 엔드포인트를 사용합니다.
curl -s "https://agentengine.mongodb.com/api/v1/projects/$PROJECT_ID/service-accounts/$CLIENT_ID/rotate" \ -X POST \ -H "Authorization: Bearer $SESSION_TOKEN" \ -H "Content-Type: application/json" \ -d '{"secret_expires_after_hours": 2160}'
조직 범위 계정의 경우 다음 엔드포인트를 사용합니다.
curl -s "https://agentengine.mongodb.com/api/v1/organizations/$ORG_ID/service-accounts/$CLIENT_ID/rotate" \ -X POST \ -H "Authorization: Bearer $SESSION_TOKEN" \ -H "Content-Type: application/json" \ -d '{"secret_expires_after_hours": 2160}'
secret_expires_after_hours 필드 선택 사항이며 기본값은 2160시간입니다. 기본값 수락하려면 요청 본문을 생략합니다. 응답은 생성 응답과 형식이 동일하며 새 시크릿을 포함합니다. 이전 암호는 최대 7일 또는 만료일 중 먼저 도래하는 날짜까지 유효합니다.
이전 시크릿을 즉시 비활성화하려면 시크릿을 두 번째로 순환하거나 계정을 비활성화합니다. 두 작업 모두 이전 시크릿의 인증을 중지합니다. 손상되었을 수 있는 시크릿을 취소해야 하는 경우 이 중 하나를 사용하세요.
서비스 계정을 비활성화하려면 계정 범위에 대한 엔드포인트에 DELETE 요청 보냅니다. 프로젝트 범위 계정의 경우 다음 엔드포인트를 사용합니다.
curl -s "https://agentengine.mongodb.com/api/v1/projects/$PROJECT_ID/service-accounts/$CLIENT_ID" \ -X DELETE \ -H "Authorization: Bearer $SESSION_TOKEN"
조직 범위 계정의 경우 다음 엔드포인트를 사용합니다.
curl -s "https://agentengine.mongodb.com/api/v1/organizations/$ORG_ID/service-accounts/$CLIENT_ID" \ -X DELETE \ -H "Authorization: Bearer $SESSION_TOKEN"
서비스 계정을 비활성화하면 해당 계정은 더 이상 토큰을 요청 수 없으며 이미 보유하고 있는 토큰은 다음 요청 에서 실패합니다.
서비스 계정 역할
서비스 계정에는 정확히 하나의 역할 있습니다. 다음 표에는 각 범위에서 서비스 계정을 할당할 수 있는 역할이 나와 있습니다.
범위 | 역할 |
|---|---|
프로젝트 |
|
조직 |
|
두 범위 모두 에이전트를 호출할 수 있지만 모든 역할 에이전트를 호출할 수 있는 것은 아닙니다. 에이전트 호출하려면 프로젝트 범위 서비스 계정에 PROJECT_OWNER 역할 있어야 하고 조직 범위 서비스 계정에 ORG_GROUP_CREATOR 역할 있어야 합니다. PROJECT_READ_ONLY 및 ORG_READ_ONLY 역할을 서비스 계정에 할당할 수 있지만, 두 역할 가진 서비스 계정은 에이전트를 호출할 수 없습니다. 에이전트를 호출하지 않는 서비스 계정에만 읽기 전용 역할 할당하세요. Atlas Agent Engine은 모든 요청 에서 서비스 계정의 상태와 역할을 재평가하므로 역할 변경 또는 비활성화는 계정의 다음 요청 에 적용됩니다.
IP 주소 제한
서비스 계정의 토큰을 사용할 수 있는 IP 주소를 제한하려면 IP 액세스 목록 설정하다 . 허용된 IP 주소 및 CIDR 블록의 전체 목록과 함께 계정 범위에 대한 엔드포인트에 PUT 요청 보냅니다. 프로젝트 범위 계정의 경우 다음 엔드포인트를 사용합니다.
curl -s "https://agentengine.mongodb.com/api/v1/projects/$PROJECT_ID/service-accounts/$CLIENT_ID/ip-access-list" \ -X PUT \ -H "Authorization: Bearer $SESSION_TOKEN" \ -H "Content-Type: application/json" \ -d '{"ip_access_list": ["203.0.113.0/24"]}'
조직 범위 계정의 경우 다음 엔드포인트를 사용합니다.
curl -s "https://agentengine.mongodb.com/api/v1/organizations/$ORG_ID/service-accounts/$CLIENT_ID/ip-access-list" \ -X PUT \ -H "Authorization: Bearer $SESSION_TOKEN" \ -H "Content-Type: application/json" \ -d '{"ip_access_list": ["203.0.113.0/24"]}'
이 요청 전체 IP 액세스 목록 대체합니다. IP 제한을 제거 하려면 빈 배열 엔드포인트로 보냅니다. Atlas Agent Engine은 목록에 없는 주소 에서 서비스 계정의 액세스 토큰을 사용하는 요청을 거부합니다. IP 액세스 목록 토큰 요청을 제한하지 않습니다.
다음 단계
이러한 자격 증명 사용하여 배포된 에이전트 호출하는 방법을 학습 에이전트 호출을 참조하세요.