Rozpoczęcie pracy: Utwórz skarbiec kluczy platformy Azure i klucz przy użyciu szablonu ARM

Azure Key Vault to usługa w chmurze, która zapewnia bezpieczny magazyn wpisów tajnych, takich jak klucze, hasła i certyfikat. Ten szybki start koncentruje się na procesie wdrażania szablonu usługi ARM do utworzenia magazynu kluczy i klucza.

Szablon Azure Resource Manager to plik JavaScript Object Notation (JSON), który definiuje infrastrukturę i konfigurację projektu. Szablon używa składni deklaratywnej. Możesz opisać zamierzone wdrożenie bez konieczności pisania sekwencji poleceń programowania w celu utworzenia wdrożenia.

Jeśli środowisko spełnia wymagania i znasz szablony ARM, wybierz przycisk Wdróż na platformie Azure. Szablon zostanie otwarty w portalu Azure.

Przycisk wdrażania szablonu usługi Resource Manager na platformie Azure.

Wymagania wstępne

Aby ukończyć ten artykuł:

  • Jeśli nie masz subskrypcji Azure, przed rozpoczęciem utwórz darmowe konto.
  • Użytkownik powinien mieć przypisaną wbudowaną rolę platformy Azure, zalecana rola to współautor. Dowiedz się więcej tutaj

Przegląd szablonu

Szablon użyty w tym szybkim starcie pochodzi z szablonów szybkiego startu platformy Azure.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.42.1.51946",
      "templateHash": "9113739717796369919"
    }
  },
  "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": "2023-07-01",
      "name": "[parameters('vaultName')]",
      "location": "[parameters('location')]",
      "properties": {
        "enableRbacAuthorization": true,
        "enableSoftDelete": true,
        "softDeleteRetentionInDays": 90,
        "enablePurgeProtection": true,
        "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": "2023-07-01",
      "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')), '2023-07-01')]"
    },
    "location": {
      "type": "string",
      "value": "[parameters('location')]"
    },
    "name": {
      "type": "string",
      "value": "[parameters('vaultName')]"
    },
    "resourceGroupName": {
      "type": "string",
      "value": "[resourceGroup().name]"
    },
    "resourceId": {
      "type": "string",
      "value": "[resourceId('Microsoft.KeyVault/vaults', parameters('vaultName'))]"
    }
  }
}

Dwa zasoby są zdefiniowane w szablonie:

Szablon tworzy magazyn kluczy z włączoną autoryzacją RBAC platformy Azure. Oznacza to, że sejf używa kontroli dostępu opartej na rolach platformy Azure (Azure RBAC) do autoryzacji w płaszczyźnie danych zamiast zasad dostępu.

Więcej przykładów szablonów usługi Azure Key Vault można znaleźć w artykule Szablony szybkiego startu platformy Azure.

Parametry szablonu

Parameter Description
vaultName Nazwa nowego magazynu kluczy. Musi być globalnie unikalna w przestrzeni nazw vault.azure.net.
Keyname Nazwa klucza, który ma zostać utworzony w magazynie.
lokalizacja Region świadczenia usługi Azure dla zasobów. Domyślnie jest to lokalizacja grupy zasobów.
skuName Jednostka SKU magazynu. standard (wartość domyślna) lub premium.
keyType Typ klucza, który należy utworzyć. Jeden z RSA, RSA-HSM, EC, EC-HSM. Wartość domyślna to RSA. Zobacz JsonWebKeyType.
Keysize Rozmiar w bitach klucza (tylko RSA). Wartość domyślna to 2048.
curveName Nazwa krzywej eliptycznej (tylko klucze EC). Jeden z P-256, P-256K, P-384, P-521. Zobacz JsonWebKeyCurveName.
keyOps Dozwolone operacje klucza internetowego JSON dla klucza (na przykład ["sign","verify","encrypt","decrypt","wrapKey","unwrapKey"]). Pusta tablica (wartość domyślna) zezwala na wszystkie operacje.

Wdrażanie szablonu

  1. Wybierz poniższy obraz, aby zalogować się do Azure i otworzyć szablon. Szablon tworzy magazyn kluczy oraz klucz.

    Przycisk wdrażania szablonu usługi Resource Manager na platformie Azure.

  2. Wybierz lub wprowadź następujące wartości. Jeśli nie zostanie określony, użyj wartości domyślnej.

    • Subskrypcja: wybierz subskrypcję platformy Azure.
    • Grupa zasobów: wybierz pozycję Utwórz nową, wprowadź unikatową nazwę grupy zasobów, a następnie wybierz przycisk OK.
    • Region: wybierz lokalizację. Na przykład Środkowe stany USA.
    • Nazwa sejfu: wprowadź nazwę sejfu kluczy, która musi być unikalna w skali globalnej w obrębie przestrzeni nazw vault.azure.net.
    • Nazwa klucza: wprowadź nazwę klucza przechowywanego w magazynie kluczy.
    • Nazwa SKU: wybierz standard lub premium. Wartość domyślna to Standardowa.
    • Typ klucza: wybierz typ klucza. Wartość domyślna to RSA.
    • Rozmiar klucza: wprowadź rozmiar klucza (klucze RSA). Wartość domyślna to 2048.
    • Nazwa krzywej: dla kluczy EC wybierz krzywą. Pozostaw wartość pustą dla kluczy RSA.
  3. Wybierz Przegląd + utwórz, a następnie wybierz Utwórz. Po pomyślnym wdrożeniu magazynu kluczy i klucza otrzymasz powiadomienie.

