Secrets et variables d'environnement
Comment transmettre une clé Stripe ou tout autre paramètre à une fonction sans l'écrire dans le code, et ce que la plateforme protège réellement.
1. Définir une variable
Chaque variable appartient à une fonction. La définition de variables nécessite une clé service_role.
PUT /env remplace l'ensemble des variables par la liste que vous envoyez. aura secrets set et unset lisent les valeurs actuelles, modifient les clés que vous nommez et réécrivent le résultat.
Le déploiement d'un nouveau code avec aura functions deploy laisse les variables intactes.
2. Lisez-le dans la fonction
Les variables sont lues à chaque invocation : une modification s'applique au prochain appel.
3. Variables ajoutées par la plateforme
| Variable | Valeur |
|---|---|
AURABASE_PROJECT_ID | L'identifiant du projet. Toujours réglé. |
AURABASE_FUNCTION_NAME | Le nom de la fonction. Toujours réglé. |
AURABASE_URL | L'URL de la plateforme, lorsque l'opérateur de la plateforme la définit. |
AURABASE_ANON_KEY | Une clé de plateforme, lorsque l'opérateur la définit. |
Vous ne pouvez pas remplacer ces noms. L'environnement de l'hôte n'est pas visible pour votre fonction : lors d'une exécution réelle, Deno.env.get('PATH') a renvoyé undefined.
Pour appeler votre propre projet à partir d'une fonction, stockez une clé service_role comme secret de cette fonction et envoyez-la dans l'en-tête apikey d'une requête HTTP. Ne transmettez jamais la clé d'un utilisateur et ne mettez jamais de clé service_role dans un navigateur.
4. Qu'est-ce qui est crypté
| Chemin | Chiffré au repos |
|---|---|
PUT /v1/functions/{name}/env | Oui, si le service a une clé de chiffrement configurée (FN_ENV_ENCRYPTION_KEY, AES-256-GCM). Sans cela, les valeurs sont stockées telles qu'elles ont été envoyées et le service enregistre un avertissement au démarrage. |
aura secrets set / unset | Non : la CLI écrit via PATCH, qui stocke les valeurs telles qu'elles sont envoyées. |
env_vars dans une demande de déploiement | Non, même raison. |
Lors de notre test local, une valeur écrite par PUT /env a été renvoyée inchangée par la définition de la fonction, car aucune clé n'était configurée.
Le chiffrement des secrets dépend du déploiement et seul le chemin PUT /env peut les chiffrer. Le chemin CLI les stocke comme indiqué. Jusqu'à ce que la CLI utilise PUT /env, utilisez l'appel HTTP ci-dessus pour les secrets de production.
La lecture des secrets est également limitée. GET /v1/functions/{name}/env renvoie les valeurs déchiffrées et, comme GET /v1/functions/{name}, nécessite une clé service_role. Une clé publique reçoit 403.
5. Règles à suivre
- Ne codez jamais en dur un secret dans
index.ts. Le code source d'une fonction est stocké dans votre projet et renvoyé à tout appelantservice_role. - Ne consignez jamais un secret. La sortie de
console.logse retrouve dans les journaux du runtime. - Utilisez une variable par fonction, avec la clé la plus étroite qui fonctionne (une clé restreinte de votre fournisseur, pas la clé principale).
- Faites pivoter une clé en définissant la nouvelle valeur et en ne redéployant rien : le prochain appel l'utilise.