Segreti e variabili d'ambiente
Come passare una chiave Stripe o qualsiasi impostazione a una funzione senza scriverla nel codice e cosa protegge effettivamente la piattaforma.
1. Impostare una variabile
Ogni variabile appartiene ad una funzione. L'impostazione delle variabili richiede una chiave service_role.
PUT /env sostituisce l'intero set di variabili con l'elenco inviato. aura secrets set e unset leggono i valori correnti, cambiano le chiavi nominate e riscrivono il risultato.
La distribuzione del nuovo codice con aura functions deploy lascia le variabili intatte.
2. Leggilo nella funzione
Le variabili vengono lette ad ogni invocazione: una modifica si applica alla chiamata successiva.
3. Variabili aggiunte dalla piattaforma
| Variabile | Valore |
|---|---|
AURABASE_PROJECT_ID | L'ID del progetto. Sempre impostato. |
AURABASE_FUNCTION_NAME | Il nome della funzione. Sempre impostato. |
AURABASE_URL | L'URL della piattaforma, quando lo definisce l'operatore della piattaforma. |
AURABASE_ANON_KEY | Una chiave della piattaforma, quando l'operatore la definisce. |
Non è possibile sovrascrivere questi nomi. L'ambiente dell'host non è visibile alla tua funzione: in un'esecuzione reale Deno.env.get('PATH') ha restituito undefined.
Per chiamare il tuo progetto da una funzione, memorizza una chiave service_role come segreto di quella funzione e inviala nell'intestazione apikey di una richiesta HTTP. Non inoltrare mai la chiave di un utente e non inserire mai una chiave service_role in un browser.
4. Cosa è crittografato
| Percorso | Crittografato a riposo |
|---|---|
PUT /v1/functions/{name}/env | Sì, se il servizio ha una chiave di crittografia configurata (FN_ENV_ENCRYPTION_KEY, AES-256-GCM). Senza di esso, i valori vengono archiviati come inviati e il servizio registra un avviso all'avvio. |
aura secrets set / unset | No: la CLI scrive tramite PATCH, che memorizza i valori così come inviati. |
env_vars in una richiesta di distribuzione | No, stesso motivo. |
Nel nostro test locale, un valore scritto da PUT /env è stato restituito invariato dalla definizione della funzione, perché non era configurata alcuna chiave.
La crittografia dei segreti dipende dalla distribuzione e solo il percorso PUT /env può crittografarli. Il percorso CLI li memorizza come indicato. Fino a quando la CLI non utilizza PUT /env, utilizza la chiamata HTTP sopra per i segreti di produzione.
Anche la lettura dei segreti è limitata. GET /v1/functions/{name}/env restituisce i valori decrittografati e, come GET /v1/functions/{name}, richiede una chiave service_role. Una chiave pubblica riceve 403.
5. Regole da seguire
- Non codificare mai un segreto in
index.ts. Il codice sorgente di una funzione viene archiviato nel progetto e restituito a qualsiasi chiamanteservice_role. - Non registrare mai un segreto. L'output di
console.logfinisce nei log del runtime. - Utilizza una variabile per funzione, con la chiave più stretta che funziona (una chiave limitata del tuo provider, non la chiave principale).
- Ruota una chiave impostando il nuovo valore e non ridistribuendo nulla: la chiamata successiva lo utilizza.