Geheimnisse und Umgebungsvariablen
Wie man einen Stripe-Schlüssel oder eine beliebige Einstellung an eine Funktion übergibt, ohne sie in den Code zu schreiben, und was die Plattform tatsächlich schützt.
1. Legen Sie eine Variable fest
Jede Variable gehört zu einer Funktion. Das Setzen von Variablen erfordert einen service_role-Schlüssel.
PUT /env ersetzt den gesamten Variablensatz durch die von Ihnen gesendete Liste. aura secrets set und unset lesen die aktuellen Werte, ändern die von Ihnen benannten Schlüssel und schreiben das Ergebnis zurück.
Durch die Bereitstellung von neuem Code mit aura functions deploy bleiben die Variablen unberührt.
2. Lesen Sie es in der Funktion
Variablen werden bei jedem Aufruf gelesen: Eine Änderung gilt für den nächsten Aufruf.
3. Variablen, die die Plattform hinzufügt
| Variabel | Wert |
|---|---|
AURABASE_PROJECT_ID | Die Projekt-ID. Immer eingestellt. |
AURABASE_FUNCTION_NAME | Der Name der Funktion. Immer eingestellt. |
AURABASE_URL | Die Plattform-URL, wenn der Plattformbetreiber sie definiert. |
AURABASE_ANON_KEY | Ein Plattformschlüssel, wenn der Bediener ihn definiert. |
Sie können diese Namen nicht überschreiben. Die Umgebung des Hosts ist für Ihre Funktion nicht sichtbar: In einem echten Lauf hat Deno.env.get('PATH') undefined zurückgegeben.
Um Ihr eigenes Projekt von einer Funktion aus aufzurufen, speichern Sie einen service_role-Schlüssel als Geheimnis dieser Funktion und senden Sie ihn im apikey-Header einer HTTP-Anfrage. Leiten Sie niemals den Schlüssel eines Benutzers weiter und geben Sie niemals einen service_role-Schlüssel in einen Browser ein.
4. Was ist verschlüsselt?
| Pfad | Im Ruhezustand verschlüsselt |
|---|---|
PUT /v1/functions/{name}/env | Ja, , wenn für den Dienst ein Verschlüsselungsschlüssel konfiguriert ist (FN_ENV_ENCRYPTION_KEY, AES-256-GCM). Ohne sie werden die Werte wie gesendet gespeichert und der Dienst protokolliert beim Start eine Warnung. |
aura secrets set / unset | Nein: Die CLI schreibt über PATCH, wodurch die gesendeten Werte gespeichert werden. |
env_vars in einer Bereitstellungsanforderung | Nein, aus demselben Grund. |
In unserem lokalen Test wurde ein von PUT /env geschriebener Wert von der Funktionsdefinition unverändert zurückgegeben, da kein Schlüssel konfiguriert wurde.
Ob Geheimnisse verschlüsselt werden, hängt von der Bereitstellung ab und nur der Pfad PUT /env kann sie verschlüsseln. Der CLI-Pfad speichert sie wie angegeben. Bis die CLI PUT /env verwendet, verwenden Sie den obigen HTTP-Aufruf für Produktionsgeheimnisse.
Auch das Zurücklesen von Geheimnissen ist eingeschränkt. GET /v1/functions/{name}/env gibt die entschlüsselten Werte zurück und erfordert wie GET /v1/functions/{name} einen service_role-Schlüssel. Ein öffentlicher Schlüssel erhält 403.
5. Zu befolgende Regeln
- Kodieren Sie niemals ein Geheimnis in
index.tsfest. Der Quellcode einer Funktion wird in Ihrem Projekt gespeichert und an jedenservice_role-Aufrufer zurückgegeben. - Protokollieren Sie niemals ein Geheimnis. Die Ausgabe von
console.loglandet in den Protokollen der Laufzeit. - Verwenden Sie eine Variable pro Funktion mit dem engsten Schlüssel, der funktioniert (ein eingeschränkter Schlüssel Ihres Anbieters, nicht der Hauptschlüssel).
- Drehen Sie einen Schlüssel, indem Sie den neuen Wert festlegen und nichts erneut bereitstellen: Der nächste Aufruf verwendet ihn.