使用客户管理的密钥加密静态应用程序数据

静态加密函数应用的应用程序数据需要一个 Azure 存储帐户和一个 Azure Key Vault。 从部署包运行应用时,将使用这些服务。

  • Azure 存储提供静态加密。 你可以使用系统提供的密钥或自己的密钥(客户管理的密钥)。 当 Azure 存储不是在 Azure 上的函数应用中运行时,将在其中存储应用程序数据。
  • 从部署包运行是应用服务的部署功能。 借助此功能可以使用共享访问签名 (SAS) URL 从 Azure 存储帐户部署站点内容。
  • Key Vault 引用是应用服务的一项安全功能。 借助此功能可以在运行时将机密作为应用程序设置导入。 使用此机密可以加密 Azure 存储帐户的 SAS URL。

设置静态加密

创建 Azure 存储帐户

首先,创建一个 Azure 存储帐户使用客户管理的密钥将其加密。 创建存储帐户后,使用 Azure 存储资源管理器上传包文件。

接下来,使用存储资源管理器生成 SAS

注意

请保存此 SAS URL,因为以后在运行时启用部署包的安全访问时需要用到它。

配置从存储帐户中的包运行

将文件上传到 Blob 存储并获取该文件的 SAS URL 后,请将 WEBSITE_RUN_FROM_PACKAGE 应用程序设置指定为该 SAS URL。 以下示例使用 Azure CLI 执行此操作:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_RUN_FROM_PACKAGE="<your-SAS-URL>"

添加此应用程序设置会导致函数应用重启。 重启应用后,浏览到该应用,并确保它已使用部署包正常启动。 如果应用程序未正常启动,请参阅“从包运行”故障排除指南

使用 Key Vault 引用加密应用程序设置

现在,可将 WEBSITE_RUN_FROM_PACKAGE 应用程序设置的值替换为对 SAS 编码 URL 的 Key Vault 引用。 这会使 SAS URL 在 Key Vault 中加密,从而提供附加的安全层。

  1. 使用以下 az keyvault create 命令创建 Key Vault 实例。

    az keyvault create --name "Contoso-Vault" --resource-group <group-name> --location chinanorth2    
    
  2. 按照这些说明向应用授予对 Key Vault 的访问权限:

  3. 使用以下 az keyvault secret set 命令将外部 URL 添加为 Key Vault 中的机密:

    az keyvault secret set --vault-name "Contoso-Vault" --name "external-url" --value "<SAS-URL>"    
    
  4. 使用以下 az webapp config appsettings set 命令创建 WEBSITE_RUN_FROM_PACKAGE 应用程序设置,该设置的值为对外部 URL 的 Key Vault 引用:

    az webapp config appsettings set --settings WEBSITE_RUN_FROM_PACKAGE="@Microsoft.KeyVault(SecretUri=https://Contoso-Vault.vault.azure.cn/secrets/external-url/<secret-version>"    
    

    上述 az keyvault secret set 命令的输出中会显示 <secret-version>

更新此应用程序设置会导致函数应用重启。 重启应用后,请浏览到该应用,并确保它已使用 Key Vault 引用正常启动。

如何轮换访问令牌

最佳做法是定期轮换存储帐户的 SAS 密钥。 为了确保函数应用不会无意中失去访问权限,还必须更新 Key Vault 中的 SAS URL。

  1. 若要轮换 SAS 密钥,请在 Azure 门户中导航到你的存储帐户。 在“设置”>“访问密钥”下,单击相应的图标来轮换 SAS 密钥。

  2. 复制新的 SAS URL,并使用以下命令在 Key Vault 中设置更新的 SAS URL:

    az keyvault secret set --vault-name "Contoso-Vault" --name "external-url" --value "<SAS-URL>"    
    
  3. 将应用程序设置中的 Key Vault 引用更新为新的机密版本:

    az webapp config appsettings set --settings WEBSITE_RUN_FROM_PACKAGE="@Microsoft.KeyVault(SecretUri=https://Contoso-Vault.vault.azure.cn/secrets/external-url/<secret-version>"    
    

    上述 az keyvault secret set 命令的输出中会显示 <secret-version>

如何撤销函数应用的数据访问权限

可通过两种方法撤消函数应用对存储帐户的访问权限。

轮换 Azure 存储帐户的 SAS 密钥

如果轮换了存储帐户的 SAS 密钥,则函数应用将不再有权访问该存储帐户,但它会使用上次下载的包文件版本继续运行。 重启函数应用可以清除上次下载的版本。

删除函数应用对 Key Vault 的访问权限

通过禁用函数应用对 Key Vault 的访问权限,来撤销函数应用对站点数据的访问权限。 为此,请删除针对函数应用的标识的访问策略。 此标识是之前在配置 Key Vault 引用时创建的同一标识。

摘要

现在,应用程序文件已在存储帐户中静态加密。 当函数应用启动时,它会从 Key Vault 检索 SAS URL。 最后,函数应用会从存储帐户加载应用程序文件。

如果需要撤销函数应用对存储帐户的访问权限,可以撤销对 Key Vault 的访问权限,或轮换存储帐户密钥,使 SAS URL 失效。

常见问题解答

从部署包运行函数应用是否会产生任何额外的费用?

只会产生 Azure 存储帐户相关的费用,以及任何适用的传出费用。

从部署包运行会给函数应用产生怎样的影响?

  • 从部署包运行应用会使 wwwroot/ 变为只读。 应用在尝试写入此目录时会收到错误。
  • 不支持 TAR 和 GZIP 格式。
  • 此功能与本地缓存不兼容。

后续步骤