Uso de secretos de Azure Key Vault en Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Azure Key Vault permite a los desarrolladores almacenar y administrar secretos de forma segura, como claves de API, credenciales o certificados. El servicio Azure Key Vault admite dos tipos de contenedores: almacenes y grupos de HSM (módulo de seguridad de hardware) administrados. Los almacenes admiten el almacenamiento de software y de claves, secretos y certificados respaldados por HSM; mientras que los grupos de HSM administrados solo admiten claves respaldadas por HSM.

En este tutorial, aprenderá a:

  • Crear una instancia de Azure Key Vault mediante la CLI de Azure.
  • Incorporar un secreto y configurar el acceso a Azure Key Vault.
  • Uso de secretos en la canalización

Prerrequisitos

Crear una instancia de Azure Key Vault

Inicie sesión en Azure Portal y, luego, seleccione el botón Cloud Shell en la esquina superior derecha.

  1. Si tiene más de una suscripción de Azure asociada a su cuenta, use el siguiente comando para especificar una suscripción predeterminada. Puede usar az account list para generar una lista de las suscripciones.

    az account set --subscription <your_subscription_name_or_ID>
    
  2. Establezca la región de Azure predeterminada. Puede usar az account list-locations para generar una lista de regiones disponibles.

    az config set defaults.location=<your_region>
    

    Por ejemplo, este comando seleccionará la región westus2:

    az config set defaults.location=westus2
    
  3. Cree un nuevo grupo de recursos. Un grupo de recursos es un contenedor que almacena los recursos relacionados con una solución de Azure.

    az group create --name <your-resource-group>
    
  4. Cree un nuevo almacén de claves.

    az keyvault create \
      --name <your-key-vault> \
      --resource-group <your-resource-group>
    
  5. Cree un nuevo secreto en el almacén de claves de Azure.

    az keyvault secret set \
      --name "Password" \
      --value "mysecretpassword" \
      --vault-name <your-key-vault-name>
    

Crear un proyecto

  1. Inicie sesión en su organización de Azure DevOps.

  2. Si no tiene ningún proyecto en la organización, seleccione Cree un proyecto para empezar. De lo contrario, seleccione Nuevo proyecto en la esquina superior derecha.

Creación de un repositorio

Usaremos YAML para crear nuestra canalización, pero primero es necesario crear un nuevo repositorio.

  1. Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.

  2. Seleccione Repositorios y, luego, elija Inicializar para inicializar un nuevo repositorio con un archivo LÉAME.

    Captura de pantalla que muestra cómo inicializar un repositorio.

Creación de una canalización

  1. Seleccione Canalizaciones y elija Nueva canalización.

  2. Seleccione GIT de Azure Repos (YAML).

    Captura de pantalla que muestra cómo seleccionar un control de código fuente de Azure.

  3. Seleccione el repositorio que creó en el paso anterior.

  4. Seleccione la plantilla Canalización inicial.

  5. La canalización predeterminada incluirá algunos scripts que ejecutan comandos de eco. No son necesarios, así que se pueden eliminar. El nuevo archivo YAML debería tener este aspecto:

    trigger:
    - main
    
    pool:
        vmImage: 'ubuntu-latest'
    
    steps:
    
  6. Seleccione Mostrar asistente para expandir el panel del asistente. Este panel proporciona una práctica lista de tareas de canalización en la que se puede hacer búsquedas.

    Captura de pantalla que muestra cómo acceder al panel del asistente de tareas.

  7. Busque almacén y seleccione la tarea Azure Key Vault.

    Captura de pantalla que muestra cómo buscar la tarea Azure Key Vault.

  8. En Suscripción de Azure, seleccione su suscripción y, luego, elija Autorizar. Seleccione su almacén de claves en el menú desplegable y, luego, elija Agregar para agregar la tarea a la canalización YAML.

    Captura de pantalla que muestra cómo configurar la tarea Azure Key Vault.

    Nota:

    La característica Poner secretos a disposición de todo el trabajo no se admite en Azure DevOps Server 2019 y 2020.

  9. El archivos YAML debe tener un aspecto parecido al siguiente:

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - task: AzureKeyVault@2
      inputs:
        azureSubscription: 'Your-Azure-Subscription'
        KeyVaultName: 'Your-Key-Vault-Name'
        SecretsFilter: '*'
        RunAsPreJob: false
    
    - task: CmdLine@2
      inputs:
        script: 'echo $(Your-Secret-Name) > secret.txt'
    
    - task: CopyFiles@2
      inputs:
        Contents: secret.txt
        targetFolder: '$(Build.ArtifactStagingDirectory)'
    
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'
    

