Início Rápido: Definir e recuperar um segredo do Azure Key Vault usando um modelo ARM

Azure Key Vault é um serviço na cloud que fornece um armazenamento seguro para segredos, como chaves, palavras-passe, certificados e outros segredos. Este quickstart foca-se no processo de implementação de um template do Azure Resource Manager (template ARM) para criar um cofre de chaves e um segredo.

Um modelo Azure Resource Manager é um ficheiro JavaScript Object Notation (JSON) que define a infraestrutura e configuração do seu 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 o seu ambiente cumprir os pré-requisitos e estiver familiarizado com o uso de templates ARM, selecione o botão Deploy to Azure. O modelo abrirá no portal Azure.

Button para implementar o modelo de Resource Manager para Azure.

Pré-requisitos

Para completar este artigo:

  • Se não tiver uma subscrição Azure, crie uma conta gratuita antes de começar.

Rever o modelo

O modelo utilizado neste quickstart é do Azure Quickstart Templates.

{
  "$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": "10998800669048245550"
    }
  },
  "parameters": {
    "keyVaultName": {
      "type": "string",
      "metadata": {
        "description": "Specifies the name of the key vault."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Specifies the Azure location where the key vault should be created."
      }
    },
    "enabledForDeployment": {
      "type": "bool",
      "defaultValue": false,
      "metadata": {
        "description": "Specifies whether Azure Virtual Machines are permitted to retrieve certificates stored as secrets from the key vault."
      }
    },
    "enabledForDiskEncryption": {
      "type": "bool",
      "defaultValue": false,
      "metadata": {
        "description": "Specifies whether Azure Disk Encryption is permitted to retrieve secrets from the vault and unwrap keys."
      }
    },
    "enabledForTemplateDeployment": {
      "type": "bool",
      "defaultValue": false,
      "metadata": {
        "description": "Specifies whether Azure Resource Manager is permitted to retrieve secrets from the key vault."
      }
    },
    "tenantId": {
      "type": "string",
      "defaultValue": "[subscription().tenantId]",
      "metadata": {
        "description": "Specifies the Azure Active Directory tenant ID that should be used for authenticating requests to the key vault. Get it by using Get-AzSubscription cmdlet."
      }
    },
    "skuName": {
      "type": "string",
      "defaultValue": "standard",
      "allowedValues": [
        "standard",
        "premium"
      ],
      "metadata": {
        "description": "Specifies whether the key vault is a standard vault or a premium vault."
      }
    },
    "secretsObject": {
      "type": "secureObject",
      "metadata": {
        "description": "Specifies all secrets {\"secretName\":\"\",\"secretValue\":\"\"} wrapped in a secure object."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.KeyVault/vaults",
      "apiVersion": "2023-07-01",
      "name": "[parameters('keyVaultName')]",
      "location": "[parameters('location')]",
      "properties": {
        "enabledForDeployment": "[parameters('enabledForDeployment')]",
        "enabledForTemplateDeployment": "[parameters('enabledForTemplateDeployment')]",
        "enabledForDiskEncryption": "[parameters('enabledForDiskEncryption')]",
        "enableRbacAuthorization": true,
        "tenantId": "[parameters('tenantId')]",
        "enableSoftDelete": true,
        "softDeleteRetentionInDays": 90,
        "enablePurgeProtection": true,
        "sku": {
          "name": "[parameters('skuName')]",
          "family": "A"
        },
        "networkAcls": {
          "defaultAction": "Allow",
          "bypass": "AzureServices"
        }
      }
    },
    {
      "copy": {
        "name": "secrets",
        "count": "[length(parameters('secretsObject').secrets)]"
      },
      "type": "Microsoft.KeyVault/vaults/secrets",
      "apiVersion": "2023-07-01",
      "name": "[format('{0}/{1}', parameters('keyVaultName'), parameters('secretsObject').secrets[copyIndex()].secretName)]",
      "properties": {
        "value": "[parameters('secretsObject').secrets[copyIndex()].secretValue]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))]"
      ]
    }
  ],
  "outputs": {
    "location": {
      "type": "string",
      "value": "[parameters('location')]"
    },
    "name": {
      "type": "string",
      "value": "[parameters('keyVaultName')]"
    },
    "resourceGroupName": {
      "type": "string",
      "value": "[resourceGroup().name]"
    },
    "resourceId": {
      "type": "string",
      "value": "[resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))]"
    }
  }
}

