View a markdown version of this page

Integrasikan dengan Google Drive menggunakan OAuth2 - Batuan Dasar Amazon AgentCore

Integrasikan dengan Google Drive menggunakan OAuth2

Tutorial memulai ini memandu Anda melalui langkah-langkah penting untuk mulai menggunakan Amazon Bedrock AgentCore Identity untuk agen AI Anda. Anda akan mempelajari cara mengatur lingkungan pengembangan, menginstal SDK yang diperlukan, membuat identitas agen pertama Anda, dan mengizinkan agen Anda mengakses sumber daya eksternal dengan aman.

Pada akhir tutorial ini, Anda akan memiliki agen kerja yang dapat mengambil token akses dari Google dengan AgentCore Identity OAuth2 Credential Provider, dan membaca file dari Google Drive menggunakan token akses. Untuk informasi mendetail tentang alur OAuth2, lihat Mengelola penyedia kredensi dengan Identitas. AgentCore

Prasyarat

Sebelum Anda mulai, Anda perlu:

  • AWS Akun dengan izin yang sesuai (misalnya,BedrockAgentCoreFullAccess)

  • Python 3.10 atau lebih tinggi

  • AWS CLI terbaru dan diinstal jq

  • AWS kredensil dan wilayah dikonfigurasi () aws configure

  • Pemahaman dasar tentang pemrograman Python

penting

Kebijakan BedrockAgentCoreFullAccess terkelola memberikan izin luas termasukGetWorkloadAccessTokenForUserId, yang memungkinkan penelepon mengeluarkan token akses beban kerja menggunakan string pengenal pengguna apa pun tanpa verifikasi token IDP. Ini cocok untuk pengembangan dan pengujian. Untuk penerapan produksi, buat kebijakan IAM khusus yang mengikuti prinsip hak istimewa paling sedikit dan batasi izin hanya untuk tindakan spesifik yang diperlukan. Jika aplikasi Anda menggunakan JWT-based otentikasi (direkomendasikan untuk produksi), Anda dapat secara eksplisit menolak GetWorkloadAccessTokenForUserId untuk memastikan semua identifikasi pengguna melewati jalur JWT yang diverifikasi. Untuk informasi selengkapnya, lihat Mendapatkan token akses beban kerja.

Instal SDK

Untuk memulai, instal bedrock-agentcore paket:

pip install bedrock-agentcore

Dapatkan ID Klien Google dan Rahasia Klien

Untuk memungkinkan agen Anda mengakses Google Drive, Anda perlu mendapatkan ID klien Google dan rahasia klien untuk agen Anda. Buka Google Developer Console dan ikuti langkah-langkah berikut:

  1. Membuat Project di Google Developer Console

  2. Aktifkan Google Drive API

  3. Konfigurasikan layar persetujuan OAuth

  4. Buat aplikasi web baru untuk agen, misalnya, “Agen Saya 1"

  5. Tambahkan cakupan OAuth 2.0 berikut ke aplikasi agen Anda: https://www.googleapis.com/auth/drive.metadata.readonly

  6. Buat Kredensial OAuth 2.0 untuk aplikasi web baru, dan simpan ID klien Google dan rahasia klien yang dihasilkan

Langkah 1: Siapkan Penyedia Kredenal OAuth 2.0

Buat Penyedia Kredenal OAuth 2.0 baru dengan ID klien Google dan rahasia klien yang diperoleh sebelumnya menggunakan perintah CLI AWS berikut:

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"
catatan

Dapatkan callbackUrl dari CreateOauth2CredentialProviderrespons di atas dan tambahkan URI ke daftar URI pengalihan aplikasi Google Anda. URL panggilan balik akan terlihat seperti: https://bedrock-agentcore.us-east-1.amazonaws.com/identities/oauth2/callback/ **********-****-******-**************

Langkah 2: Impor modul Identitas dan Auth

Tambahkan pernyataan impor ini ke file Python Anda:

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

Langkah 3: Dapatkan token akses OAuth 2.0

Setelah Anda membuat Google Credential Provider pada langkah sebelumnya, tambahkan @requires_access_token dekorator ke kode agen Anda yang memerlukan token akses Google. Salin URL otorisasi dari output konsol Anda, lalu tempel di browser Anda dan lengkapi alur persetujuan dengan Google Drive.

Contoh kode berikut dimaksudkan untuk diintegrasikan ke dalam kode agen Anda untuk menjalankan alur kerja otorisasi. Ini bukan kode mandiri yang dapat disalin dan dijalankan secara independen.

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

Di belakang layar, @requires_access_token dekorator berjalan melalui urutan berikut:

Diagram alir yang menunjukkan urutan panggilan API yang dilakukan oleh dekorator @requires_access_token
  1. SDK membuat panggilan API keCreateWorkloadIdentity,GetWorkloadAccessToken, danGetResourceOauth2Token.

  2. Saat menjalankan kode agen secara lokal, SDK secara otomatis menghasilkan ID identitas agen dan ID pengguna acak untuk pengujian lokal, dan menyimpannya dalam file lokal yang disebut. .bedrock_agentcore.yaml

  3. Saat menjalankan kode agen dengan AgentCore Runtime, SDK tidak menghasilkan ID identitas agen atau ID pengguna acak. Sebagai gantinya, ia menggunakan ID identitas agen yang ditetapkan, dan ID pengguna atau token JWT diteruskan oleh pemanggil agen.

  4. Token akses agen adalah token terenkripsi (buram) yang berisi ID identitas agen dan ID pengguna.

  5. AgentCore Layanan identitas menyimpan token akses Google di Token Vault di bawah ID identitas agen dan ID pengguna. Ini menciptakan ikatan antara identitas agen, identitas pengguna, dan token akses Google.

  6. Alur pengikatan sesi harus diselesaikan sebelum token akses Google dikembalikan ke pemanggil oleh AgentCore Identity.

Langkah 4: Gunakan Token Akses OAuth2 untuk Memanggil Sumber Daya Eksternal

Setelah agen memperoleh token akses Google dengan langkah-langkah di atas, agen dapat menggunakan token akses untuk mengakses Google Drive. Berikut adalah contoh lengkap yang mencantumkan nama dan ID dari 10 file pertama yang dapat diakses pengguna.

Pertama, instal pustaka klien Google untuk Python:

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

Kemudian, salin kode berikut:

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

Apa selanjutnya?

Contoh di bagian ini berfokus pada pola implementasi praktis yang dapat Anda sesuaikan untuk kasus penggunaan spesifik Anda. Anda dapat menyematkan kode sebagai bagian dari agen, atau alat Model Context Protocol (MCP). Jika Anda ingin meng-host kode Agen atau Alat MCP Anda dengan AgentCore Runtime, ikuti agen Host atau alat dengan Amazon Bedrock AgentCore Runtime untuk menyalin kode di atas ke Runtime. AgentCore