Inicio rápido: Creación de un almacén de claves de Azure y un secreto mediante Bicep

Azure Key Vault es un servicio en la nube que proporciona un almacén seguro para secretos, como claves, contraseñas, certificados y otros secretos. Este inicio rápido se centra en el proceso de implementación de un archivo de Bicep para crear un almacén de claves y un secreto.

Bicep es un lenguaje específico del dominio (DSL) que usa sintaxis declarativa para implementar recursos de Azure. Brinda sintaxis concisa, seguridad de tipos confiable y compatibilidad con la reutilización de código. Bicep ofrece la mejor experiencia de diseño para tus soluciones de infraestructura como código en Azure.

Prerrequisitos

  • Si no tiene una suscripción de Azure, cree una cuenta free antes de comenzar.

Revisión del archivo Bicep

La plantilla que se usa en este inicio rápido procede de Azure Plantillas de inicio rápido.

@description('Specifies the name of the key vault.')
param keyVaultName string

@description('Specifies the Azure location where the key vault should be created.')
param location string = resourceGroup().location

@description('Specifies whether Azure Virtual Machines are permitted to retrieve certificates stored as secrets from the key vault.')
param enabledForDeployment bool = false

@description('Specifies whether Azure Disk Encryption is permitted to retrieve secrets from the vault and unwrap keys.')
param enabledForDiskEncryption bool = false

@description('Specifies whether Azure Resource Manager is permitted to retrieve secrets from the key vault.')
param enabledForTemplateDeployment bool = false

@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.')
param tenantId string = subscription().tenantId

@description('Specifies whether the key vault is a standard vault or a premium vault.')
@allowed([
  'standard'
  'premium'
])
param skuName string = 'standard'

@description('Specifies all secrets {"secretName":"","secretValue":""} wrapped in a secure object.')
@secure()
param secretsObject object

resource kv 'Microsoft.KeyVault/vaults@2023-07-01' = {
  name: keyVaultName
  location: location
  properties: {
    enabledForDeployment: enabledForDeployment
    enabledForTemplateDeployment: enabledForTemplateDeployment
    enabledForDiskEncryption: enabledForDiskEncryption
    enableRbacAuthorization: true
    tenantId: tenantId
    enableSoftDelete: true
    softDeleteRetentionInDays: 90
    enablePurgeProtection: true
    sku: {
      name: skuName
      family: 'A'
    }
    networkAcls: {
      defaultAction: 'Allow'
      bypass: 'AzureServices'
    }
  }
}

resource secrets 'Microsoft.KeyVault/vaults/secrets@2023-07-01' = [for secret in secretsObject.secrets: {
  name: secret.secretName
  parent: kv
  properties: {
    value: secret.secretValue
  }
}]

output location string = location
output name string = kv.name
output resourceGroupName string = resourceGroup().name
output resourceId string = kv.id

Dos recursos de Azure se definen en el archivo Bicep:

Desplegar el archivo Bicep

  1. Guarda el archivo Bicep como main.bicep en tu equipo local.

  2. Cree un archivo de parámetros (por ejemplo, main.parameters.json) que proporciona el secretsObject valor:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "keyVaultName": { "value": "<vault-name>" },
        "secretsObject": {
          "value": {
            "secrets": [
              { "secretName": "adminpassword", "secretValue": "<your-secret-value>" }
            ]
          }
        }
      }
    }
    
  3. Implemente el archivo de Bicep utilizando la CLI de Azure o Azure PowerShell.

    az group create --name myResourceGroup --location eastus
    az deployment group create --resource-group myResourceGroup --template-file main.bicep --parameters @main.parameters.json
    

    Nota:

    Reemplace <vault-name> por el nombre del almacén de claves, que debe ser globalmente único dentro del vault.azure.net espacio de nombres. Reemplace por <your-secret-value> el valor secreto que se va a almacenar. Dado que secretsObject está declarado como secureObject, su valor no se registra ni se vuelve a mostrar.

    Una vez finalizada la implementación, debería mostrarse un mensaje indicando que la implementación se realizó correctamente.

Asignar un rol de RBAC para Key Vault

El almacén de claves creado por este archivo de Bicep utiliza Azure RBAC para la autorización. Para acceder a los secretos a través del plano de datos (por ejemplo, mediante el CLI de Azure o Azure PowerShell), debe asignarse un rol adecuado.

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)

Nota:

Las asignaciones de roles pueden tardar un minuto o dos en propagarse.

Revisión de los recursos implementados

Puede usar el portal de Azure para comprobar el almacén de claves y el secreto, o bien usar el siguiente script de CLI de Azure o Azure PowerShell para enumerar el secreto creado.

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

Limpieza de recursos

Cuando ya no sea necesario, use el portal de Azure, CLI de Azure o Azure PowerShell para eliminar el grupo de recursos y sus recursos.

az group delete --name myResourceGroup

Nota:

Al eliminar el grupo de recursos también se elimina el almacén de claves, pero el almacén, a continuación, entra en un estado eliminado temporalmente y permanece recuperable durante el período de retención (90 días de forma predeterminada). El nombre del almacén permanece reservado globalmente durante ese período y, dado que la protección contra purgas está habilitada, el almacén no se puede eliminar definitivamente de forma anticipada. En el caso de los almacenes de claves estándar, los almacenes eliminados temporalmente no incurren en cargos. Para obtener más información, consulte Información general de la eliminación temporal de Key Vault.

Pasos siguientes

En este inicio rápido, ha creado un almacén de claves y un secreto mediante Bicep y ha validado la implementación. Para obtener más información sobre Key Vault y Bicep, continúe con los artículos siguientes.