Do wdrożenia szablonu można również użyć Azure PowerShell, Azure CLI lub interfejsu API REST. Aby dowiedzieć się więcej o innych metodach wdrażania, zobacz Wdrażanie szablonów.

Przypisz rolę RBAC usługi Key Vault

Magazyn kluczy utworzony przez ten szablon używa Azure kontroli dostępu opartej na rolach na potrzeby autoryzacji. Aby uzyskać dostęp do kluczy za pośrednictwem płaszczyzny danych (na przykład przy użyciu Azure CLI lub Azure PowerShell), musisz przypisać sobie odpowiednią rolę.

  1. Pobierz identyfikator obiektu użytkownika Microsoft Entra:

    az ad signed-in-user show --query id -o tsv
    
  2. Przypisz rolę Key Vault Crypto Officer sobie na key vault:

    echo "Enter your key vault name:" &&
    read keyVaultName &&
    az role assignment create --role "Key Vault Crypto Officer" \
        --assignee-object-id $(az ad signed-in-user show --query id -o tsv) \
        --scope $(az keyvault show --name $keyVaultName --query id -o tsv)
    

    Note

    Propagacja przypisań ról może potrwać minutę lub dwie.

Przeglądanie wdrożonych zasobów

Możesz użyć portalu Azure, aby sprawdzić magazyn kluczy i klucz. Alternatywnie użyj następującego interfejsu wiersza polecenia platformy Azure lub skryptu programu Azure PowerShell, aby wyświetlić listę utworzonych kluczy.

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

Tworzenie klucza przy użyciu szablonu usługi ARM różni się od tworzenia klucza za pośrednictwem płaszczyzny danych

Tworzenie klucza za pośrednictwem usługi ARM

  • Możliwe jest tworzenie tylko nowych kluczy. Nie można zaktualizować istniejących kluczy ani utworzyć nowych wersji istniejących kluczy. Jeśli klucz już istnieje, istniejący klucz jest pobierany z magazynu i używany (nie będą wykonywane żadne operacje zapisu).

  • Aby móc korzystać z tego interfejsu API, podmiot wywołujący musi mieć akcję "Microsoft.KeyVault/vaults/keys/write" w ramach kontroli dostępu opartej na rolach (Azure RBAC). Wbudowana rola "Współautor usługi Key Vault" jest wystarczająca, ponieważ autoryzuje wszystkie akcje RBAC platformy Azure zgodne ze wzorcem "Microsoft.KeyVault/*".

    Tworzenie klucza za pomocą usługi ARM 1 Tworzenie klucza za pośrednictwem usługi ARM 2

Istniejący interfejs API (tworzenie klucza za pośrednictwem płaszczyzny danych)

  • Można utworzyć nowe klucze, zaktualizować istniejące klucze i utworzyć nowe wersje istniejących kluczy.
  • Obiekt wywołujący musi być autoryzowany do korzystania z tego interfejsu API. Jeśli magazyn kluczy ma włączoną kontrolę dostępu opartą na rolach platformy Azure, podmiot wywołujący musi mieć uprawnienie Azure RBAC DataAction „Microsoft.KeyVault/vaults/keys/create/action”.

Uprzątnij zasoby

Inne szybkie starty i samouczki dotyczące Key Vault bazują na tym szybkim starcie. Jeśli planujesz nadal korzystać z kolejnych szybkich startów i samouczków, warto pozostawić te zasoby na miejscu. Gdy grupa zasobów nie jest już potrzebna, usuń grupę zasobów, która usuwa usługę Key Vault i powiązane zasoby. Aby usunąć grupę zasobów przy użyciu interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell:

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

Note

Usunięcie grupy zasobów powoduje również usunięcie magazynu kluczy, ale magazyn przechodzi następnie w stan usunięcia miękkiego i można go odzyskać przez okres przechowywania (domyślnie 90 dni). Nazwa magazynu pozostaje zarezerwowana globalnie w tym okresie i ponieważ włączono ochronę przed przeczyszczeniem, nie można wcześniej przeczyścić magazynu. W przypadku standardowych magazynów kluczy nie są naliczane opłaty za magazyny kluczy po usunięciu nietrwałym. Aby uzyskać więcej informacji, zobacz Omówienie usuwania nieostatecznego w usłudze Key Vault.

Dalsze kroki

W tym szybkim rozpoczęciu utworzono skarbiec kluczy i klucz przy użyciu szablonu ARM i zweryfikowano wdrożenie. Aby dowiedzieć się więcej o usłudze Key Vault i usłudze Azure Resource Manager, zobacz te artykuły.