快速入門:使用 ARM 範本建立 Azure 金鑰保存庫和金鑰

Azure Key Vault 是雲端服務,提供安全存放區來儲存祕密,例如金鑰、密碼和憑證。 本快速入門著重於部署 Azure Resource Manager 範本 (ARM 範本) 來建立金鑰保存庫和金鑰的程序。

必要條件

若要完成此文章:

檢閱範本

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "vaultName": {
      "type": "string",
      "metadata": {
        "description": "The name of the key vault to be created."
      }
    },
    "keyName": {
      "type": "string",
      "metadata": {
        "description": "The name of the key to be created."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The location of the resources"
      }
    },
    "skuName": {
      "type": "string",
      "defaultValue": "standard",
      "allowedValues": [
        "standard",
        "premium"
      ],
      "metadata": {
        "description": "The SKU of the vault to be created."
      }
    },
    "keyType": {
      "type": "string",
      "defaultValue": "RSA",
      "allowedValues": [
        "EC",
        "EC-HSM",
        "RSA",
        "RSA-HSM"
      ],
      "metadata": {
        "description": "The JsonWebKeyType of the key to be created."
      }
    },
    "keyOps": {
      "type": "array",
      "defaultValue": [],
      "metadata": {
        "description": "The permitted JSON web key operations of the key to be created."
      }
    },
    "keySize": {
      "type": "int",
      "defaultValue": 2048,
      "metadata": {
        "description": "The size in bits of the key to be created."
      }
    },
    "curveName": {
      "type": "string",
      "defaultValue": "",
      "allowedValues": [
        "",
        "P-256",
        "P-256K",
        "P-384",
        "P-521"
      ],
      "metadata": {
        "description": "The JsonWebKeyCurveName of the key to be created."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.KeyVault/vaults",
      "apiVersion": "2021-11-01-preview",
      "name": "[parameters('vaultName')]",
      "location": "[parameters('location')]",
      "properties": {
        "accessPolicies": [],
        "enableRbacAuthorization": true,
        "enableSoftDelete": true,
        "softDeleteRetentionInDays": "90",
        "enabledForDeployment": false,
        "enabledForDiskEncryption": false,
        "enabledForTemplateDeployment": false,
        "tenantId": "[subscription().tenantId]",
        "sku": {
          "name": "[parameters('skuName')]",
          "family": "A"
        },
        "networkAcls": {
          "defaultAction": "Allow",
          "bypass": "AzureServices"
        }
      }
    },
    {
      "type": "Microsoft.KeyVault/vaults/keys",
      "apiVersion": "2021-11-01-preview",
      "name": "[format('{0}/{1}', parameters('vaultName'), parameters('keyName'))]",
      "properties": {
        "kty": "[parameters('keyType')]",
        "keyOps": "[parameters('keyOps')]",
        "keySize": "[parameters('keySize')]",
        "curveName": "[parameters('curveName')]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.KeyVault/vaults', parameters('vaultName'))]"
      ]
    }
  ],
  "outputs": {
    "proxyKey": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.KeyVault/vaults/keys', parameters('vaultName'), parameters('keyName')))]"
    }
  }
}

範本中定義了兩種資源:

Azure 快速入門範本中,可找到更多 Azure Key Vault 範本範例。

參數和定義

參數 定義
keyOps 指定可以使用金鑰來執行的作業。 如果不指定此參數,則所有作業都可執行。 此參數可接受的值是以逗號分隔的金鑰作業清單,如 JSON Web 金鑰 (JWK) 規格所定義:
["sign", "verify", "encrypt", "decrypt", " wrapKey", "unwrapKey"]
CurveName EC 金鑰類型的橢圓曲線 (EC) 名稱。 請參閱 JsonWebKeyCurveName
Kty 要建立的金鑰類型。 關於有效值,請參閱 JsonWebKeyType
Tags (標籤) 索引鍵/值組形式的應用程式特有中繼資料。
nbf 以 DateTime 物件指定時間,在此時間之前無法使用金鑰。 格式為 Unix 時間戳記 (Unix Epoch 1970 年 1 月 1 日 UTC 之後的秒數)。
exp 以 DateTime 物件指定到期時間。 格式為 Unix 時間戳記 (Unix Epoch 1970 年 1 月 1 日 UTC 之後的秒數)。

部署範本

您可以使用Azure 入口網站、Azure PowerShell、Azure CLI 或 REST API。 若要了解部署方法,請參閱部署範本

檢閱已部署的資源

您可以使用 Azure 入口網站來檢查金鑰保存庫和金鑰。 或者,使用下列 Azure CLI 或 Azure PowerShell 指令碼來列出已建立的金鑰。

echo "Enter your key vault name:" &&
read keyVaultName &&
az keyvault key list --vault-name $keyVaultName &&
echo "Press [ENTER] to continue ..."

使用 ARM 範本建立金鑰與透過資料平面建立金鑰不同

透過 ARM 建立金鑰

  • 只能建立「新的」金鑰。 無法更新現有的金鑰,也無法建立現有金鑰的新版本。 如果金鑰已存在,則會從儲存體擷取現有的金鑰來使用 (不會執行寫入作業)。

  • 若要獲得授權使用此 API,呼叫者必須有 "Microsoft.KeyVault/vaults/keys/write" 角色型存取控制 (RBAC) Action。 內建的「Key Vault 參與者」角色授權所有符合 "Microsoft.KeyVault/*" 模式的 RBAC Action,有此角色就足夠。

    Create a key via ARM 1Create a key via ARM 2

現有的 API (透過資料平面建立金鑰)

  • 可以建立新的金鑰、更新現有的金鑰,以及建立現有金鑰的新版本。
  • 呼叫者必須獲得授權才能使用此 API。 如果保存庫使用存取原則,則呼叫者必須具有「建立」金鑰權限;如果針對 RBAC 啟用保存庫,則呼叫者必須有 "Microsoft.KeyVault/vaults/keys/create/action" RBAC DataAction。

清除資源

其他 Key Vault 快速入門和教學課程會以本快速入門為基礎。 如果您打算繼續進行後續的快速入門和教學課程,您可以讓這些資源留在原處。 如果不再需要,請刪除資源群組,這會刪除 Key Vault 和相關資源。 若要使用 Azure CLI 或 Azure PowerShell 刪除資源群組:

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

下一步

在本快速入門中,您已使用 ARM 範本建立金鑰保存庫和金鑰,並已驗證部署。 若要深入了解 Key Vault 和 Azure Resource Manager,請參閱這些文章。