簡體   English   中英

通過REST API將證書從Azure Key Vault添加到Azure App Service

[英]Add certificate from Azure Key Vault to Azure App Service via REST API

我試圖通過REST API(在PowerShell中)將私有的自簽名證書添加到Azure應用服務(如底部的屏幕截圖所示)。 我按以下方式調用API:

$certBody = @{
  name = "InfoServiceTAKeyVaultDev"
  location = "West Europe"
  properties = @{
    keyVaultId = "/subscriptions/<subscriptionId>/resourceGroups/BzInfoServiceTADEV/providers/Microsoft.KeyVault/vaults/BzKVInfoServiceTADev"
    keyVaultSecretName = "InfoServiceTAKeyVaultCert"
  }
}
Invoke-RestMethod `
  -Method Put `
  -Uri ("https://management.azure.com/subscriptions/<subscriptionId>" +
        "/resourceGroups/BzInformatieServiceResourceGroupDEV" +
        "/providers/Microsoft.Web/certificates" +
        "/InfoServiceTAKeyVaultDev" +
        "?api-version=2016-03-01") `
  -Headers @{ Authorization = ("Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSU...")
              "Content-Type" = "application/json" } `
  -Body ($certBody | ConvertTo-Json -Compress -Depth 3)

結果是錯誤消息: The service does not have access to '/subscriptions/<subscriptionId>/resourcegroups/bzinfoservicetadev/providers/microsoft.keyvault/vaults/bzkvinfoservicetadev' Key Vault. Please make sure that you have granted necessary permissions to the service to perform the request operation. The service does not have access to '/subscriptions/<subscriptionId>/resourcegroups/bzinfoservicetadev/providers/microsoft.keyvault/vaults/bzkvinfoservicetadev' Key Vault. Please make sure that you have granted necessary permissions to the service to perform the request operation.

在這種情況下,誰是無法訪問此Key Vault的“ 服務 ”? 我已經找到了一些 帖子,聲稱我應該將服務主體abfa0a7c-a6b6-4736-8310-5855508787cd添加到我的“密鑰保管箱”訪問策略中,但這沒有任何效果。

所需最終結果的屏幕截圖:

所需的最終結果

更新 :我已經啟用了高級訪問策略,即啟用對Azure資源管理器的訪問以進行模板部署 這也不起作用。

您將需要添加Enable access to Azure Resource Manager for template deployment高級訪問策略。

您不是直接將證書添加到Webapp,而是告訴Webapp證書在何處。 該Web應用程序依靠Resource Manager實際去收集證書並將其安裝到Webapp中。

密鑰庫確實具有廣泛的審核日志記錄,可以啟用該日志記錄,以了解嘗試訪問機密的內容,這使這些問題更易於調試。

事實證明,@ tim-scriv的評論非常有幫助。 我必須在密鑰保管庫訪問策略中添加以下主體: Microsoft Azure App Service (對象ID: 3ed082e0-d6c4-4071-ac9e-61363535a0a3 )。 獲得秘密的權限就足夠了。

我遇到了上述問題,並通過關注本文https://github.com/Azure/azure-quickstart-templates/tree/master/201-web-app-certificate-from-key-vault修復了該問題;

默認情況下,“ Microsoft.Azure.WebSites”資源提供程序(RP)無權訪問模板中指定的Key Vault,因此您需要在部署模板之前通過執行以下PowerShell命令對其進行授權:

Login-AzureRmAccount Set-AzureRmContext -SubscriptionId AZURE_SUBSCRIPTION_ID Set-AzureRmKeyVaultAccessPolicy -VaultName KEY_VAULT_NAME -ServicePrincipalName abfa0a7c-a6b6-4736-8310-5855508787cd -PermissionsToSecrets get

ServicePrincipalName參數代表用戶租戶中的Microsoft.Azure.WebSites RP,並且對於所有Azure訂閱都將保持不變。 這是一次性操作。 正確配置密鑰保管庫后,就可以使用它來部署所需的任意數量的證書,而無需再次執行這些PowerShell命令。

添加Microsoft Azure App Service主體以具有對KeyVault的GET訪問權限也為我解決了同一問題。

就我而言,我試圖使用azurerm_template_deployment命令通過Terraform執行ARM模板,以將SSL證書添加到Azure Web App Service,然后將證書綁定到URL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM