使用客戶自控金鑰來加密應用程式的待用資料

加密函數應用程式的應用程式待用資料時,需要 Azure 儲存體帳戶和 Azure Key Vault。 當您從部署套件執行應用程式時,會使用這些服務。

  • Azure 儲存體提供待用加密。 您可以使用系統提供的金鑰或您自己的客戶自控金鑰。 若應用程式資料未於 Azure 的函數應用程式中執行,則此為儲存位置。
  • 從部署套件執行是 App Service 的部署功能。 此功能可讓您使用共用存取簽章 (SAS) URL,從 Azure 儲存體帳戶部署網站內容。
  • Key Vault 參考是 App Service 的安全性功能。 此功可能讓您在執行階段匯入祕密,作為應用程式設定。 使用此方法來加密 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>"

新增此應用程式設定時,函數應用程式會重新啟動。 應用程式重新啟動之後,請瀏覽至該應用程式,並確定應用程式已使用部署套件正確啟動。 如果應用程式未正確啟動,請參閱從套件執行的疑難排解指南

使用 Key Vault 參考加密應用程式設定

現在,您可以使用 SAS 編碼 URL 的 Key Vault 參考來取代 WEBSITE_RUN_FROM_PACKAGE 應用程式設定的值。 這會讓 SAS URL 在 Key Vault 中加密,以提供額外的安全性層級。

  1. 請執行下列 az keyvault create 命令以建立 Key Vault 執行個體。

    az keyvault create --name "Contoso-Vault" --resource-group <group-name> --location eastus    
    
  2. 請遵循 等指示,將金鑰保存庫的存取權授與您的應用程式

  3. 使用下列 az keyvault secret set 命令,將外部 URL 新增為金鑰保存庫中的祕密:

    az keyvault secret set --vault-name "Contoso-Vault" --name "external-url" --value "<SAS-URL>"    
    
  4. 搭配作為外部 URL 的 Key Vault 參考值,使用下列 az webapp config appsettings set 命令建立具有該值的 WEBSITE_RUN_FROM_PACKAGE 應用程式設定:

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

    <secret-version> 將會在上一個 az keyvault secret set 命令的輸出中。

更新此應用程式設定時,函數應用程式會重新啟動。 應用程式重新啟動之後,請瀏覽至該應用程式,確定它已使用 Key Vault 參考正確啟動。

如何輪替存取權杖

最佳做法是定期輪替儲存體帳戶的 SAS 金鑰。 若要確保函數應用程式不會意外失去存取權,您還必須更新 Key Vault 中的 SAS URL。

  1. 瀏覽至 Azure 入口網站中的儲存體帳戶,以執行此動作。 在 [設定]> [存取金鑰] 下方,選取圖示以輪替 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.net/secrets/external-url/<secret-version>"    
    

    <secret-version> 將會在上一個 az keyvault secret set 命令的輸出中。

如何撤銷函數應用程式的資料存取

有兩種方法可撤銷函數應用程式的儲存體帳戶存取權。

輪替 Azure 儲存體帳戶的 SAS 金鑰

若儲存體帳戶的 SAS 金鑰輪替,函數應用程式將無法再存取儲存體帳戶,但會繼續使用上次下載的套件檔案版本執行。 重新啟動函數應用程式,以清除上次下載的版本。

移除函數應用程式的 Key Vault 存取權

您可停用函數應用程式的 Key Vault 存取權,以撤銷函數應用程式的站台資料存取權。 若要進行,請移除函數應用程式身分識別的存取原則。 這是您稍早在設定金鑰保存庫參考時建立的相同身分識別。

摘要

您的應用程式檔案現在會在儲存體帳戶中待用加密。 當函數應用程式啟動時,則會從金鑰保存庫擷取 SAS URL。 最後,函數應用程式會從儲存體帳戶載入應用程式檔案。

如果您需要撤銷函數應用程式對於儲存體帳戶的存取權,您可以撤銷金鑰保存庫的存取權,或輪替儲存體帳戶金鑰,兩者都會使 SAS URL 失效。

常見問題集

從部署套件執行函數應用程式時,是否會有任何額外費用?

只有與 Azure 儲存體帳戶相關聯的成本,以及任何適用的輸出費用。

從部署套件執行時,我的函數應用程式會有何影響?

  • 從部署套件執行您的應用程式會讓 wwwroot/ 變成唯讀。 當您的應用程式嘗試寫入此目錄時,會收到錯誤。
  • 不支援 TAR 和 GZIP 格式。
  • 此功能與本機快取不相容。

下一步