veilletech.fr
26 août Feed du jour
#09 VERCEL Article

Vos jetons n'expirent jamais, c'est le problème

Le meilleur secret est celui que votre application ne détient pas.

Vercel Connect passe en disponibilité générale avec plus de cent connecteurs. Le principe : l'application ne stocke aucun identifiant de fournisseur et demande à l'exécution un jeton de courte durée, limité à la tâche, en prouvant son identité par l'OIDC du déploiement. La révocation devient une commande au lieu d'une rotation suivie d'un redéploiement.

3 min de lecturevidéo 1:12
Partager
Sommaire5 sections
  1. Ce qui se passe
  2. Le problème, posé correctement
  3. Comment ça marche
  4. Ce que ça change, et ce que ça ne change pas
  5. À retenir

Ce qui se passe

Vercel Connect passe en disponibilité générale, avec plus de 100 connecteurs vers des services tiers. Le principe : votre application ne stocke plus aucun identifiant de fournisseur, elle en demande un à l'exécution.

L'argument d'ouverture mérite d'être cité, parce qu'il vaut bien au-delà de Vercel : mettre un jeton permanent dans un coffre-fort le rend plus difficile à voler, pas moins dangereux une fois volé. Il n'expire toujours pas, et aucun coffre ne limite ce qu'un identifiant fuité peut faire.

Le problème, posé correctement

Gérer des identifiants est devenu un travail à part entière : scripts de rotation, secrets recopiés d'un environnement à l'autre, jetons partagés entre collègues. Les agents ont aggravé la situation — ils touchent plus de systèmes, avec plus d'autonomie, plus souvent — alors que les outils pour contenir un secret n'ont pas bougé.

Le tableau que dresse le billet résume l'écart entre un jeton stocké et un jeton demandé :

Propriété Jeton stocké Jeton demandé à l'exécution
Durée de vie n'expire jamais courte, renouvelé automatiquement
Portée tout ce dont l'agent pourrait avoir besoin limitée à la tâche demandée
Identité un robot partagé pour tous l'application, ou un utilisateur nommé
Rotation émettre, recopier, redéployer rien à faire
Révocation tourner la clé et redéployer une commande

Comment ça marche

On enregistre une fois un connecteur pour un fournisseur — Slack, GitHub, Snowflake, Shopify, ou son propre service OAuth —, on l'attache aux projets et environnements concernés, et le code réclame un jeton au moment de s'en servir :

Terminal
vercel connect create slack --name acme-slack
TypeScript
import { getToken } from '@vercel/connect';

const token = await getToken('slack/acme-slack', {
  subject: { type: 'app' },
});

Le point important est ce qui prouve l'identité du demandeur. Ce n'est pas un secret de plus : chaque déploiement Vercel porte une identité OIDC, et le SDK s'en sert. Autrement dit, il n'y a pas de « secret pour aller chercher les secrets » — ce qui est exactement le problème que ce genre de dispositif rate souvent.

Deux granularités s'ajoutent :

Ce que ça change, et ce que ça ne change pas

La limite est franche : la finesse réelle dépend du service en face. GitHub est l'exemple le plus favorable ; tous les fournisseurs n'offrent pas ce niveau de découpage, et un connecteur ne peut pas inventer une granularité que l'API distante ne propose pas.

L'autre limite est l'adhérence : le mécanisme repose sur l'identité OIDC des déploiements Vercel. Hors de cette plateforme, ce n'est pas transposable tel quel.

En revanche, le patron l'est. La même idée existe avec les rôles IAM et AssumeRoleWithWebIdentity sur AWS, avec Workload Identity Federation sur GCP, avec les jetons OIDC de GitHub Actions. Le point commun : la machine prouve ce qu'elle est au lieu de présenter ce qu'elle détient.

À retenir

Si vous avez des jetons de fournisseur dans vos variables d'environnement — et c'est le cas de presque tout le monde —, la question à se poser n'est pas « sont- ils bien rangés » mais « combien de temps vivent-ils, et que couvrent-ils ». Le meilleur secret reste celui que votre application ne détient pas.

Source : Vercel