Share via


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. 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:

Screenshot of PEM file

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 certi897ficate come stringa o usare il formato per caricare il @path certificato da un file.

Quando si usa un file PEM, il certificato deve essere aggiunto alla CHIAVE PRIVATA all'interno del file.

# 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

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: -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:

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 myServicePrincipalID \
         --tenant myOwnerOrganizationId \
         --password /path/to/cert

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.