你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。

在Azure 容器应用上存储用于Azure Functions的应用程序级别的机密

应用级机密是函数代码和绑定在运行时使用的配置值。 与保护 HTTP 终结点的 Functions 访问密钥不同,应用级机密是应用程序连接到其他服务所需的凭据。

常见示例包括:

  • 基础结构连接 - AzureWebJobsStorage - 事件中心、服务总线、Cosmos DB 和 SQL 的连接字符串、触发器和绑定连接。
  • 业务凭据 - 第三方 API 密钥、数据库密码、SaaS 平台令牌。
  • 自定义配置 - 代码从环境变量读取的任何敏感值。

选择存储选项

Azure 容器应用提供了两种方法来存储应用级机密:

选项 最适用于 集中式管理 自动旋转 审核日志
容器应用机密 开发/测试、简单的单应用工作负载 否 - 范围限定为一个应用 不 仅活动日志
密钥保管库引用 生产、多应用、合规性 是 - 在所有应用中 是(无版本 URI) 完整 密钥保管库诊断

小窍门

请从容器应用的密钥开始,以简化流程。 需要集中管理、自动轮换或合规性等级审核时,请改用密钥保管库引用。

Prerequisites

使用容器应用机密

容器应用将机密存储在应用的 configuration.secrets 数组中,并加密静态值。 可以在环境变量、缩放规则、卷装载和 Dapr 组件中引用机密。

存储机密

  1. 在 Azure 门户中转到 Functions 容器应用。

  2. 在 “设置”下,选择 “机密”。

  3. 选择 “添加” 并输入以下值:

    财产 价值
    名称 机密名称,例如 database-password。 仅使用小写字母、数字和连字符。
    类型 容器应用机密
    价值 你的机密值。
  4. 选择 并添加。

引用环境变量中的机密

存储机密后,将其引用在环境变量中,以便函数代码可以读取它。

  1. 在 Functions 容器应用中的 “应用程序”下,选择 “修订”和“副本”。

  2. 选择“创建新修订版”。

  3. 在“ 容器 ”选项卡中,选择容器,然后选择“ 编辑”。

  4. 选择“ 环境变量 ”选项卡,然后选择“ 添加”。

  5. 输入以下值:

    财产 价值
    名称 DATABASE_PASSWORD
    Source 引用一个密钥
    价值 database-password
  6. 选择“ 保存”,然后选择“ 创建 ”以部署新修订。

验证密钥

通过调用函数并确认其正常运行且没有与缺少配置相关的错误,以此确认您的函数可以读取机密值。

curl "https://<FUNCTIONS_APP_URL>/api/<FUNCTION_NAME>"

重要

容器应用在运行时将机密值注入到环境变量中。 代码读取环境变量,并且不直接访问机密存储。

Limitations

容器应用机密具有以下限制:

  • 无集中化 - 每个容器应用单独存储其自己的机密。
  • 无自动轮换 - 必须手动更新机密值。
  • 无过期 - 机密不会自动过期。
  • 受限审核 - 仅限基本活动日志;没有详细的机密访问审核。
  • 无版本控制 - 无内置机密版本历史记录。
  • 更新行为 - 更改机密不会触发新修订。 必须创建新的修订版本,或重新启动现有修订版本才能应用更改。

使用 密钥保管库 的引用

密钥保管库引用允许容器应用使用托管标识直接从Azure 密钥保管库拉取机密。 此方法提供集中式管理、自动轮换和符合合规标准的审核。

步骤 1:设置托管标识

容器应用需要托管标识才能在没有凭据的情况下向密钥保管库进行身份验证。

  1. 在 Azure 门户中转到 Functions 容器应用。

  2. 在“设置”下选择“标识”。

  3. 在 “系统分配 ”选项卡中,将 “状态 ”设置为 “打开”。

  4. 选择“ 保存”,然后选择“ 是 ”以确认。

步骤 2:授予密钥保管库访问权限

将 密钥保管库 机密用户角色分配给托管标识,以便它可以读取机密。

  1. 在 Azure 门户中转到密钥保管库。

  2. 在“设置”中选择“访问控制 (IAM)”。

  3. 选择添加>添加角色分配。

  4. 在Role选项卡上,选择“密钥保管库 Secrets User”。

  5. 选择“下一步”。

  6. 在“成员”选项卡上,选择“托管标识”,然后选择“选择成员”。

  7. 在选择托管标识窗格中,选择订阅,将托管标识类型选择为容器应用,选择Functions容器应用,然后选择选择。

  8. 选择审核 + 分配。

步骤 3:将机密存储在密钥保管库

  1. 在 密钥保管库 的 Objects 下,选择 Secrets。

  2. 选择生成/导入。

  3. 输入以下值:

    财产 价值
    上传选项 手动
    名称 机密名称,例如DatabasePassword。
    价值 你的机密值。
  4. 选择“创建”。

  5. 选择新创建的机密,然后选择当前版本。

  6. 复制 机密标识符 URI。 使用无版本 URI(不含尾随版本段)启用自动轮换。

步骤 4:引用容器应用中的密钥保管库机密信息

创建引用密钥保管库机密的容器应用机密,然后将其绑定到环境变量。

  1. 转到 Functions 容器应用。 在 “设置”下,选择 “机密”。

  2. 选择 并添加。

  3. 在 “添加机密”中,输入以下值:

    财产 价值
    名称 database-password
    类型 密钥保管库引用
    密钥保管库 机密 URL 您复制的机密标识符 URI。
    身份 系统分配的标识 (或用户分配的标识)。
  4. 选择 并添加。

  5. 在 “应用程序”下,选择“ 修订”和“副本”。 使用DATABASE_PASSWORD环境变量引用database-password机密,创建新的修订。

步骤 5:验证密钥保管库引用

调用函数并确认其无误运行,不会出现与配置缺失相关的错误。

curl "https://<FUNCTIONS_APP_URL>/api/<FUNCTION_NAME>"

自动密钥轮换

使用无版本 URI 引用密钥保管库机密时,容器应用会自动检索最新版本:

  • 无版本 URI: https://myvault.vault.azure.net/secrets/mysecret - 始终使用最新版本。
  • 版本控制 URI: https://myvault.vault.azure.net/secrets/mysecret/ec96f020... - 固定到特定版本。

使用无版本 URI 时,容器应用会在 30 分钟内检查新版本,并自动重启活动修订以选取新值。