Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Intégralo con Google Drive mediante OAuth2
Este tutorial de introducción le explica los pasos esenciales para empezar a utilizar Amazon Bedrock AgentCore Identity para sus agentes de IA. Aprenderá a configurar su entorno de desarrollo, instalar los SDK necesarios, crear su primera identidad de agente y permitir que su agente acceda a los recursos externos de forma segura.
Al final de este tutorial, tendrás un agente activo que podrá recuperar los tokens de acceso de Google con el proveedor de credenciales AgentCore Identity OAuth2 y leer archivos de Google Drive mediante los tokens de acceso. Para obtener información detallada sobre los flujos de OAuth2, consulta Cómo administrar los proveedores de credenciales con Identity. AgentCore
Temas
Requisitos previos
Antes de empezar, necesitas:
-
Una AWS cuenta con los permisos adecuados (por ejemplo,
BedrockAgentCoreFullAccess) -
Python 3.10 o superior
-
La AWS CLI más reciente y la versión
jqinstalada -
AWS credenciales y región configuradas (
aws configure) -
Comprensión básica de la programación en Python
importante
La política BedrockAgentCoreFullAccess gestionada otorga amplios permisosGetWorkloadAccessTokenForUserId, entre otros, los que permiten a las personas que llaman emitir tokens de acceso a la carga de trabajo utilizando cualquier cadena de identificación de usuario sin necesidad de verificar el token de IdP. Esto es adecuado para el desarrollo y las pruebas. Para las implementaciones de producción, cree políticas de IAM personalizadas que sigan el principio de privilegios mínimos y restrinjan los permisos solo a las acciones específicas necesarias. Si tu aplicación utiliza la JWT-based autenticación (recomendada para producción), puedes denegarla de forma explícita GetWorkloadAccessTokenForUserId para garantizar que toda la identificación de los usuarios siga la ruta de JWT verificada. Para obtener más información, consulta Cómo obtener el token de acceso a la carga de trabajo.
Instalar el SDK
Para empezar, instala el bedrock-agentcore paquete:
pip install bedrock-agentcore
Obtenga el ID de cliente y el secreto del cliente de Google
Para permitir que tu agente acceda a Google Drive, debes obtener un ID de cliente de Google y un secreto de cliente para tu agente. Ve a la consola de desarrolladores de Google
-
Crea un proyecto en Google Developer Console
-
Habilita la API de Google Drive
-
Configura la pantalla de consentimiento de OAuth
-
Cree una nueva aplicación web para el agente, por ejemplo, «Mi agente 1"
-
Agregue el siguiente ámbito de OAuth 2.0 a su aplicación de agente:
https://www.googleapis.com/auth/drive.metadata.readonly -
Crea credenciales de OAuth 2.0 para la nueva aplicación web y guarda el ID de cliente de Google y el secreto del cliente generados
Paso 1: configurar un proveedor de credenciales de OAuth 2.0
Crea un nuevo proveedor de credenciales de OAuth 2.0 con el ID de cliente de Google y el secreto de cliente obtenidos anteriormente mediante el siguiente comando de la CLI: AWS
OAUTH2_CREDENTIAL_PROVIDER_RESPONSE=$(aws bedrock-agentcore-control create-oauth2-credential-provider \ --region us-east-1 \ --name "google-provider" \ --credential-provider-vendor "GoogleOauth2" \ --oauth2-provider-config-input '{ "googleOauth2ProviderConfig": { "clientId": "<your-google-client-id>", "clientSecret": "<your-google-client-secret>" } }' \ --output json) OAUTH2_CALLBACK_URL=$(echo $OAUTH2_CREDENTIAL_PROVIDER_RESPONSE | jq -r '.callbackUrl') echo "OAuth2 Callback URL: $OAUTH2_CALLBACK_URL"
nota
Obténgalo callbackUrl de la CreateOauth2CredentialProvider respuesta anterior y añada el URI a la lista de URI de redireccionamiento de su aplicación de Google. La URL de devolución de llamada debería tener el siguiente aspecto: https://bedrock-agentcore.us-east-1.amazonaws.com/identities/oauth2/callback/ ********-************
Paso 2: Importar los módulos de identidad y autenticación
Agregue esta declaración de importación a su archivo de Python:
from bedrock_agentcore.services.identity import IdentityClient from bedrock_agentcore.identity.auth import requires_access_token, requires_api_key
Paso 3: Obtenga un token de acceso de OAuth 2.0
Cuando hayas creado el proveedor de credenciales de Google en el paso anterior, añade el @requires_access_token decorador a tu código de agente, que requiere un token de acceso de Google. Copia la URL de autorización de la salida de la consola, pégala en el navegador y completa el flujo de consentimiento con Google Drive.
El siguiente ejemplo de código está pensado para integrarlo en el código de tu agente para invocar un flujo de trabajo de autorización. No se trata de un código independiente que se pueda copiar y ejecutar de forma independiente.
import asyncio # Injects Google Access Token @requires_access_token( # Uses the same credential provider name created above provider_name="google-provider", # Requires Google OAuth2 scope to access Google Drive scopes=["https://www.googleapis.com/auth/drive.metadata.readonly"], # Sets to OAuth 2.0 Authorization Code flow auth_flow="USER_FEDERATION", # Prints authorization URL to console on_auth_url=lambda x: print("\nPlease copy and paste this URL in your browser:\n" + x), # If false, caches obtained access token force_authentication=False, # The callback URL to redirect to after the OAuth 2.0 token retrieval is complete callback_url='oauth2_callback_url_for_session_binding', ) async def write_to_google_drive(*, access_token: str): # Prints the access token obtained from Google print(access_token) asyncio.run(write_to_google_drive(access_token=""))
Entre bastidores, el @requires_access_token decorador sigue la siguiente secuencia:
-
El SDK realiza llamadas a la API a
CreateWorkloadIdentityGetWorkloadAccessToken, y.GetResourceOauth2Token -
Al ejecutar el código del agente de forma local, el SDK genera automáticamente un identificador de identidad del agente y un identificador de usuario aleatorio para las pruebas locales, y los almacena en un archivo local denominado.
.bedrock_agentcore.yaml -
Al ejecutar el código del agente con AgentCore Runtime, el SDK no genera un identificador de identidad del agente ni un identificador de usuario aleatorio. En su lugar, utiliza el identificador de identidad del agente asignado y el identificador de usuario o el token de JWT que proporciona la persona que llama al agente.
-
El token de acceso del agente es un token cifrado (opaco) que contiene el ID de identidad del agente y el ID de usuario.
-
AgentCore El servicio de identidad almacena el token de acceso de Google en la bóveda de tokens, bajo el ID de identidad del agente y el ID de usuario. Esto crea un enlace entre la identidad del agente, la identidad del usuario y el token de acceso de Google.
-
El flujo de enlace de la sesión debe completarse antes de que AgentCore Identity devuelva el token de acceso a Google a la persona que llama.
Paso 4: Usa el token de acceso OAuth2 para invocar un recurso externo
Una vez que el agente obtenga un token de acceso a Google siguiendo los pasos anteriores, podrá usarlo para acceder a Google Drive. Este es un ejemplo completo en el que se enumeran los nombres y los ID de los 10 primeros archivos a los que el usuario tiene acceso.
Primero, instala la biblioteca cliente de Google para Python:
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
A continuación, copia el siguiente código:
import asyncio from bedrock_agentcore.identity.auth import requires_access_token, requires_api_key from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build from googleapiclient.errors import HttpError SCOPES = ["https://www.googleapis.com/auth/drive.metadata.readonly"] def main(access_token): """Shows basic usage of the Drive v3 API. Prints the names and ids of the first 10 files the user has access to. """ creds = Credentials(token=access_token, scopes=SCOPES) try: service = build("drive", "v3", credentials=creds) # Call the Drive v3 API results = ( service.files() .list(pageSize=10, fields="nextPageToken, files(id, name)") .execute() ) items = results.get("files", []) if not items: print("No files found.") return print("Files:") for item in items: print(f"{item['name']} ({item['id']})") except HttpError as error: # TODO(developer) - Handle errors from drive API. print(f"An error occurred: {error}") if __name__ == "__main__": # This annotation helps agent developer to obtain access tokens from external applications @requires_access_token( provider_name="google-provider", # Google OAuth2 scopes scopes=["https://www.googleapis.com/auth/drive.metadata.readonly"], # 3LO flow auth_flow="USER_FEDERATION", # prints authorization URL to console on_auth_url=lambda x: print("Copy and paste this authorization url to your browser", x), force_authentication=True, callback_url='oauth2_callback_url_for_session_binding', ) async def read_from_google_drive(*, access_token: str): print(access_token) # You can see the access_token # Make API calls... main(access_token) asyncio.run(read_from_google_drive(access_token=""))
nota
Para ver un ejemplo de implementación de un servidor de devolución de llamadas local para gestionar el enlace de sesiones, consulte oauth2_callback_server.py en GitHub
Pasos siguientes
El ejemplo de esta sección se centra en los patrones de implementación prácticos que puede adaptar para sus casos de uso específicos. Puede incrustar el código como parte de un agente o de una herramienta de protocolo de contexto modelo (MCP). Si desea alojar su código de agente o herramienta MCP con AgentCore Runtime, siga los pasos de Host agent o Tools con Amazon Bedrock AgentCore Runtime para copiar el código anterior en Runtime. AgentCore