Overview
En esta guía, aprenderá a administrar las credenciales que autentican una aplicación en la API de Atlas Agent Engine. Atlas Agent Engine acepta claves de API y tokens de acceso a cuentas de servicio en sus rutas de API. Estas credenciales funcionan en las rutas de administración de proyectos y organizaciones, así como en las rutas de invocación de agentes.
Para autenticar su propia cuenta con la CLI agentengine, consulte Instalación y autenticación.
Nota
Estabilidad de la API durante la vista previa pública
La API pública de Atlas Agent Engine está sujeta a cambios durante la versión preliminar pública. Los puntos finales, los formatos de solicitud y los formatos de respuesta podrían cambiar sin una ruta de migración compatible con versiones anteriores. Fije la versión de la CLI agentengine de la que depende su automatización y revise las notas de la versión antes de actualizar.
Para consultar todas las limitaciones que se aplican durante la versión preliminar pública, consulte Limitaciones del motor del agente de MongoDB Atlas.
Autentícate con una cuenta de servicio.
Una cuenta de servicio es una cuenta que pertenece a un proyecto o una organización, en lugar de a una persona. Utilice una cuenta de servicio cuando un servidor de aplicaciones invoque agentes en nombre de sus propios usuarios, de modo que su aplicación no dependa de una credencial individual.
Importante
Identidad de memoria de la cuenta de servicio
Cuando una cuenta de servicio invoca un agente implementado, el motor de agentes de Atlas utiliza la identidad de la propia cuenta de servicio como identidad de memoria en tiempo de ejecución. La plataforma ignora cualquier valor user_id del usuario final que proporcione la solicitud de invocación o el indicador agentengine invoke --user-id.
Las operaciones automáticas de grabación, extracción, consolidación y app.memory utilizan esta identidad resuelta. Como resultado, las invocaciones que se autentican a través de la misma cuenta de servicio comparten un ámbito de usuario de memoria.
Esta limitación se aplica únicamente a los agentes desplegados que invoca una cuenta de servicio. El servicio de memoria independiente, con ámbito de proyecto, no se ve afectado. Este servicio continúa aceptando valores explícitos de user_id y session_id del emisor.
Para aislar la memoria por usuario final, llame al servicio de memoria independiente desde su aplicación y pase los valores user_id y session_id explícitos en cada llamada. Para obtener más información, consulte la sección "Uso del servicio de memoria independiente".
Crea una cuenta de servicio
Esta sección describe cómo crear una cuenta de servicio utilizando la API, la interfaz de usuario y la interfaz de línea de comandos agentengine.
Para crear una cuenta de servicio con ámbito de proyecto, debe tener el rol PROJECT_OWNER en el proyecto.
Usar la API
Para crear una cuenta de servicio, envíe una solicitud POST al punto final /api/v1/projects/{id}/service-accounts.
En las siguientes solicitudes, $SESSION_TOKEN es su token de sesión obtenido al iniciar sesión en Atlas Agent Engine. No puede administrar cuentas de servicio con el token de acceso de una cuenta de servicio. Atlas Agent Engine define al propietario de una nueva cuenta de servicio a partir del token de sesión, por lo que toda solicitud que cree, rote, desactive o restrinja una cuenta de servicio debe provenir de un usuario que haya iniciado sesión y tenga el rol requerido.
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 }'
El campo secret_expires_after_hours es opcional y por defecto toma 2160 horas, que son 90 días. La respuesta se asemeja a la siguiente salida:
{ "client_secret": "ae_sa_sk_...", "service_account": { "client_id": "ae_sa_id_...", "name": "my-app-server", "is_active": true } }
Importante
Guarda la clave secreta del cliente cuando el motor del agente Atlas la muestre. El motor del agente Atlas solo muestra la clave secreta al crearla.
Los ID de cliente de la cuenta de servicio comienzan con ae_sa_id_ y los secretos de cliente comienzan con ae_sa_sk_. Para crear una cuenta de servicio con ámbito de organización, debe tener el rol ORG_GROUP_CREATOR. Envíe una solicitud POST al punto final /api/v1/organizations/{id}/service-accounts:
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 }'
La respuesta tiene el mismo formato que la respuesta específica del proyecto.
Utiliza la interfaz de usuario
Puede crear y administrar cuentas de servicio en la interfaz de usuario de Atlas Agent Engine. Para una cuenta de servicio con ámbito de proyecto, haga clic en Service Accounts en la navegación del proyecto. Para una cuenta de servicio con ámbito de organización, vaya a Organization Settings y haga clic en Service Accounts.
Utilice la interfaz de línea de comandos (CLI).
También puede crear y administrar cuentas de servicio con la CLI agentengine. El siguiente comando crea una cuenta de servicio con ámbito de proyecto:
agentengine service-account create my-app-server \ --project-id $PROJECT_ID \ --role PROJECT_OWNER \ --description "Invokes agents from the support app"
Para crear una cuenta de servicio con ámbito de organización, pase --org-id en lugar de --project-id. Si no pasa ninguno de los dos, la CLI utilizará el proyecto de su estado de inicio de sesión actual y recurrirá a su organización cuando no se haya seleccionado ningún proyecto.
Las siguientes banderas están disponibles:
Flag | Descripción |
|---|---|
| (Obligatorio) El rol que se asignará a la cuenta de servicio. Este indicador acepta exactamente un rol. Para una cuenta con ámbito de proyecto, pase |
| Alcance del proyecto para la cuenta de servicio. Pase solo uno de |
| Ámbito de la organización para la cuenta de servicio. Pase solo uno de |
| Una descripción legible para humanos de la cuenta de servicio. |
| La duración del secreto como una duración en horas completas, como |
| Restringe las direcciones que pueden usar la credencial. Por defecto, no tiene restricciones. |
El comando service-account también proporciona los subcomandos list, get, rotate y delete, que aceptan los mismos indicadores de ámbito.
Solicitar un token de acceso
Intercambie el ID de cliente y el secreto de cliente por un token de acceso enviando una solicitud POST al punto final /api/v1/oauth/token. Pase las credenciales como credenciales HTTP básicas, como se muestra en el siguiente ejemplo, o como campos client_id y client_secret en el cuerpo de la solicitud:
curl -s "https://agentengine.mongodb.com/api/v1/oauth/token" \ -X POST \ -u "$CLIENT_ID:$CLIENT_SECRET" \ -d "grant_type=client_credentials"
El campo grant_type solo acepta el valor client_credentials. La respuesta se asemeja a la siguiente salida:
{ "access_token": "...", "token_type": "Bearer", "expires_in": 3600 }
El token de acceso es válido durante una hora. Solicite un nuevo token antes de que caduque el actual. El motor del agente Atlas controla la frecuencia de las solicitudes de token para cada cuenta de servicio y devuelve un código de error 429 cuando un cliente solicita tokens con demasiada frecuencia.
Invocar un agente con un token de acceso.
Envíe un token de acceso en el encabezado Authorization de una solicitud de invocación para invocar un agente con un token de acceso:
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!"}'
Una cuenta de servicio con ámbito de proyecto solo puede actuar sobre su propio proyecto. Si la solicitud hace referencia a cualquier otro proyecto, el motor del agente de Atlas la rechaza. Una cuenta de servicio con ámbito de organización debe especificar un proyecto dentro de su propia organización.
El rol ORG_GROUP_CREATOR por sí solo no otorga acceso de invocación a todos los proyectos de la organización. Una cuenta de servicio con ámbito de organización y el rol ORG_GROUP_CREATOR solo puede invocar agentes en los proyectos que administra Atlas Agent Engine. Para invocar un agente en un proyecto respaldado por Atlas, utilice una cuenta de servicio con ámbito de proyecto y el rol PROJECT_OWNER.
Rotar y desactivar cuentas de servicio
Para reemplazar el secreto de una cuenta de servicio, envíe una solicitud POST al punto final de rotación para el ámbito de la cuenta. Para una cuenta con ámbito de proyecto, utilice el siguiente punto final:
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}'
Para una cuenta con ámbito de organización, utilice el siguiente punto final:
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}'
El campo secret_expires_after_hours es opcional y su valor predeterminado es 2160 horas. Para aceptar el valor predeterminado, omita el cuerpo de la solicitud. La respuesta tiene el mismo formato que la respuesta de creación y contiene el nuevo secreto. El secreto anterior permanece válido hasta por siete días o hasta su vencimiento, lo que ocurra primero.
Para desactivar la clave secreta anterior de inmediato, gírela una segunda vez o desactive la cuenta. Ambas acciones impiden que la clave secreta anterior se autentique. Utilice una de ellas cuando deba revocar una clave secreta que pueda estar comprometida.
Para desactivar una cuenta de servicio, envíe una solicitud DELETE al punto final correspondiente al ámbito de la cuenta. Para una cuenta con ámbito de proyecto, utilice el siguiente punto final:
curl -s "https://agentengine.mongodb.com/api/v1/projects/$PROJECT_ID/service-accounts/$CLIENT_ID" \ -X DELETE \ -H "Authorization: Bearer $SESSION_TOKEN"
Para una cuenta con ámbito de organización, utilice el siguiente punto final:
curl -s "https://agentengine.mongodb.com/api/v1/organizations/$ORG_ID/service-accounts/$CLIENT_ID" \ -X DELETE \ -H "Authorization: Bearer $SESSION_TOKEN"
Tras desactivar una cuenta de servicio, esta ya no podrá solicitar tokens, y cualquier token que posea fallará en su siguiente solicitud.
Roles de cuentas de servicio
Una cuenta de servicio tiene exactamente una función. La siguiente tabla muestra las funciones que puede asignar a la cuenta de servicio en cada ámbito:
Alcance | Roles |
|---|---|
Proyecto |
|
organización |
|
Ambos ámbitos pueden invocar agentes, pero no todos los roles pueden hacerlo. Para invocar un agente, una cuenta de servicio con ámbito de proyecto debe tener el rol PROJECT_OWNER, y una cuenta de servicio con ámbito de organización debe tener el rol ORG_GROUP_CREATOR. Puede asignar los roles PROJECT_READ_ONLY y ORG_READ_ONLY a una cuenta de servicio, pero una cuenta de servicio con cualquiera de estos roles no puede invocar agentes. Asigne un rol de solo lectura únicamente a una cuenta de servicio que no invoque agentes. El motor de agentes de Atlas reevalúa el estado y los roles de la cuenta de servicio en cada solicitud, por lo que un cambio de rol o una desactivación se aplicará a la siguiente solicitud de la cuenta.
Restringir direcciones IP
Para limitar las direcciones IP que pueden usar el token de una cuenta de servicio, configure una lista de acceso IP. Envíe una solicitud PUT al punto final del ámbito de la cuenta con la lista completa de direcciones IP y bloques CIDR permitidos. Para una cuenta con ámbito de proyecto, utilice el siguiente punto final:
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"]}'
Para una cuenta con ámbito de organización, utilice el siguiente punto final:
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"]}'
La solicitud reemplaza toda la lista de acceso IP. Para eliminar las restricciones de IP, envíe una matriz vacía al punto final. El motor del agente Atlas rechaza las solicitudes que utilizan el token de acceso de la cuenta de servicio desde una dirección que no está en la lista. La lista de acceso IP no restringe las solicitudes de token.
Próximos pasos
Para aprender a llamar a un agente desplegado con estas credenciales,consulte la sección "Invocar un agente".