Aller au contenu principal

Bonnes pratiques de sécurité

Sécuriser votre utilisation de l’API Grok

Cette dernière lecon synthétise toutes les bonnes pratiques de sécurité pour la Management API. Qu’il s’agisse de la gestion des secrets, de la rotation des clés, de l’audit ou du principe de moindre privilège, ces pratiques protègent votre infrastructure et vos finances.

Gestion des secrets

Règle fondamentale : jamais en clair

Les clés API et les clés de gestion ne doivent jamais apparaître dans :

  • Le code source (même dans un dépôt privé)
  • Les fichiers de configuration versionnés (.env commités dans Git)
  • Les logs applicatifs
  • Les URLs en paramètres de requête
  • Les messages Slack, emails ou tickets

Coffres-forts recommandés

Utilisez un gestionnaire de secrets adapté à votre infrastructure :

  • HashiCorp Vault : solution complète avec rotation automatique, politiques d’accès, audit trail
  • AWS Secrets Manager : intégration native avec l’écosystème AWS, rotation automatique
  • Google Secret Manager : équivalent GCP, intégration avec Cloud Run et GKE
  • Azure Key Vault : solution Microsoft Azure
  • Doppler : solution cloud-agnostique, interface simple
  • 1Password / Bitwarden : pour les petites équipes, avec CLI

Configuration recommandée

# Mauvais : clé en dur dans un script
MANAGEMENT_API_KEY="xai-mgmt-abc123..."  # NE FAITES PAS ÇA

# Bon : récupérer depuis un coffre-fort
MANAGEMENT_API_KEY=$(vault kv get -field=key secret/xai/management)

# Bon : variable d'environnement injectée par le CI/CD
# La clé est configurée dans les secrets du pipeline (GitHub Actions, GitLab CI, etc.)

Rotation régulière

Politique de rotation

Définissez une politique de rotation adaptée à votre contexte :

Niveau de risqueFréquence de rotationExemples
ÉlevéTous les 30 joursClés avec accès complet (wildcard)
MoyenTous les 90 joursClés de production avec ACLs restreintes
FaibleTous les 180 joursClés de développement local

Automatiser la rotation

import requests
from datetime import datetime, timedelta

MANAGEMENT_API = "https://management-api.x.ai"
MGMT_KEY = "xai-mgmt-..."
TEAM_ID = "team-..."
ROTATION_DAYS = 90  # Rotation tous les 90 jours

def check_and_rotate():
    """Vérifie l'ancienneté des clés et effectue la rotation si nécessaire."""
    response = requests.get(
        f"{MANAGEMENT_API}/auth/teams/{TEAM_ID}/api-keys",
        headers={"Authorization": f"Bearer {MGMT_KEY}"}
    )
    keys = response.json().get("apiKeys", [])
    now = datetime.now()

    for key in keys:
        created = datetime.fromisoformat(key.get("createdAt", "").replace("Z", "+00:00"))
        age_days = (now - created.replace(tzinfo=None)).days

        if age_days >= ROTATION_DAYS:
            key_id = key.get("id")
            name = key.get("name", "Sans nom")
            print(f"Rotation nécessaire pour [{name}] (âge: {age_days} jours)")

            # Effectuer la rotation
            rotate_resp = requests.post(
                f"{MANAGEMENT_API}/auth/api-keys/{key_id}/rotate",
                headers={"Authorization": f"Bearer {MGMT_KEY}"}
            )

            if rotate_resp.status_code == 200:
                new_secret = rotate_resp.json().get("secret")
                print(f"  Nouvelle clé générée. Mettez à jour le coffre-fort.")
                # Stocker new_secret dans votre coffre-fort
            else:
                print(f"  Erreur de rotation : {rotate_resp.status_code}")

check_and_rotate()

Principe de moindre privilège

ACLs granulaires

Chaque clé doit avoir le minimum de permissions nécessaires :

{
  "acls": ["api-key:endpoint:chat", "api-key:model:grok-4.20-mini"],
  "qps": 10,
  "qpm": 100
}

Évitez les wildcards (*) en production. Si votre application n’utilise que le chat avec un seul modèle, ne donnez accès qu’à cela.

Limites de débit comme filet de sécurité

Même avec des ACLs restreintes, définissez toujours des limites de débit (qps, qpm, tpm). En cas de compromission, ces limites réduisent l’impact financier.

Audit et surveillance

Logs d’audit

Tenez un journal de toutes les opérations de gestion :

import logging
from datetime import datetime

# Configurer le logging
logging.basicConfig(
    filename="/var/log/xai-management-audit.log",
    level=logging.INFO,
    format="%(asctime)s | %(levelname)s | %(message)s"
)

def log_operation(operation, key_name, details=""):
    """Enregistre une opération de gestion dans le journal d'audit."""
    logging.info(f"{operation} | Clé: {key_name} | {details}")

# Exemples d'utilisation
log_operation("CREATE", "prod-backend-v2", "ACLs: chat+embed, QPS: 50")
log_operation("ROTATE", "prod-backend-v2", "Rotation planifiée 90j")
log_operation("DELETE", "dev-ancien-stagiaire", "Départ de l'équipe")

Alertes de sécurité

Mettez en place des alertes pour les événements critiques :

  • Clé avec wildcards créée en production
  • Tentative de connexion avec une clé invalide (augmentation des 401)
  • Consommation anormale détectée (pic inattendu)
  • Facture en statut FAILED (risque d’interruption de service)
  • Clé proche de l’expiration (7 jours avant)

Checklist de sécurité complète

Déploiement initial

  • Clés stockées dans un coffre-fort, jamais en clair
  • ACLs restrictives (pas de wildcard en production)
  • Limites de débit configurées pour chaque clé
  • Healthcheck automatique de la clé management
  • Script d’audit des clés en place

Opérations régulières

  • Rotation des clés selon la politique définie (30/90/180 jours)
  • Audit mensuel des clés et de leurs permissions
  • Revue des clés lors du départ d’un collaborateur
  • Vérification des factures (détection des statuts FAILED)
  • Surveillance des pics de consommation anormaux

Réponse à incident

  • Procédure de rotation d’urgence documentée
  • Possibilité de restreindre immédiatement les ACLs (via PUT)
  • Possibilité de supprimer une clé compromise (via DELETE)
  • Contacts d’urgence identifiés (équipe sécurité, support xAI)

Points clés à retenir

  • Stockez toutes les clés dans un coffre-fort de secrets — jamais en clair dans le code
  • Appliquez le principe de moindre privilège : ACLs restreintes, pas de wildcards en production
  • Automatisez la rotation des clés selon une politique définie (30 à 180 jours)
  • Mettez en place un audit régulier et des alertes pour les événements critiques
  • Documentez votre procédure de réponse à incident pour les clés compromises
  • Combinez ACLs restrictives, limites de débit et limites de dépenses pour une protection multicouche