在部署 Azure 受控應用程式時存取 Key Vault 秘密

當您需要在部署期間,傳送安全值 (例如密碼) 做為參數時,您可以從 Azure Key Vault 擷取值。 若要在部署受控應用程式時存取 Key Vault,您必須授與 設備資源提供者 服務主體的存取權。 受控應用程式服務會使用這個身分識別來執行作業。 若要在部署期間成功地從 Key Vault 擷取值,服務主體必須要能夠存取 Key Vault。

本文說明如何設定與受控應用程式搭配使用的 Key Vault。

啟用範本部署

  1. 在入口網站中,選取您的 Key Vault。

  2. 選取 [存取原則]。

    選取存取原則

  3. 選取 [按一下以顯示進階存取原則]。

    顯示進階存取原則

  4. 選取 [為範本部署啟用對 Azure Resource Manager 的存取]。 然後選取 [儲存]。

    啟用範本部署

將服務新增為參與者

參與者 角色指派給金鑰保存庫範圍的 設備資源提供者 使用者。

如需詳細步驟,請參閱 使用 Azure 入口網站指派 Azure 角色

參考 Key Vault 祕密

若要從 Key Vault 將秘密傳遞至 Managed 應用程式中的範本,您必須使用 連結或嵌套的範本 ,並參考連結或嵌套範本之參數中的 Key Vault。 請提供 Key Vault 的資源識別碼和秘密的名稱。

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The location where the resources will be deployed."
      }
    },
    "vaultName": {
      "type": "string",
      "metadata": {
        "description": "The name of the keyvault that contains the secret."
      }
    },
    "secretName": {
      "type": "string",
      "metadata": {
        "description": "The name of the secret."
      }
    },
    "vaultResourceGroupName": {
      "type": "string",
      "metadata": {
        "description": "The name of the resource group that contains the keyvault."
      }
    },
    "vaultSubscription": {
      "type": "string",
      "defaultValue": "[subscription().subscriptionId]",
      "metadata": {
        "description": "The name of the subscription that contains the keyvault."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2018-05-01",
      "name": "dynamicSecret",
      "properties": {
        "mode": "Incremental",
        "expressionEvaluationOptions": {
          "scope": "inner"
        },
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
            "adminLogin": {
              "type": "string"
            },
            "adminPassword": {
              "type": "securestring"
            },
            "location": {
              "type": "string"
            }
          },
          "variables": {
            "sqlServerName": "[concat('sql-', uniqueString(resourceGroup().id, 'sql'))]"
          },
          "resources": [
            {
              "type": "Microsoft.Sql/servers",
              "apiVersion": "2018-06-01-preview",
              "name": "[variables('sqlServerName')]",
              "location": "[parameters('location')]",
              "properties": {
                "administratorLogin": "[parameters('adminLogin')]",
                "administratorLoginPassword": "[parameters('adminPassword')]"
              }
            }
          ],
          "outputs": {
            "sqlFQDN": {
              "type": "string",
              "value": "[reference(variables('sqlServerName')).fullyQualifiedDomainName]"
            }
          }
        },
        "parameters": {
          "location": {
            "value": "[parameters('location')]"
          },
          "adminLogin": {
            "value": "ghuser"
          },
          "adminPassword": {
            "reference": {
              "keyVault": {
                "id": "[resourceId(parameters('vaultSubscription'), parameters('vaultResourceGroupName'), 'Microsoft.KeyVault/vaults', parameters('vaultName'))]"
              },
              "secretName": "[parameters('secretName')]"
            }
          }
        }
      }
    }
  ],
  "outputs": {
  }
}

後續步驟

您已將 Key Vault 設定為在受控應用程式部署期間可供存取。