View a markdown version of this page

Integrazione con Google Drive tramite OAuth2 - Fondamento Amazon AgentCore

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Integrazione con Google Drive tramite OAuth2

Questo tutorial introduttivo illustra i passaggi essenziali per iniziare a utilizzare Amazon Bedrock AgentCore Identity per i tuoi agenti di intelligenza artificiale. Imparerai come configurare il tuo ambiente di sviluppo, installare gli SDK necessari, creare la tua prima identità di agente e consentire al tuo agente di accedere alle risorse esterne in modo sicuro.

Alla fine di questo tutorial, avrai un agente funzionante in grado di recuperare i token di accesso da Google con AgentCore Identity OAuth2 Credential Provider e leggere i file da Google Drive utilizzando i token di accesso. Per informazioni dettagliate sui flussi OAuth2, consulta Gestire i provider di credenziali con Identity. AgentCore

Prerequisiti

Prima di iniziare, hai bisogno di:

  • Un AWS account con le autorizzazioni appropriate (ad esempio,BedrockAgentCoreFullAccess)

  • Python 3.10 o versioni successive

  • La AWS CLI più recente e installata jq

  • AWS credenziali e regione configurate () aws configure

  • Conoscenza di base della programmazione Python

Importante

La policy BedrockAgentCoreFullAccess gestita concede ampie autorizzazioniGetWorkloadAccessTokenForUserId, tra cui quella che consente ai chiamanti di emettere token di accesso al carico di lavoro utilizzando qualsiasi stringa identificativa utente senza la verifica del token IdP. È adatto per lo sviluppo e il test. Per le implementazioni di produzione, crea policy IAM personalizzate che seguano il principio del privilegio minimo e limitino le autorizzazioni solo alle azioni specifiche richieste. Se l'applicazione utilizza l' JWT-based autenticazione (consigliata per la produzione), puoi negare GetWorkloadAccessTokenForUserId esplicitamente l'autenticazione per assicurarti che tutte le identificazioni degli utenti passino attraverso il percorso JWT verificato. Per ulteriori informazioni, consulta Ottenere il token di accesso al carico di lavoro.

Installazione dell'SDK

Per iniziare, installa il bedrock-agentcore pacchetto:

pip install bedrock-agentcore

Ottieni l'ID cliente e il segreto del cliente di Google

Per consentire al tuo agente di accedere a Google Drive, devi ottenere un ID cliente Google e un segreto cliente per il tuo agente. Accedi alla Google Developer Console e segui questi passaggi:

  1. Crea un progetto nella Google Developer Console

  2. Abilita l'API di Google Drive

  3. Configura la schermata di consenso OAuth

  4. Crea una nuova applicazione web per l'agente, ad esempio «My Agent 1"

  5. Aggiungete il seguente ambito OAuth 2.0 alla vostra applicazione agente: https://www.googleapis.com/auth/drive.metadata.readonly

  6. Crea le credenziali OAuth 2.0 per la nuova applicazione web e salva l'ID client Google e il segreto del cliente generati

Passaggio 1: configura un provider di credenziali OAuth 2.0

Crea un nuovo provider di credenziali OAuth 2.0 con l'ID client di Google e il segreto client ottenuti in precedenza utilizzando il seguente comando 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

Ottieni il risultato callbackUrl dalla CreateOauth2CredentialProvider risposta precedente e aggiungi l'URI all'elenco degli URI di reindirizzamento della tua applicazione Google. L'URL di callback dovrebbe essere simile a: ********-******-******-************** https://bedrock-agentcore.us-east-1.amazonaws.com/identities/oauth2/callback/

Fase 2: importazione dei moduli Identity e Auth

Aggiungi questa dichiarazione di importazione al tuo file Python:

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

Passaggio 3: ottenere un token di accesso OAuth 2.0

Dopo aver creato il Google Credential Provider nel passaggio precedente, aggiungi il @requires_access_token decoratore al codice del tuo agente che richiede un token di accesso Google. Copia l'URL di autorizzazione dall'output della tua console, quindi incollalo nel browser e completa il flusso di consenso con Google Drive.

Il seguente esempio di codice deve essere integrato nel codice dell'agente per richiamare un flusso di lavoro di autorizzazione. Non si tratta di un codice autonomo che può essere copiato ed eseguito indipendentemente.

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

Dietro le quinte, il @requires_access_token decoratore esegue la seguente sequenza:

Diagramma di flusso che mostra la sequenza di chiamate API effettuate dal decoratore @requires_access_token
  1. L'SDK effettua chiamate API aCreateWorkloadIdentity,GetWorkloadAccessToken, e. GetResourceOauth2Token

  2. Quando si esegue il codice dell'agente localmente, l'SDK genera automaticamente un ID di identità dell'agente e un ID utente casuale per i test locali e li memorizza in un file locale chiamato. .bedrock_agentcore.yaml

  3. Quando si esegue il codice dell'agente con AgentCore Runtime, l'SDK non genera un ID di identità dell'agente o un ID utente casuale. Utilizza invece l'ID di identità dell'agente assegnato e l'ID utente o il token JWT passato dal chiamante dell'agente.

  4. Il token di accesso dell'agente è un token crittografato (opaco) che contiene l'ID di identità dell'agente e l'ID utente.

  5. AgentCore Il servizio di identità memorizza il token di accesso di Google nel Token Vault con l'ID di identità dell'agente e l'ID utente. Questo crea un legame tra l'identità dell'agente, l'identità dell'utente e il token di accesso di Google.

  6. Il flusso di associazione della sessione deve essere completato prima che il token di accesso di Google venga restituito al chiamante da AgentCore Identity.

Passaggio 4: utilizzare il token di accesso OAuth2 per richiamare una risorsa esterna

Una volta ottenuto un token di accesso Google con i passaggi precedenti, l'agente può utilizzare il token di accesso per accedere a Google Drive. Ecco un esempio completo che elenca i nomi e gli ID dei primi 10 file a cui l'utente ha accesso.

Innanzitutto, installa la libreria client di Google per Python:

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

Quindi, copia il codice seguente:

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

Per un esempio di implementazione del server di callback locale per gestire l'associazione delle sessioni, consulta oauth2_callback_server.py su GitHub

Fasi successive

L'esempio in questa sezione si concentra su modelli di implementazione pratici che puoi adattare ai tuoi casi d'uso specifici. È possibile incorporare il codice come parte di un agente o di uno strumento Model Context Protocol (MCP). Se desideri ospitare il codice dell'agente o lo strumento MCP con AgentCore Runtime, segui l'agente o gli strumenti Host con Amazon Bedrock AgentCore Runtime per copiare il codice sopra riportato in Runtime. AgentCore