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. El certificado contiene la clave privada y el certificado público que se puede usar en az login
. 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:
-----BEGIN PRIVATE KEY-----
MIIEvQ...
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICoT...
-----END CERTIFICATE-----
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. Al cargar un certificado, solo se necesita el certificado público. Para lograr una seguridad óptima, no incluya la clave privada. Las -----BEGIN CERTIFICATE-----
líneas y -----END CERTIFICATE-----
son opcionales.
# 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 "MIICoT..."
# or provide -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- lines
az ad sp create-for-rbac --name myServicePrincipalName \
--role roleName \
--scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
--cert "-----BEGIN CERTIFICATE-----
MIICoT...
-----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
Este es un ejemplo de archivo PEM para cargar:
-----BEGIN CERTIFICATE-----
MIICoT...
-----END CERTIFICATE-----
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: -passout 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: -passout 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 APP_ID --certificate /path/to/cert.pem --tenant TENANT_ID
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.