View a markdown version of this page

Intégrer à Google Drive à l'aide d'OAuth2 - Base rocheuse de l'Amazonie AgentCore

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Intégrer à Google Drive à l'aide d'OAuth2

Ce didacticiel de prise en main vous explique les étapes essentielles pour commencer à utiliser Amazon Bedrock AgentCore Identity pour vos agents IA. Vous apprendrez à configurer votre environnement de développement, à installer les kits SDK nécessaires, à créer votre première identité d'agent et à permettre à votre agent d'accéder à des ressources externes en toute sécurité.

À la fin de ce didacticiel, vous disposerez d'un agent opérationnel capable de récupérer des jetons d'accès auprès de Google avec le fournisseur d'informations d'identification AgentCore Identity OAuth2 et de lire des fichiers depuis Google Drive à l'aide de jetons d'accès. Pour des informations détaillées sur les flux OAuth2, voir Gérer les fournisseurs d'informations d'identification avec Identity. AgentCore

Conditions préalables

Avant de commencer, vous devez :

  • Un AWS compte avec les autorisations appropriées (par exemple,BedrockAgentCoreFullAccess)

  • Python 3.10 ou supérieur

  • La dernière AWS CLI et jq installée

  • AWS informations d'identification et région configurées (aws configure)

  • Compréhension de base de la programmation Python

Important

La politique BedrockAgentCoreFullAccess gérée accorde de larges autorisationsGetWorkloadAccessTokenForUserId, notamment celles qui permettent aux appelants d'émettre des jetons d'accès à la charge de travail en utilisant n'importe quelle chaîne d'identifiant utilisateur sans vérification du jeton IdP. Cela convient au développement et aux tests. Pour les déploiements en production, créez des politiques IAM personnalisées qui respectent le principe du moindre privilège et limitent les autorisations aux seules actions spécifiques requises. Si votre application utilise l' JWT-based authentification (recommandée pour la production), vous pouvez refuser explicitement pour vous GetWorkloadAccessTokenForUserId assurer que toutes les identifications des utilisateurs passent par le chemin JWT vérifié. Pour plus d'informations, voir Obtenir un jeton d'accès à la charge de travail.

Installer le SDK

Pour commencer, installez le bedrock-agentcore package :

pip install bedrock-agentcore

Obtenir l'ID client et le code secret du client Google

Pour permettre à votre agent d'accéder à Google Drive, vous devez obtenir un identifiant client Google et un secret client pour votre agent. Accédez à la Google Developer Console et procédez comme suit :

  1. Création d'un projet dans Google Developer Console

  2. Activer l'API Google Drive

  3. Configurer l'écran de consentement OAuth

  4. Créez une nouvelle application Web pour l'agent, par exemple « Mon agent 1 »

  5. Ajoutez la portée OAuth 2.0 suivante à votre application d'agent : https://www.googleapis.com/auth/drive.metadata.readonly

  6. Créez des informations d'identification OAuth 2.0 pour la nouvelle application Web et enregistrez l'ID client Google et le secret client générés

Étape 1 : configurer un fournisseur d'informations d'identification OAuth 2.0

Créez un nouveau fournisseur d'informations d'identification OAuth 2.0 avec l'ID client Google et le secret client obtenus précédemment à l'aide de la commande CLI suivante : 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"
Note

Obtenez le résultat callbackUrl de la CreateOauth2CredentialProvider réponse ci-dessus et ajoutez l'URI à la liste des URI de redirection de votre application Google. L'URL de rappel doit ressembler à : https://bedrock-agentcore.us-east-1.amazonaws.com/identities/oauth2/callback/ ********-****-****-****-************

Étape 2 : Importer les modules Identity et Auth

Ajoutez cette instruction d'importation à votre fichier Python :

from bedrock_agentcore.services.identity import IdentityClient from bedrock_agentcore.identity.auth import requires_access_token, requires_api_key

Étape 3 : Obtenir un jeton d'accès OAuth 2.0

Une fois que le fournisseur d'informations d'identification Google a été créé à l'étape précédente, ajoutez le @requires_access_token décorateur à votre code d'agent qui nécessite un jeton d'accès Google. Copiez l'URL d'autorisation depuis la sortie de votre console, puis collez-la dans votre navigateur et terminez le flux de consentement avec Google Drive.

L'exemple de code suivant est destiné à être intégré au code de votre agent pour invoquer un flux de travail d'autorisation. Il ne s'agit pas d'un code autonome qui peut être copié et exécuté indépendamment.

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=""))

Dans les coulisses, le @requires_access_token décorateur suit la séquence suivante :

Organigramme montrant la séquence des appels d'API effectués par le décorateur @requires_access_token
  1. Le SDK effectue des appels d'API vers CreateWorkloadIdentityGetWorkloadAccessToken, etGetResourceOauth2Token.

  2. Lorsque le code de l'agent est exécuté localement, le SDK génère automatiquement un ID d'identité d'agent et un ID utilisateur aléatoire pour les tests locaux, et les stocke dans un fichier local appelé.bedrock_agentcore.yaml.

  3. Lors de l'exécution du code de l'agent avec AgentCore Runtime, le SDK ne génère pas d'identifiant d'agent ni d'ID utilisateur aléatoire. Il utilise plutôt l'ID d'identité d'agent attribué et l'ID utilisateur ou le jeton JWT transmis par l'appelant de l'agent.

  4. Le jeton d'accès à l'agent est un jeton crypté (opaque) qui contient l'ID d'identité de l'agent et l'ID utilisateur.

  5. AgentCore Le service d'identité stocke le jeton d'accès Google dans le Token Vault sous l'ID d'identité de l'agent et l'ID utilisateur. Cela crée un lien entre l'identité de l'agent, l'identité de l'utilisateur et le jeton d'accès Google.

  6. Le flux de liaison de session doit être terminé avant que le jeton d'accès Google ne soit renvoyé à l'appelant par AgentCore Identity.

Étape 4 : Utiliser le jeton d'accès OAuth2 pour invoquer une ressource externe

Une fois que l'agent a obtenu un jeton d'accès Google en suivant les étapes ci-dessus, il peut utiliser le jeton d'accès pour accéder à Google Drive. Voici un exemple complet qui répertorie les noms et les identifiants des 10 premiers fichiers auxquels l'utilisateur a accès.

Tout d'abord, installez la bibliothèque cliente Google pour Python :

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

Copiez ensuite le code suivant :

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=""))
Note

Pour un exemple d'implémentation de serveur de rappel local permettant de gérer la liaison de session, reportez-vous à oauth2_callback_server.py sur GitHub

Quelle est la prochaine étape ?

L'exemple de cette section se concentre sur des modèles de mise en œuvre pratiques que vous pouvez adapter à vos cas d'utilisation spécifiques. Vous pouvez intégrer le code dans le cadre d'un agent ou d'un outil MCP (Model Context Protocol). Si vous souhaitez héberger votre code d'agent ou votre outil MCP avec AgentCore Runtime, suivez Host agent ou tools with Amazon Bedrock AgentCore Runtime pour copier le code ci-dessus dans Runtime. AgentCore