使用客户管理的密钥对你的应用数据进行静态加密

加密功能应用的静态应用数据需要一个 Azure 存储 账户和一个 Azure 密钥保管库。 从部署包运行应用时,将使用这些服务。

  • Azure 存储提供静态加密。 可以使用系统提供的密钥或你自己的客户管理的密钥。 当你的应用数据不在 Azure 函数应用中运行时,就是存放在这里。
    • 从外部部署包运行 是 App Service 的部署功能。 它允许使用共享访问签名 (SAS) URL 从 Azure 存储帐户部署站点内容。
  • 密钥保管库 引用是 App Service 的一项安全功能。 它允许在运行时将机密作为应用程序设置导入。 使用此 URL 加密 Azure 存储帐户的 SAS URL。

设置静态加密

创建 Azure 存储帐户

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

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

注释

保存此 SAS URL,稍后将使用此 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>"

添加这个应用设置会导致函数应用重启。 重启应用后,浏览到该应用并确保应用已使用部署包正确启动。 如果应用程序启动不正确,请查看 包部署的相关考虑。

使用 密钥保管库 引用加密应用程序设置

现在,您可以将 WEBSITE_RUN_FROM_PACKAGE 应用程序设置的值替换为对 SAS 编码的 URL 的 密钥保管库 引用。 这将在 密钥保管库 中加密 SAS URL,从而提供额外的安全层。

  1. 使用以下命令 az keyvault create 创建 密钥保管库 实例。

    az keyvault create --name "Contoso-Vault" --resource-group <group-name> --location chinanorth2    
    
  2. 请按下列步骤操作,给应用授予对密钥保管库的访问权限:

  3. 使用以下命令将您的外部 URL 作为机密添加到密钥保管库中:

    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 的 密钥保管库 引用:

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

    该 <secret-version> 命令将位于上一 az keyvault secret set 命令的输出中。

更新这个应用设置会导致你的函数应用重启。 应用重启后,浏览到该应用,并确认它已使用 密钥保管库 引用正确启动。

如何轮换访问令牌

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

  1. 在 Azure 门户中导航到存储帐户来轮换 SAS 密钥。 在 “设置>访问”密钥下,选择用于轮换 SAS 密钥的图标。

  2. 复制新的 SAS URL,并使用以下命令在密钥保管库中设置更新的 SAS URL:

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

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

    该 <secret-version> 命令将位于上一 az keyvault secret set 命令的输出中。

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

有两种方法可以撤销功能应用对存储账户的访问权限。

轮换 Azure 存储帐户的 SAS 密钥

如果存储账户的 SAS 密钥被轮换,函数应用将无法访问该存储账户,但会继续运行,使用最后下载的包文件版本。 重启函数应用以清除最后下载的版本。

移除函数应用对 密钥保管库 的访问权限

你可以通过禁用功能应用对密钥保管库的访问来撤销其对网站数据的访问。 为此,移除函数应用身份的访问策略。 这是你之前在配置密钥保管库引用时创建的同一标识。

Summary

应用程序文件现已在存储帐户中静态加密。 当函数应用启动时,它会从你的密钥库中获取SAS的URL。 最后,函数应用会从存储账户加载应用文件。

如果你需要撤销函数应用对你存储账户的访问权限,你可以选择撤销密钥库的访问权限,或者轮换存储账户密钥,这两种方法都会使SAS的URL失效。

常见问题解答

从部署包运行我的函数应用会有额外费用吗?

仅与 Azure 存储帐户关联的成本以及任何适用的出口费用。

从部署包运行会如何影响我的函数应用?

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

后续步骤