光环标志
光环基地文档
文档›Edge Functions›Secrets and environment

秘密和环境变量

如何将 Stripe 键或任何设置传递给函数而不将其写入代码中,以及平台实际保护的内容。

6分钟 读取·级别 中间·修改于 2026年10月12日
该英文文本是根据法文原文自动生成的,尚未经过审查。
该页面已自动翻译。英文版具有权威性。
#
写

1.设置变量

每个变量都属于一个函数。设置变量需要 service_role 键。

terminalbash
aura secrets set --function checkout STRIPE_SECRET_KEY=sk_live_… WEBHOOK_SECRET=whsec_…
aura secrets list --function checkout     # 值被屏蔽:STRIPE_SECRET_KEY sk_l***
aura secrets unset --function checkout WEBHOOK_SECRET
terminalbash
curl -X PUT "$AURA_URL/v1/functions/checkout/env" \
  -H "apikey: $AURA_SERVICE_ROLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"vars":[{"key":"STRIPE_SECRET_KEY","value":"sk_live_…"}]}'

PUT /env 用您发送的列表替换 整个变量集。 aura secrets set 和 unset 读取当前值,更改您命名的键并将结果写回。

重新部署会保守您的秘密

使用 aura functions deploy 部署新代码不会影响变量。

#
阅读

2.在函数中读取

aurabase/functions/checkout/index.tstypescript
Deno.serve(async (req) => {
  const key = Deno.env.get('STRIPE_SECRET_KEY')
  if (!key) return new Response('STRIPE_SECRET_KEY is not set', { status: 500 })
  // ...使用“key”调用 Stripe
  return Response.json({ ok: true })
})

每次调用时都会读取变量:更改适用于下一次调用。

#
注入

3. 平台添加的变量

变量价值
AURABASE_PROJECT_ID项目 ID。始终设置。
AURABASE_FUNCTION_NAME函数的名称。始终设置。
AURABASE_URL平台 URL,由平台运营商定义。
AURABASE_ANON_KEY平台密钥(由操作员定义)。

您不能覆盖这些名称。主机的环境对您的函数不可见:在实际运行中 Deno.env.get('PATH') 返回 undefined。

要从函数调用您自己的项目,请将 service_role 密钥存储为该函数的秘密,并将其发送到 HTTP 请求的 apikey 标头中。切勿转发用户的密钥,也切勿将 service_role 密钥放入浏览器中。

#
保护

4.什么是加密的

路径静态时加密
PUT /v1/functions/{name}/env是的,如果服务配置了加密密钥(FN_ENV_ENCRYPTION_KEY、 AES-256-GCM)。如果没有它,值将按发送时的形式存储,并且服务会在启动时记录警告。
aura secrets set / unset否:CLI 通过 PATCH写入,它存储发送的值。
部署请求中的 env_vars不,同样的原因。

在我们的本地测试中,函数定义返回由 PUT /env 写入的值,未更改,因为没有配置键。

在依赖加密之前询问您的平台运营商

机密是否加密取决于部署,并且只有 PUT /env 路径可以对其进行加密。 CLI 路径按给定方式存储它们。在 CLI 使用 PUT /env之前,请使用上面的 HTTP 调用来获取生产密钥。

读回秘密也受到限制。 GET /v1/functions/{name}/env 返回解密的值,并且与 GET /v1/functions/{name}一样,需要 service_role 密钥。公钥接收 403。

#
规则

5. 遵守规则

  • 切勿在 index.ts中硬编码秘密。函数的源代码存储在您的项目中并返回给任何 service_role 调用者。
  • 切勿记录秘密。 console.log 的输出最终出现在运行时的日志中。
  • 每个函数使用一个变量,并使用最窄的可用密钥(来自提供商的受限密钥,而不是主密钥)。
  • 通过设置新值并且不重新部署任何内容来轮换密钥:下一个调用将使用它。
最后更新· 2026年10月12日