Uso Azure Key Vault secretos en Azure Pipelines

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019

Nota:

Este artículo le guiará a través del trabajo con Azure Key Vault en la canalización. Si desea establecer variables secretas o grupos de variables de referencia, consulte Definición de variables para obtener más detalles.

Azure Key Vault permite a los usuarios almacenar, administrar y acceder de forma segura a información confidencial. Los secretos pueden ser claves de API, credenciales, certificados, etc.

Azure Key Vault servicio admite dos tipos de contenedores: almacenes y grupos administrados de HSM (módulo de seguridad de hardware). Los almacenes admiten el almacenamiento de software y claves, secretos y certificados con respaldo de HSM, mientras que los grupos de HSM administrados solo admiten claves con respaldo de HSM.

En este tutorial, aprenderá a:

  • Creación de una Azure Key Vault mediante CLI de Azure
  • Adición de un secreto y configuración del acceso a Azure Key Vault
  • Uso de secretos en la canalización

Requisitos previos

  • Una organización de Azure DevOps. Si no tiene ninguna, puede crearla gratis.

Crear una instancia de Azure Key Vault

Los almacenes de claves de Azure se pueden crear y administrar a través Azure Portal o CLI de Azure. En este tutorial CLI de Azure usaremos para crear el almacén de claves de Azure.

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

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

    az account set --subscription <your_subscription_name_or_ID>
    
  2. Ejecute el siguiente comando para establecer la región de Azure predeterminada. Puede usar para az account list-locations 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. Ejecute el siguiente comando para crear 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. Ejecute el siguiente comando para crear un nuevo almacén de claves.

    az keyvault create \
      --name <your-key-vault> \
      --resource-group <your-resource-group>
    
  5. Ejecute el siguiente comando para crear un nuevo secreto en el almacén de claves. Los secretos se almacenan como un par clave-valor. En el ejemplo siguiente, Password es la clave y mysecretpassword es el valor.

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

Crear un proyecto

Inicie sesión en Azure Pipelines. A continuación, el explorador https://dev.azure.com/your-organization-name navegará a y mostrará Azure DevOps panel.

Si aún no tiene ningún proyecto en su organización, seleccione Crear un proyecto para empezar a crear un nuevo proyecto. De lo contrario, seleccione el botón Nuevo proyecto en la esquina superior derecha del panel.

Creación de un repositorio

Usaremos YAML para crear la 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. Vaya a Reposy, a continuación, seleccione Inicializar para inicializar un nuevo repositorio con un ARCHIVO LÉAME.

    Creación del repositorio

Creación de una canalización

  1. Vaya a Pipelinesy, a continuación, seleccione Nueva canalización.

  2. Seleccione Git de Azure Repos.

    Creación de la canalización

  3. Seleccione el repositorio que creó anteriormente. Debe tener el mismo nombre que el Azure DevOps proyecto.

  4. Seleccione Canalización inicial.

  5. La canalización predeterminada incluirá algunos scripts que ejecutan comandos de eco. No son necesarios, por lo que podemos eliminarlos. El nuevo archivo YAML tendrá ahora el siguiente aspecto:

     trigger:
     - main
    
     pool:
       vmImage: 'ubuntu-latest'
    
     steps:
    
  6. Seleccione Mostrar asistente para expandir el panel del asistente. Este panel proporciona una lista práctica y buscable de tareas de canalización.

    Mostrar el asistente de canalización

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

    Selección de la Azure Key Vault trabajo

  8. Seleccione y autorice la suscripción de Azure, seleccione la tarea Almacén de claves de Azure y seleccione Agregar para agregarla a la canalización. Esta tarea permite que la canalización se conecte a su Azure Key Vault y recupere secretos para usarlos como variables de canalización.

    Nota:

    La característica Hacer que los secretos estén disponibles para todo el trabajo no se admite actualmente Azure DevOps Server 2019 y 2020.

    Configuración de la Azure Key Vault trabajo

  9. El archivo 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'
    
  10. No guarde ni ejecute la canalización todavía. En primer lugar, debemos conceder a la canalización los permisos adecuados para acceder a Azure Key Vault. Mantenga abierta la pestaña del explorador, reanudaremos los pasos restantes una vez configurados los permisos del almacén de claves.

Configuración de directivas Azure Key Vault de acceso

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

  1. Vaya al Portal de Azure.

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

    Búsqueda 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 secretos,seleccione Obtener y Enumerar.

  6. Seleccione la opción para seleccionar 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, a continuación, Guardar.

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

  1. Vuelva a la pestaña anterior donde la dejaron.

  2. Seleccione Guardar y luego Guardar de nuevo para confirmar los cambios y desencadenar la canalización.

    Nota:

    Es posible que se le pida que permita el acceso de la canalización a los recursos de Azure, si se le solicita, seleccione Permitir. Solo tendrá que aprobar la canalización una vez.

  3. Seleccione el trabajo CmdLine para ver los registros.

    Revisión de la tarea de línea de comandos

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

    Resumen de la canalización

  5. En Trabajo, seleccionesecret.txt archivo para abrirlo.

    Visualización del secreto en el artefacto

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

Advertencia

Este tutorial es solo con fines educativos. Para obtener procedimientos recomendados de seguridad y cómo trabajar con secretos de forma segura, consulte Administración de secretos en las aplicaciones de servidor con Azure Key Vault.

Si se produce un error que indica que el usuario o grupo no tiene permiso de lista de secretos en el almacén de claves, ejecute los siguientes comandos para autorizar a la aplicación a acceder a la clave o el secreto en el 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;

Limpieza de recursos

Siga estos pasos para eliminar los recursos que ha creado:

  1. Si ha creado una nueva organización para hospedar el proyecto, consulte cómoeliminar 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 siguiente comando para eliminar el grupo de recursos y todos sus recursos.

    az group delete --name PipelinesKeyVaultResourceGroup
    

Pasos siguientes