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é. 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 :
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. Passez certi897ficate en tant que chaîne ou utilisez le format @path
pour charger le certificat à partir d’un fichier.
Lorsque vous utilisez un fichier PEM, le CERTIFICAT doit être ajouté à la CLÉ PRIVÉE dans le fichier.
# 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
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.