Partager via


Utiliser un principal de service Azure avec une authentification basée sur un certificat

Lorsque vous créez un principal de service, vous choisissez le type d’authentification de connexion qu’il utilise. Il existe deux types d’authentification pour les principaux de service Azure : l’authentification par mot de passe et l’authentification par certificat.

Nous vous recommandons d’utiliser l’authentification par certificat en raison des restrictions de sécurité liées à l’authentification par mot de passe. L'authentification basée sur les certificats vous permet d'adopter une authentification résistante au phishing en utilisant des stratégies d'accès conditionnel, qui protègent mieux les ressources Azure. Pour en savoir plus sur les raisons pour lesquelles l'authentification basée sur un certificat est plus sécurisée, consultez Authentification basée sur un certificat Microsoft Entra.

Cette étape du didacticiel explique comment utiliser un certificat de principal de service pour accéder à une ressource Azure.

Créer un principal de service contenant un nouveau certificat

Pour créer un certificat auto-signé pour l’authentification, utilisez le paramètre --create-cert :

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

Sortie de la console :

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

À moins que vous ne stockiez le certificat dans Key Vault, la sortie comprend la clé fileWithCertAndPrivateKey. La valeur de cette clé vous indique l’emplacement dans lequel le certificat généré est stocké. Copiez le certificat dans un emplacement sécurisé. Le certificat contient la clé privée et le certificat public qui peuvent être utilisés dans az login. Si vous perdez l’accès à la clé privée d’un certificat, effectuez la réinitialisation des informations d’identification du principal du service.

Le contenu d'un fichier PEM peut être visualisé avec un éditeur de texte. Voici un exemple de fichier PEM :

-----BEGIN PRIVATE KEY-----
MIIEvQ...
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICoT...
-----END CERTIFICATE-----

Créer un principal de service à l’aide d’un certificat existant

Créez un principal de service avec un certificat existant à l’aide du paramètre --cert. Tout outil qui utilise ce principal de service doit avoir accès à la clé privée du certificat. Les certificats doivent être au format ASCII tel que PEM, CER ou DER. Transmettez le certificat sous forme de chaîne, ou utilisez le format @path pour charger le certificat depuis un fichier. Lors du chargement d’un certificat, seul le certificat public est nécessaire. Pour une sécurité optimale, n’incluez pas la clé privée. Les -----BEGIN CERTIFICATE----- lignes et -----END CERTIFICATE----- les lignes sont facultatives.

# 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

Voici un exemple de fichier PEM pour le chargement :

-----BEGIN CERTIFICATE-----
MIICoT...
-----END CERTIFICATE-----

Utiliser Azure Key Vault

Vous pouvez ajouter le paramètre --keyvault pour créer ou récupérer des certificats dans Azure Key Vault. Lorsque vous utilisez le paramètre --keyvault, le paramètre --cert est également requis. Dans cet exemple, la valeur --cert est le nom du certificat.

# 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

Récupérer un certificat à partir d’Azure Key Vault

Pour un certificat stocké dans Azure Key Vault, récupérez le certificat avec sa clé privée avec spectacle secret az keyvault et convertissez-le en fichier PEM. Dans Azure Key Vault, le nom du secret du certificat est le même que le nom du certificat.

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

Convertir un fichier PKCS12 existant

Si vous disposez déjà d’un fichier PKCS#12, vous pouvez le convertir au format PEM à l’aide d’OpenSSL. Si vous avez un mot de passe, modifiez l’argument passin.

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

Ajouter un certificat à un principal de service

Utilisez le paramètre --append dans az ad sp credential reset pour ajouter un certificat à un principal de service existant. Par défaut, cette commande efface l’ensemble des mots de passe et des clés. Veuillez donc l’utiliser avec précaution.

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

Sortie de la console :

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"
}

Se connecter avec un principal de service à l’aide d’un certificat

Pour vous connecter avec un certificat, celui-ci doit être disponible localement sous forme de fichier PEM ou DER au format ASCII. Les fichiers PKCS#12 (.p12/.pfx) ne fonctionnent pas. Quand vous utilisez un fichier PEM, la CLÉ PRIVÉE et le CERTIFICAT doivent être ajoutés dans le fichier. Vous n’avez pas besoin de préfixer le chemin d’accès avec le caractère @ comme vous le faites avec d’autres commandes az.

az login --service-principal --username APP_ID --certificate /path/to/cert.pem --tenant TENANT_ID

Étapes suivantes

Maintenant que vous avez appris à utiliser des principaux de service avec un certificat, passez à l’étape suivante pour découvrir comment récupérer un principal de service existant.