Dois recursos Azure estão definidos no modelo:

  • Microsoft.KeyVault/vaults: criar um Azure Key Vault com a autorização RBAC do Azure ativada (enableRbacAuthorization: true), eliminação recuperável ativada e proteção contra purga ativada.
  • Microsoft.KeyVault/vaults/secrets: criar um ou mais segredos do Key Vault, iterando ao longo da matriz secretsObject.secrets passada para o modelo.

Como o vault usa o Azure RBAC para autorização do plano de dados, concede acesso a segredos atribuindo um papel no Azure (em vez de configurar políticas de acesso).

Mais exemplos de modelos Azure Key Vault podem ser encontrados em Azure Quickstart Templates.

Implementar o modelo

  1. Selecione a imagem seguinte para iniciar sessão no Azure e abra um modelo. O modelo cria um cofre de chaves e uma senha.

    Button para implementar o modelo de Resource Manager para Azure.

  2. Selecione ou introduza os seguintes valores. A menos que esteja especificado, usa o valor padrão.

    • Subscrição: selecione uma subscrição 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, E.U.A. Central.

    • Key Vault Nome: introduza um nome para o key vault, que deve ser globalmente único dentro do espaço de nomes vault.azure.net. Vai precisar deste nome na secção seguinte quando validar a implementação.

    • Nome do SKU: selecione padrão ou premium. A predefinição é standard.

    • Objeto de segredos: forneça os segredos a criar como um objeto JSON com uma matriz secrets. Por exemplo:

      {
        "secrets": [
          {
            "secretName": "adminpassword",
            "secretValue": "<your-secret-value>"
          }
        ]
      }
      

      Como Secrets Object é um parâmetro secureObject, o seu valor não é registado nem devolvido após a implementação.

  3. Selecione Rever + criar e, em seguida, selecione Criar. Depois de o cofre de chaves e o segredo serem implantados com êxito, é apresentada uma notificação.

Também pode usar o Azure PowerShell, a CLI do Azure ou a API REST para implementar o template. Para aprender outros métodos de implantação, consulte Implantar modelos.

Atribuir uma função RBAC do Key Vault

O cofre de chaves criado por este modelo utiliza o Azure RBAC para autorização. Para aceder a segredos através do plano de dados (por exemplo, usando o CLI do Azure ou Azure PowerShell), precisa de se atribuir um papel apropriado.

  1. Obtenha o ID do seu objeto de utilizador Microsoft Entra:

    az ad signed-in-user show --query id -o tsv
    
  2. Atribua a si próprio a função Key Vault Secrets Officer no cofre de chaves:

    echo "Enter your key vault name:" &&
    read keyVaultName &&
    az role assignment create --role "Key Vault Secrets 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ções podem demorar um ou dois minutos a ser propagadas.

Analisar os recursos implementados

Pode usar o portal do Azure para verificar o cofre de chaves e o segredo, ou usar o seguinte script CLI do Azure ou Azure PowerShell para listar o segredo criado.

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

Limpeza de recursos

Outros inícios rápidos e tutoriais desenvolvem-se a partir deste início rápido do Key Vault. Se pretende continuar a trabalhar com os quickstarts e tutoriais subsequentes, poderá querer deixar estes recursos no lugar. Quando já não for necessário, elimina o grupo de recursos, o que elimina o Key Vault e os recursos relacionados. Para eliminar o grupo de recursos usando CLI do Azure ou Azure PowerShell:

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

Note

Eliminar o grupo de recursos também elimina o cofre de chaves, mas o cofre entra então num estado de eliminação suave e permanece recuperável durante o período de retenção (90 dias por defeito). O nome do cofre permanece reservado globalmente durante esse período e, como a proteção contra purgas está ativada, o cofre não pode ser purgado antecipadamente. Para cofres de chaves padrão, os cofres eliminados temporariamente não incorrem em custos. Para mais informações, consulte Key Vault visão geral de apagamento suave.

Próximos passos

Neste início rápido, você criou um cofre de chaves e um segredo usando um modelo ARM e validou a implantação. Para saber mais sobre o Key Vault e o Azure Resource Manager, continue para os artigos abaixo.