Início Rápido: Criar um cofre de chaves do Azure e uma chave usando o modelo do ARM

O Azure Key Vault é um serviço de nuvem que fornece um repositório seguro para segredos, como chaves, senhas e certificado. Este início rápido se concentra no processo de implantação de um modelo do ARM (Azure Resource Manager) para criar um cofre de chaves e uma chave.

Um modelo Azure Resource Manager é um arquivo JSON (JavaScript Object Notation) que define a infraestrutura e a configuração do projeto. O modelo usa sintaxe declarativa. Você descreve a implantação pretendida sem escrever a sequência de comandos de programação para criar a implantação.

Se seu ambiente atender aos pré-requisitos e você estiver familiarizado com o uso de modelos ARM, selecione o botão Implantar no Azure. O modelo será aberto no portal do Azure.

Botão para implantar o modelo do Resource Manager no Azure.

Pré-requisitos

Para concluir este artigo:

  • Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
  • O usuário precisaria ter uma função padrão do Azure atribuída, sendo recomendada a função colaborador. Saiba mais aqui

Examinar o modelo

O modelo usado neste início rápido é proveniente dos Modelos de Início Rápido do 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'))]"
    }
  }
}

Dois recursos são definidos no modelo:

O modelo cria o cofre de chaves com a autorização do Azure RBAC habilitada. Isso significa que o cofre utiliza o controle de acesso baseado em funções do Azure (Azure RBAC) para a autorização no plano de dados, em vez de políticas de acesso.

Mais exemplos de modelo do Azure Key Vault podem ser encontrados nos Modelos de Início Rápido do Azure.

Parâmetros de modelo

Parâmetro Descrição
vaultName Nome do novo cofre de chaves. Deve ser globalmente exclusivo dentro do vault.azure.net namespace.
Keyname Nome da chave a ser criada no cofre.
localização Região do Azure destinada aos recursos. O padrão é o local do grupo de recursos.
skuName SKU do Vault. standard (padrão) ou premium.
keyType O tipo de chave a ser criada. Uma opção entre RSA, RSA-HSM, EC, EC-HSM. O padrão é RSA. Consulte JsonWebKeyType.
keySize Tamanho em bits da chave (somente RSA). O padrão é 2048.
curveName Nome da curva elíptica (apenas para chaves EC). Uma opção entre P-256, P-256K, P-384, P-521. Consulte JsonWebKeyCurveName.
keyOps Operações de Chave Web JSON permitidas para a chave (por exemplo, ["sign","verify","encrypt","decrypt","wrapKey","unwrapKey"]). A matriz vazia (padrão) permite todas as operações.

Implantar o modelo

  1. Selecione a imagem a seguir para entrar no Azure e abrir um modelo. O modelo cria um cofre de chaves e uma chave.

    Botão para implantar o modelo do Resource Manager no Azure.

  2. Selecione ou insira os seguintes valores. A menos que seja especificado, use o valor padrão.

    • Subscription: selecione uma assinatura Azure.
    • Grupo de recursos: selecione Criar novo, insira um nome exclusivo para o grupo de recursos e selecione OK.
    • Região: selecione um local. Por exemplo, Centro dos EUA.
    • Nome do cofre: insira um nome para o cofre de chaves, que deve ser globalmente exclusivo dentro do vault.azure.net namespace.
    • Nome da chave: insira um nome para a chave que você armazena no cofre de chaves.
    • Nome do SKU: selecione padrão ou premium. O padrão é standard.
    • Tipo de chave: selecione um tipo de chave. O padrão é RSA.
    • Tamanho da chave: insira um tamanho de chave (chaves RSA). O padrão é 2048.
    • Nome da Curva: para chaves EC, selecione uma curva. Deixe em branco para chaves RSA.
  3. Selecione Examinar + criar e, em seguida, selecione Criar. Depois que o cofre de chaves e a chave tiverem sido implantados com êxito, você receberá uma notificação.

Você também pode usar Azure PowerShell, o CLI do Azure ou a API REST para implantar o modelo. Para saber outros métodos de implantação, consulte Deploy templates.

Atribuir uma função RBAC ao cofre de chaves

O cofre de chaves criado por esse modelo usa Azure RBAC para autorização. Para acessar chaves por meio do plano de dados (por exemplo, usando o CLI do Azure ou Azure PowerShell), você precisa atribuir a si mesmo uma função apropriada.

  1. Obtenha sua ID de objeto de usuário do Microsoft Entra:

    az ad signed-in-user show --query id -o tsv
    
  2. Atribua a função Key Vault Crypto Officer a si mesmo no 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

    As atribuições de função podem levar um ou dois minutos para serem propagadas.

Examinar os recursos implantados

Você pode usar o portal do Azure para verificar o cofre de chaves e a chave. Como alternativa, use o seguinte script da CLI do Azure ou do Azure PowerShell para listar a chave criada.

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

Criar chave usando o modelo do ARM é diferente da criação de chave por meio do plano de dados

Criando uma chave por meio do ARM

  • Só é possível criar novas chaves. Não é possível atualizar as chaves existentes nem criar novas versões de chaves existentes. Se a chave já existir, a chave existente será recuperada do armazenamento e usada (nenhuma operação de gravação ocorrerá).

  • Para ser autorizado a usar essa API, o chamador precisa ter a ação de controle de acesso baseado em função (RBAC) do Azure ( Microsoft.KeyVault/vaults/keys/write ). A função interna "Colaborador do Key Vault" é suficiente, pois autoriza todas as Ações RBAC do Azure que correspondem ao padrão "Microsoft.KeyVault/*".

    Criar uma chave por meio do ARM 1 Criar uma chave por meio do ARM 2

API existente (criando chave por meio do plano de dados)

  • É possível criar novas chaves, atualizar chaves existentes e criar novas versões de chaves existentes.
  • O chamador deve estar autorizado a usar essa API. Se o cofre estiver habilitado para o Azure RBAC, o chamador deve possuir a ação de dados "Microsoft.KeyVault/vaults/keys/create/action" do Azure RBAC.

Limpar os recursos

Outros guias de início rápido e tutoriais do Key Vault se baseiam neste início rápido. Se você planeja continuar a trabalhar com os tutoriais e inícios rápidos subsequentes, deixe esses recursos onde estão. Quando não for mais necessário, exclua o grupo de recursos, que exclui o Key Vault e os recursos relacionados. Para excluir o grupo de recursos usando a CLI do Azure ou o Azure PowerShell:

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

Note

Excluir o grupo de recursos também exclui o cofre de chaves, mas o cofre entra em estado de exclusão temporária e permanece recuperável durante o período de retenção (por padrão, 90 dias). O nome do cofre permanece reservado globalmente durante esse período e, como a proteção contra a limpeza está habilitada, não é possível fazer a limpeza do cofre antes do prazo. Para os cofres de chaves padrão, cofres de exclusão temporária não incorrem em encargos. Para obter mais informações, consulte Visão geral da exclusão temporária do cofre de chaves.

Próximas etapas

Neste guia de início rápido, você criou um cofre de chaves e uma chave usando um modelo do ARM e validou a implantação. Para saber mais sobre o Key Vault e o Azure Resource Manager, confira estes artigos.