使用客户管理的密钥进行静态加密
对 Web 应用的应用程序静态数据进行加密需要一个 Azure 存储帐户和一个 Azure Key Vault。 从部署包运行应用时,将使用这些服务。
- Azure 存储提供静态加密。 你可以使用系统提供的密钥或自己的密钥(客户管理的密钥)。 应用程序数据未在 Azure 中的 Web 应用内运行时会存储在 Azure 存储中。
- 从部署包运行是应用服务的部署功能。 借助此功能可以使用共享访问签名 (SAS) URL 从 Azure 存储帐户部署站点内容。
- Key Vault 引用是应用服务的一项安全功能。 借助此功能可以在运行时将机密作为应用程序设置导入。 使用此机密可以加密 Azure 存储帐户的 SAS URL。
首先,创建一个 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 应用重启。 重启应用后,浏览到该应用,并确保它已使用部署包正常启动。 如果应用程序未正常启动,请参阅“从包运行”故障排除指南。
现在,可将 WEBSITE_RUN_FROM_PACKAGE
应用程序设置的值替换为对 SAS 编码 URL 的 Key Vault 引用。 这会使 SAS URL 在 Key Vault 中加密,从而提供附加的安全层。
使用以下
az keyvault create
命令创建 Key Vault 实例。az keyvault create --name "Contoso-Vault" --resource-group <group-name> --location chinaeast2
按照这些说明向应用授予对 Key Vault 的访问权限:
使用以下
az keyvault secret set
命令将外部 URL 添加为 Key Vault 中的机密:az keyvault secret set --vault-name "Contoso-Vault" --name "external-url" --value "<SAS-URL>"
使用以下
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>
。
更新此应用程序设置会导致 Web 应用重启。 重启应用后,请浏览到该应用,并确保它已使用 Key Vault 引用正常启动。
最佳做法是定期轮换存储帐户的 SAS 密钥。 为了确保 Web 应用不会无意中失去访问权限,还必须更新 Key Vault 中的 SAS URL。
若要轮换 SAS 密钥,请在 Azure 门户中导航到你的存储帐户。 在“设置”>“访问密钥”下,单击相应的图标来轮换 SAS 密钥。
复制新的 SAS URL,并使用以下命令在 Key Vault 中设置更新的 SAS URL:
az keyvault secret set --vault-name "Contoso-Vault" --name "external-url" --value "<SAS-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>
。
可通过两种方法撤消 Web 应用对存储帐户的访问权限。
如果轮换了存储帐户的 SAS 密钥,则 Web 应用将不再有权访问该存储帐户,但它会使用上次下载的包文件版本继续运行。 重启 Web 应用可以清除上次下载的版本。
通过禁用 Web 应用对 Key Vault 的访问权限,来撤销 Web 应用对站点数据的访问权限。 为此,请删除针对 Web 应用的标识的访问策略。 此标识是之前在配置 Key Vault 引用时创建的同一标识。
现在,应用程序文件已在存储帐户中静态加密。 当 Web 应用启动时,它会密钥保管库检索 SAS URL。 最后,Web 应用会从存储帐户加载应用程序文件。
如果需要撤销 Web 应用对存储帐户的访问权限,可以撤销对 Key Vault 的访问权限,或轮换存储帐户密钥,使 SAS URL 失效。
只会产生 Azure 存储帐户相关的费用,以及任何适用的传出费用。
- 从部署包运行应用会使
wwwroot/
变为只读。 应用在尝试写入此目录时会收到错误。 - 不支持 TAR 和 GZIP 格式。
- 此功能与本地缓存不兼容。