Gérer les secrets pour les services externes dans le kit de développement d'agent

Les agents Agent Development Kit (ADK) interagissent avec des services externes en dehors de Google Cloud. Les identités d'agent et Identity and Access Management (IAM) vous permettent de vous authentifier auprès des Google Cloud services. Toutefois, elles ne peuvent pas prouver leur identité auprès de plates-formes externes qui ne sont pas compatibles avec la fédération des identités de Google.

Les agents ADK doivent accéder à différents identifiants pour interagir avec des entités externes telles que les services MCP, les outils ADK et les API. Voici quelques exemples courants :

  • Clés API pour les plates-formes de traitement des paiements
  • Combinaisons de nom d'utilisateur et de mot de passe pour les bases de données sur site héritées
  • Clés privées pour les connexions TLS mutuelles (mTLS)
Pour prendre en charge ces cas d'utilisation, ADK fournit le module SecretManagerClient dans le package google.adk.integrations.secret_manager.secret_client. Ce module fournit une interface standard permettant aux agents de récupérer des secrets depuis Secret Manager au moment de l'exécution. Ce document explique comment gérer les secrets pour les services externes dans ADK à l'aide de Secret Manager.

Avantages de l'utilisation de Secret Manager avec ADK

La gestion manuelle des secrets peut entraîner des risques de sécurité et augmenter la charge de travail des développeurs. Secret Manager peut vous aider à résoudre ces problèmes grâce aux éléments suivants :

  • Si vous intégrez des secrets dans le code de l'agent, vous créez un risque de sécurité important. Cette pratique peut entraîner un accès non autorisé aux systèmes de production. L'utilisation de Secret Manager supprime les données sensibles de votre code source. Cela contribue à sécuriser votre application.
  • Si vous intégrez des secrets statiques via des variables d'environnement, la rotation des identifiants devient compliquée. Pour appliquer les mises à jour, vous devez redémarrer les conteneurs de déploiement. Secret Manager récupère les identifiants de manière dynamique au moment de l'exécution, ce qui permet d'effectuer des mises à jour sans temps d'arrêt du système.
  • Si vous écrivez du code récurrent SecretManagerServiceClient personnalisé pour chaque outil, vous augmentez la charge de travail des développeurs et le risque d'erreurs. L'intégration ADK standardisée fournit une approche propre et réutilisable pour récupérer les identifiants.

Avant de commencer

Avant d'intégrer Secret Manager à ADK, procédez comme suit :

  1. Configurez un agent à l'aide d'ADK. Cette fonctionnalité nécessite ADK version 1.29 ou ultérieure pour Python.
  2. Accordez le Secret Manager Secret Accessor rôle IAM à l'identité de l'agent. Ce rôle permet à votre agent de récupérer des secrets au moment de l'exécution.
  3. Créez un secret et ajoutez une version de secret, telle qu'une clé API, dans Secret Manager.

Comment un agent ADK récupère des secrets au moment de l'exécution

Le module secret_client.SecretManagerClient récupère les identifiants dans la logique du code de l'agent Python au moment de l'exécution. La logique d'orchestration de l'agent envoie des invites au grand modèle de langage (LLM) pour déterminer l'outil à exécuter, mais le système n'envoie pas le secret au LLM.

L'agent exécute les étapes suivantes lors de la phase d'exécution :

  1. Avant qu'un agent ADK n'appelle un outil tiers, il initialise le SecretManagerClient module et appelle get_secret() fonction.
  2. L'agent ADK utilise l'identité de l'agent pour s'authentifier auprès de Secret Manager.
  3. Le module SecretManagerClient renvoie le secret en texte brut à l'agent ADK.
  4. L'agent ADK utilise le secret pour effectuer un appel authentifié à l'outil tiers.

Récupérer des secrets dans un agent ADK au moment de l'exécution

L'exemple de code suivant montre comment utiliser le module SecretManagerClient pour récupérer un secret de manière sécurisée dans un agent ADK. L'agent récupère le secret en interne pour éviter d'exposer des identifiants sensibles à la fenêtre de contexte ou à l'historique des conversations du LLM.

Python

Pour exécuter ce code, commencez par configurer un environnement de développement Python et installez le SDK Secret Manager pour Python. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

#!/usr/bin/env python

# Copyright 2026 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
"""
ADK agent for accessing secrets from global Secret Manager.
"""

import os

from google.adk import Agent
from google.adk.integrations.secret_manager.secret_client import SecretManagerClient

# Fetch secret from global Secret Manager
project_id = os.environ.get("GOOGLE_CLOUD_PROJECT")
secret_id = os.environ.get("ADK_TEST_SECRET_ID")
secret_version = os.environ.get("ADK_TEST_SECRET_VERSION", "latest")

if not project_id or not secret_id:
    raise ValueError("GOOGLE_CLOUD_PROJECT and ADK_TEST_SECRET_ID environment variables must be set.")

resource_name = f"projects/{project_id}/secrets/{secret_id}/versions/{secret_version}"

print("Fetching secret from global Secret Manager...")
# Initialize Secret Manager Client (Global)
client = SecretManagerClient()

# Fetch secret
try:
    secret_payload = client.get_secret(resource_name)
    print("Successfully fetched secret.")
    # The secret_payload can now be used by the agent or its tools as required.
except Exception as e:
    print(f"Error fetching secret: {e}")
    raise e

# Initialize Agent
root_agent = Agent(
    model='gemini-2.5-flash',
    name='root_agent',
    description='A helpful assistant for user questions.',
    instruction='Answer user questions to the best of your knowledge',
)

print("Agent initialized successfully.")

Étape suivante