Usare un'entità servizio di Azure con l'autenticazione basata su certificati
Quando si crea un'entità servizio, si sceglie il tipo di autenticazione per l'accesso che verrà usata dall'entità. Esistono due tipi di autenticazione disponibili per le entità servizio di Azure: autenticazione basata su password e autenticazione basata su certificati.
È consigliabile usare l'autenticazione basata su certificati a causa delle restrizioni di sicurezza dell'autenticazione basata su password. L'autenticazione basata su certificati consente di adottare un'autenticazione resistente al phishing usando criteri di accesso condizionale, che proteggono meglio le risorse di Azure. Per altre informazioni sul motivo per cui l'autenticazione basata su certificati è più sicura, vedere Autenticazione basata su certificati Microsoft Entra.
Questo passaggio dell'esercitazione illustra come usare un certificato dell'entità servizio per accedere a una risorsa di Azure.
Creare un'entità servizio contenente un nuovo certificato
Per creare un certificato autofirmato per l'autenticazione, usare il --create-cert
parametro :
az ad sp create-for-rbac --name myServicePrincipalName \
--role roleName \
--scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
--create-cert
Output della console:
{
"appId": "myServicePrincipalID",
"displayName": "myServicePrincipalName",
"fileWithCertAndPrivateKey": "certFilePath\certFileName.pem",
"password": null,
"tenant": "myOrganizationTenantID"
}
A meno che non si archivi il certificato in Key Vault, l'output include la chiave fileWithCertAndPrivateKey
. Il valore di questa chiave indica la posizione di archiviazione del certificato generato. Copiare il certificato in un percorso sicuro. Il certificato contiene la chiave privata e il certificato pubblico che può essere usato in az login
. Se si perde l'accesso alla chiave privata del certificato, reimpostare le credenziali dell'entità servizio.
Il contenuto di un file PEM può essere visualizzato con un editor di testo. Ecco un esempio di file PEM:
-----BEGIN PRIVATE KEY-----
MIIEvQ...
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICoT...
-----END CERTIFICATE-----
Creare un'entità servizio usando un certificato esistente
Creare un'entità servizio con un certificato esistente usando il --cert
parametro . Qualsiasi strumento che usa questa entità servizio deve avere accesso alla chiave privata del certificato. I certificati devono essere in un formato ASCII come PEM, CER o DER. Passare il certificato come stringa oppure usare il formato @path
per caricare il certificato da un file. Quando si carica un certificato, è necessario solo il certificato pubblico. Per una sicurezza ottimale, non includere la chiave privata. Le -----BEGIN CERTIFICATE-----
righe e -----END CERTIFICATE-----
sono facoltative.
# 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
Ecco un esempio di file PEM per il caricamento:
-----BEGIN CERTIFICATE-----
MIICoT...
-----END CERTIFICATE-----
Usare Azure Key Vault
Il --keyvault
parametro può essere aggiunto per creare o recuperare i certificati in Azure Key Vault. Quando si usa il --keyvault
parametro , è necessario anche il --cert
parametro . In questo esempio, il --cert
valore è il nome del certificato.
# 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
Recuperare un certificato da Azure Key Vault
Per un certificato archiviato in Azure Key Vault, recuperare il certificato con la relativa chiave privata con az keyvault secret show e convertirlo in un file PEM. In Azure Key Vault il nome del segreto del certificato corrisponde al nome del certificato.
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
Convertire un file PKCS12 esistente
Se si dispone già di un file PKCS#12, è possibile convertirlo in formato PEM usando OpenSSL. Se si dispone di una password, modificare l'argomento passin
.
openssl pkcs12 -in fileName.p12 -clcerts -nodes -out fileName.pem -passin pass: -passout pass:
Aggiungere un certificato a un'entità servizio
Usare il --append
parametro in az ad sp credential reset per aggiungere un certificato a un'entità servizio esistente.
Per impostazione predefinita, questo comando cancella tutte le password e le chiavi in modo da usare attentamente.
az ad sp credential reset --id myServicePrincipalID \
--append \
--cert @/path/to/cert.pem
Output della 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"
}
Accedere con un'entità servizio usando un certificato
Per accedere con un certificato, il certificato deve essere disponibile localmente come file PEM o DER in formato ASCII. I file PKCS#12 (.p12/.pfx) non funzionano. Quando si usa un file PEM, la CHIAVE PRIVATA e IL CERTIFICATO devono essere aggiunti insieme all'interno del file. Non è necessario anteporre al percorso un @
prefisso simile a quello usato con altri comandi az.
az login --service-principal --username APP_ID --certificate /path/to/cert.pem --tenant TENANT_ID
Passaggi successivi
Dopo aver appreso come usare le entità servizio usando un certificato, procedere con il passaggio successivo per informazioni su come recuperare un'entità servizio esistente.