Inicio rápido: Creación de una entidad de servicio de Azure para Ansible

En este inicio rápido, creará una entidad de servicio de Azure con la CLI de Azure o Azure PowerShell, y se autenticará en Azure desde Ansible.

En este artículo aprenderá a:

  • Creación de una entidad de servicio de Azure con la CLI de Azure
  • Creación de una entidad de servicio de Azure con Azure PowerShell
  • Asignación de un rol a la entidad de servicio de Azure
  • Obtención de información clave de la entidad de servicio
  • Establecimiento de variables de entorno para que Ansible pueda recuperar los valores de la entidad de servicio
  • Prueba de la entidad de servicio

Requisitos previos

  • Suscripción de Azure: si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Creación de una entidad de servicio de Azure

Una entidad de servicio de Azure le proporciona una cuenta dedicada para administrar los recursos de Azure con Ansible.

Ejecute el código siguiente para crear una entidad de servicio de Azure:

az ad sp create-for-rbac --name ansible \
            --role Contributor \
            --scopes /subscriptions/<subscription_id>

Nota:

Almacene la contraseña de la salida en una ubicación segura.

Asignación de un rol a la entidad de servicio de Azure

De forma predeterminada, las entidades de servicio no tienen el acceso necesario para administrar recursos en Azure.

Ejecute el siguiente comando para asignar el rol Colaborador a la entidad de servicio:

az role assignment create --assignee <appID> \
    --role Contributor \
    --scope /subscriptions/<subscription_id>

Reemplace <appID> por el valor proporcionado en la salida del comando az ad sp create-for-rbac.

Nota:

Para mejorar la seguridad, cambie el ámbito de la asignación de roles a un grupo de recursos en lugar de a una suscripción.

Obtención de información de la entidad de servicio de Azure

Para autenticarse en Azure con una entidad de servicio, necesita la siguiente información:

  • SubscriptionID
  • Valor de ApplicationId de la entidad de servicio
  • Contraseña de la entidad de servicio
  • TenantID

Ejecute los siguientes comandos para obtener la información de la entidad de servicio:

az account show --query '{tenantId:tenantId,subscriptionid:id}';

az ad sp list --display-name ansible --query '{clientId:[0].appId}'

Autenticación en Azure con la entidad de servicio

Ejecute los comandos siguientes para rellenar las variables de entorno necesarias en el servidor de Ansible:

export AZURE_SUBSCRIPTION_ID=<SubscriptionID>
export AZURE_CLIENT_ID=<ApplicationId>
export AZURE_SECRET=<Password>
export AZURE_TENANT=<TenantID>

Reemplace <SubscriptionID>, <ApplicationId>, <Password> y <TenantID> por los valores de la cuenta de la entidad de servicio.

Prueba de permisos de entidad de servicio

Ejecute el siguiente comando para crear un grupo de recursos de Azure:

ansible localhost -m azure_rm_resourcegroup -a "name=<resource_group_name> location=<resource_group_location>"

Reemplace <resource_group_name> y <resource_group_location> por los nuevos valores del grupo de recursos.

[WARNING]: No inventory was parsed, only implicit localhost is available
localhost | CHANGED => {
    "changed": true,
    "contains_resources": false,
    "state": {
        "id": "/subscriptions/<subscriptionID>/resourceGroups/azcli-test",
        "location": "eastus",
        "name": "azcli-test",
        "provisioning_state": "Succeeded",
        "tags": null
    }
}

Ejecute el comando siguiente para eliminar el grupo de recursos de Azure:

ansible localhost -m azure_rm_resourcegroup -a "name=<resource_group_name> state=absent force_delete_nonempty=yes"

Reemplace <resource_group_name> por el nombre del grupo de recursos.

[WARNING]: No inventory was parsed, only implicit localhost is available
localhost | CHANGED => {
    "changed": true,
    "contains_resources": false,
    "state": {
        "id": "/subscriptions/subscriptionID>/resourceGroups/azcli-test",
        "location": "eastus",
        "name": "azcli-test",
        "provisioning_state": "Succeeded",
        "status": "Deleted",
        "tags": null
    }
}

Pasos siguientes