No guarde ni ponga en cola todavía la canalización. Primero debemos conceder a nuestra canalización los permisos adecuados para acceder a Azure Key Vault. Mantenga abierta la pestaña del explorador, ya reanudaremos los pasos restantes una vez configurados los permisos del almacén de claves.

Configuración de las directivas de acceso de Azure Key Vault

Para acceder a nuestra instancia de Azure Key Vault, primero debemos configurar una entidad de servicio para conceder acceso a Azure Pipelines. Siga esta guía para crear la entidad de servicio y, luego, continúe con los pasos siguientes de esta sección.

  1. Navegue hasta Azure Portal.

  2. Use la barra de búsqueda para buscar el almacén de claves que creó anteriormente.

    Captura de pantalla que muestra cómo buscar la instancia de Azure Key Vault.

  3. En Configuración, seleccione Directivas de acceso.

  4. Seleccione Agregar directiva de acceso para agregar una nueva directiva.

  5. En Permisos de secretos, seleccione Obtener y enumerar.

  6. Seleccione la opción para elegir una entidad de servicio y busque la que creó al principio de esta sección. Una entidad de seguridad es un objeto que representa un usuario, un grupo o una entidad de servicio que solicita acceso a recursos de Azure.

  7. Seleccione Agregar para crear la directiva de acceso y, cuando haya acabado, elija Guardar.

Nota

No se admiten los almacenes de Claves de Azure que usan el control de acceso basado en rol de Azure (RBAC de Azure).

Ejecución y revisión de la canalización

  1. Vuelva a la pestaña anterior donde nos quedamos.

  2. Seleccione Guardar y, luego, elija de nuevo Guardar para confirmar los cambios y desencadenar la canalización. Es posible que se le pida que permita el acceso de canalización a los recursos de Azure; si este es el caso, seleccione Permitir. Solo tendrá que aprobar la canalización una vez.

  3. Seleccione la tarea CmdLine para ver los registros.

    Captura de pantalla que muestra los registros de la tarea de línea de comandos.

  4. Vuelva al resumen de la canalización y seleccione el artefacto publicado.

    Captura de pantalla que muestra el resumen de canalización y el artefacto publicado.

  5. Seleccione el artefacto secret.txt para abrirlo.

    Captura de pantalla que muestra cómo abrir el artefacto publicado.

  6. El archivo de texto debe contener nuestro secreto: mysecretpassword.

Advertencia

Este tutorial tiene carácter educativo exclusivamente. Para conocer los procedimientos recomendados de seguridad y cómo trabajar de forma segura con secretos, consulte Administración de secretos en las aplicaciones de servidor con Azure Key Vault.

Limpieza de recursos

Siga los pasos que se indican a continuación para eliminar los recursos que ha creado:

  1. Si ha creado una nueva organización para hospedar el proyecto, vea cómo eliminar la organización; de lo contrario, elimine el proyecto.

  2. Todos los recursos de Azure creados durante este tutorial se hospedan en un único grupo de recursos, PipelinesKeyVaultResourceGroup. Ejecute el comando siguiente para eliminar el grupo de recursos y todos sus recursos.

    az group delete --name PipelinesKeyVaultResourceGroup
    

Preguntas más frecuentes

P: Recibo el siguiente error: "El usuario o grupo no tiene permiso de lista de secretos". ¿Qué debo hacer?

R: Si encuentra un error que indica que el usuario o grupo no tiene el permiso de lista de secretos en un almacén de claves, ejecute los siguientes comandos para autorizar a la aplicación el acceso a la clave o el secreto en Azure Key Vault:

$ErrorActionPreference="Stop";
$Credential = Get-Credential;
Connect-AzAccount -SubscriptionId <YOUR_SUBSCRIPTION_ID> -Credential $Credential;
$spn=(Get-AzureRmADServicePrincipal -SPN <YOUR_SERVICE_PRINCIPAL_ID>);
$spnObjectId=$spn.Id;
Set-AzureRmKeyVaultAccessPolicy -VaultName key-vault-tutorial -ObjectId $spnObjectId -PermissionsToSecrets get,list;

Pasos siguientes