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

使用客户管理的密钥进行静态加密

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

  • Azure 存储提供静态加密。 你可以使用系统提供的密钥或自己的密钥(客户管理的密钥)。 应用程序数据未在 Azure 中的 Web 应用内运行时会存储在 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>"

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

使用 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 eastus    
    
  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.net/secrets/external-url/<secret-version>"    
    

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

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

如何轮换访问令牌

最佳做法是定期轮换存储帐户的 SAS 密钥。 为了确保 Web 应用不会无意中失去访问权限,还必须更新 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.net/secrets/external-url/<secret-version>"    
    

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

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

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

轮换 Azure 存储帐户的 SAS 密钥

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

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

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

摘要

现在,应用程序文件已在存储帐户中静态加密。 当 Web 应用启动时,它会密钥保管库检索 SAS URL。 最后,Web 应用会从存储帐户加载应用程序文件。

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

常见问题解答

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

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

从部署包运行会对 Web 应用产生怎样的影响?

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

后续步骤