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 de forma segura información confidencial, 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) administrado. Los almacenes pueden almacenar claves, secretos y certificados protegidos con HSM, mientras que los grupos de HSM administrado admiten exclusivamente claves protegidas con 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
Requisitos previos
Una organización de Azure DevOps y un proyecto. Cree una organización o un proyecto si aún no lo ha hecho.
Suscripción a Azure. Cree una cuenta de Azure de forma gratuita si aún no tiene una.
Obtener el código de ejemplo
Si ya tiene su propio repositorio, continúe con el paso siguiente. De lo contrario, importe el siguiente repositorio de ejemplo en Azure Repo.
Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.
Seleccione Repos (Repositorios) y, a continuación, seleccione Import (Importar). Escriba la siguiente dirección URL del repositorio y seleccione Importar.
https://github.com/MicrosoftDocs/pipelines-dotnet-core
Crear una instancia de Azure Key Vault
Inicie sesión en Azure Portal y, a continuación, seleccione el botón de Cloud Shell en la esquina superior derecha.
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>
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>
Crear un nuevo grupo de recursos.
az group create --name <YOUR_RESOURCE_GROUP_NAME>
Cree una nueva instancia de Azure Key Vault.
az keyvault create \ --name <YOUR_KEY_VAULT_NAME> \ --resource-group <YOUR_RESOURCE_GROUP_NAME>
Cree un nuevo secreto en el almacén de claves de Azure.
az keyvault secret set \ --name <YOUR_SECRET_NAME> \ --value <YOUR_ACTUAL_SECRET> \ --vault-name <YOUR_KEY_VAULT_NAME>
Configuración de la autenticación
Creación de una identidad administrada asignada por el usuario
Inicie sesión en Azure Portal y busque el servicio Identidades administradas en la barra de búsqueda.
Seleccione Crear y rellene los campos obligatorios de la siguiente manera:
- Suscripción: seleccione la suscripción en el menú desplegable.
- Grupo de recursos: seleccione un grupo de recursos existente o cree uno nuevo.
- Región: seleccione una región en el menú desplegable.
- Nombre: Ingrese un nombre para su identidad administrada asignada por el usuario.
Seleccione Revisar y crear cuando haya terminado.
Una vez completada la implementación, seleccione Ir al recurso y, a continuación, copie los valores de Suscripción e Id. de cliente para usarlos en los próximos pasos.
Vaya a Propiedades de configuración>y copie el valor de Id. de inquilino de la identidad administrada para su uso posterior.
Configuración de directivas de acceso al almacén de claves
Vaya a Azure Portal y use la barra de búsqueda para buscar el almacén de claves que creó anteriormente.
Seleccione Directivas de acceso y, después, Crear para agregar una nueva directiva.
En Permisos secretos, active las casillas Obtener y Enumerar .
Seleccione Siguiente y pegue el identificador de cliente de la identidad administrada que creó anteriormente en la barra de búsqueda. Seleccione su identidad administrada.
Seleccione Siguiente y , una vez más, Siguiente .
Revise las nuevas directivas y, a continuación, seleccione Crear cuando haya terminado.
Creación de una conexión de servicio
Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.
Seleccione Configuración del proyecto>Conexiones de servicio y, a continuación, seleccione Nueva conexión de servicio para crear una nueva conexión de servicio.
Seleccione Azure Resource Manager y, después, siguiente.
En Tipo de identidad, seleccione Identidad administrada en el menú desplegable.
Para el paso 1: Detalles de la identidad administrada, rellene los campos como se indica a continuación:
Suscripción para identidad administrada: seleccione la suscripción que contiene la identidad administrada.
Grupo de recursos para identidad administrada: seleccione el grupo de recursos que hospeda la identidad administrada.
Identidad administrada: seleccione la identidad administrada en el menú desplegable.
Para el paso 2: Ámbito de Azure, rellene los campos como se indica a continuación:
Nivel de ámbito para la conexión de servicio: seleccione Suscripción.
Suscripción para la conexión de servicio: seleccione la suscripción a la que accederá la identidad administrada.
Grupo de recursos para conexión de servicio: (opcional) Especifique para limitar el acceso de identidad administrada a un grupo de recursos.
Para el paso 3: Detalles de conexión del servicio:
Nombre de la conexión de servicio: proporcione un nombre para la conexión de servicio.
Referencia de administración de servicios: (opcional) Información de contexto de una base de datos ITSM.
Descripción: (opcional) Agregue una descripción.
En Seguridad, active la casilla Conceder permiso de acceso a todas las canalizaciones para permitir que todas las canalizaciones usen esta conexión de servicio. Si no selecciona esta opción, debe conceder manualmente acceso a cada canalización que use esta conexión de servicio.
Seleccione Guardar para validar y crear la conexión de servicio.
Acceso a los secretos del almacén de claves desde la canalización
Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.
Seleccione Canalizaciones y elija Nueva canalización.
Seleccione Git de Azure Repos (YAML) y, a continuación, seleccione el repositorio.
Seleccione la plantilla Canalización inicial.
La canalización predeterminada incluirá un script que ejecuta comandos eco. No son necesarios, así que se pueden eliminar.
Agregue la tarea AzureKeyVault y sustituya los marcadores de posición por el nombre de la conexión de servicio que creó anteriormente y el nombre del almacén de claves. El archivo YAML debería ser similar al fragmento siguiente:
trigger: - main pool: vmImage: ubuntu-latest steps: - task: AzureKeyVault@2 displayName: Azure Key Vault inputs: azureSubscription: 'SERVICE_CONNECTION_NAME' KeyVaultName: 'KEY_VAULT_NAME' SecretsFilter: '*' RunAsPreJob: false
Vamos a agregar las siguientes tareas para copiar y publicar nuestro secreto. Este ejemplo es solo para fines de demostración y no debe implementarse en un entorno de producción.
trigger: - main pool: vmImage: ubuntu-latest steps: - task: AzureKeyVault@2 displayName: Azure Key Vault inputs: azureSubscription: 'SERVICE_CONNECTION_NAME' KeyVaultName: 'KEY_VAULT_NAME' SecretsFilter: '*' RunAsPreJob: false - task: CmdLine@2 displayName: Create file inputs: script: 'echo $(SECRET_NAME) > secret.txt' - task: CopyFiles@2 displayName: Copy file inputs: Contents: secret.txt targetFolder: '$(Build.ArtifactStagingDirectory)' - task: PublishBuildArtifacts@1 displayName: Publish Artifact inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'drop' publishLocation: 'Container'
Seleccione Guardar y ejecutar y, a continuación, selecciónelo una vez más 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.
Seleccione la tarea CmdLine para ver los registros.
Una vez completada la ejecución de la canalización, vuelva al resumen de la canalización y seleccione el artefacto publicado.
Seleccione colocar>secret.txt para descargarlo.
Abra el archivo de texto que acaba de descargar, debe contener el secreto del almacén de claves de Azure.
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:
Si ha creado una nueva organización para alojar el proyecto, consulte cómo eliminar la organización o, de lo contrario , elimine el proyecto.
Todos los recursos de Azure creados durante este tutorial se hospedan en un único grupo de recursos. Ejecute el comando siguiente para eliminar el grupo de recursos y todos los recursos que incluye.
az group delete --name <YOUR_RESOURCE_GROUP_NAME>
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:
az account set --subscription <YOUR_SUBSCRIPTION_ID>
az login
$spnObjectId = az ad sp show --id <YOUR_SERVICE_PRINCIPAL_ID>
az keyvault set-policy --name <YOUR_KEY_VAULT_NAME> --object-id $spnObjectId --secret-permissions get list