Uso de una entidad de servicio de Azure con autenticación basada en certificado

Al crear una entidad de servicio, elija el tipo de autenticación de inicio de sesión que usa. Hay dos tipos de autenticación disponibles para las entidades de servicio de Azure: autenticación basada en contraseña y autenticación basada en certificados.

Se recomienda usar la autenticación basada en certificados debido a las restricciones de seguridad que tiene la autenticación basada en contraseña. La autenticación basada en certificados permite adoptar una autenticación resistente a la suplantación de identidad (phishing) mediante directivas de acceso condicional, que protege mejor los recursos de Azure. Para obtener más información sobre por qué la autenticación basada en certificados es más segura, consulte Autenticación basada en certificados de Microsoft Entra.

En este paso del tutorial se explica cómo usar un certificado de entidad de servicio para acceder a un recurso de Azure.

Creación de una entidad de servicio que contenga un nuevo certificado

Para crear un certificado autofirmado para la autenticación, use el parámetro --create-cert:

az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --create-cert

Salida de la consola:

{
  "appId": "myServicePrincipalID",
  "displayName": "myServicePrincipalName",
  "fileWithCertAndPrivateKey": "certFilePath\certFileName.pem",
  "password": null,
  "tenant": "myOrganizationTenantID"
}

A menos que almacene el certificado en Key Vault, la salida incluirá la clave fileWithCertAndPrivateKey. Este valor de clave indica donde está almacenado el certificado generado. Copie el certificado en una ubicación segura. Si pierde el acceso a la clave privada de un certificado, restablezca las credenciales de la entidad de servicio.

El contenido de un archivo PEM se puede ver con un editor de texto. Este es un ejemplo de archivo PEM:

Screenshot of PEM file

Creación de una entidad de servicio mediante un certificado existente

Cree una entidad de servicio con un certificado existente mediante el parámetro --cert. Todas las herramientas que usen esta entidad de servicio deben tener acceso a la clave privada del certificado. Los certificados deben estar en formato ASCII, como PEM, CER o DER. Pase el certificado como una cadena o use el formato @path para cargar el certificado desde un archivo.

Cuando se usa un archivo PEM, se debe anexar un valor de CERTIFICATE a PRIVATE KEY en el archivo.

# create a service principal with the certificate as a string
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert "-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----"
# create a service principal with the certificate file location
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert @/path/to/cert.pem

Trabajar con Azure Key Vault

Se puede agregar el parámetro --keyvault para crear o recuperar certificados en Azure Key Vault. Cuando se usa el parámetro --keyvault, también se requiere el parámetro --cert. En este ejemplo, el valor --cert es el nombre del certificado.

# Create a service principal storing the certificate in Azure Key Vault
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --create-cert \
                         --cert myCertificateName \
                         --keyvault myVaultName
# Create a service principal using an existing certificate in Azure Key Vault
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert myCertificateName \
                         --keyvault myVaultName

Recuperación de un certificado desde Azure Key Vault

En el caso de un certificado almacenado en Azure Key Vault, recupere el certificado con su clave privada del certificado con az keyvault secret show y conviértalo en un archivo PEM. En Azure Key Vault, el nombre del secreto del certificado es el mismo que el nombre del certificado.

az keyvault secret download --file /path/to/cert.pfx \
                            --vault-name VaultName \
                            --name CertName \
                            --encoding base64
openssl pkcs12 -in cert.pfx -passin pass: -out cert.pem -nodes

Conversión de un archivo PKCS12 existente

Si ya tiene un archivo PKCS#12, puede convertirlo al formato PEM mediante OpenSSL. Si tiene una contraseña, cambie el argumento passin.

openssl pkcs12 -in fileName.p12 -clcerts -nodes -out fileName.pem -passin pass:

Anexión de un certificado a una entidad de servicio

Use el parámetro --append en az ad sp credential reset para anexar un certificado a una entidad de servicio existente. De forma predeterminada, este comando borra todas las contraseñas y claves, así que úselo con precaución.

az ad sp credential reset --id myServicePrincipalID \
                          --append \
                          --cert @/path/to/cert.pem

Salida de la consola:

Certificate expires yyyy-mm-dd hh:mm:ss+00:00. Adjusting key credential end date to match.
The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli
{
  "appId": "myServicePrincipalID",
  "password": null,
  "tenant": "myOrganizationTenantID"
}

Inicio de sesión con una entidad de servicio mediante un certificado

Para iniciar sesión con un certificado, este debe estar disponible localmente en un archivo PEM o DER, en formato ASCII. Los archivos PKCS#12 (.p12/.pfx) no funcionan. Cuando se usa un archivo PEM, se deben anexar los valores de CERTIFICATE y PRIVATE KEY en el archivo. No es necesario anteponer a la ruta de acceso @ como hace con otros comandos az.

az login --service-principal \
         --username myServicePrincipalID \
         --tenant myOwnerOrganizationId \
         --password /path/to/cert

Pasos siguientes

Ahora que ha aprendido a trabajar con entidades de servicio mediante un certificado, continúe con el paso siguiente para aprender a recuperar una entidad de servicio existente.