Dela via


Använda ett Huvudnamn för Azure-tjänsten med certifikatbaserad autentisering

När du skapar ett huvudnamn för tjänsten kan du välja vilken typ av inloggningsinformation som används. Det finns två typer av autentisering som är tillgängliga för Azure-tjänstens huvudnamn: lösenordsbaserad autentisering och certifikatbaserad autentisering.

Vi rekommenderar att du använder certifikatbaserad autentisering på grund av säkerhetsbegränsningarna för lösenordsbaserad autentisering. Med certifikatbaserad autentisering kan du använda en nätfiskeresistent autentisering med hjälp av principer för villkorlig åtkomst, vilket bättre skyddar Azure-resurser. Mer information om varför certifikatbaserad autentisering är säkrare finns i Microsoft Entra-certifikatbaserad autentisering.

Det här steget i självstudien förklarar hur du använder ett certifikat för tjänstens huvudnamn för att få åtkomst till en Azure-resurs.

Skapa ett huvudnamn för tjänsten som innehåller ett nytt certifikat

Om du vill skapa ett självsignerat certifikat för autentisering använder du parametern --create-cert :

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

Konsolutdata:

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

Om du inte lagrar certifikatet i Key Vault innehåller fileWithCertAndPrivateKey utdata nyckeln. Värdet för den här nyckeln anger var det genererade certifikatet lagras. Kopiera certifikatet till en säker plats. Om du förlorar åtkomsten till ett certifikats privata nyckel återställer du autentiseringsuppgifterna för tjänstens huvudnamn.

Innehållet i en PEM-fil kan visas med en textredigerare. Här är ett PEM-filexempel:

Skärmbild av PEM-fil

Skapa ett huvudnamn för tjänsten med ett befintligt certifikat

Skapa ett huvudnamn för tjänsten med ett befintligt certifikat med hjälp av parametern --cert . Alla verktyg som använder tjänstens huvudnamn måste ha åtkomst till certifikatets privata nyckel. Certifikaten ska vara i ett ASCII-format, till exempel PEM, CER eller DER. Skicka certi897ficate som en sträng eller använd @path formatet för att läsa in certifikatet från en fil.

När du använder en PEM-fil måste CERTIFIKATet läggas till i DEN PRIVATA NYCKELN i filen.

# 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

Arbeta med Azure Key Vault

Parametern --keyvault kan läggas till för att skapa eller hämta certifikat i Azure Key Vault. När du använder parametern --keyvault krävs även parametern --cert . I det här exemplet --cert är värdet namnet på certifikatet.

# 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

Hämta ett certifikat från Azure Key Vault

För ett certifikat som lagras i Azure Key Vault hämtar du certifikatet med sin privata nyckel med az keyvault secret show och konverterar det till en PEM-fil. I Azure Key Vault är namnet på certifikatets hemlighet detsamma som certifikatnamnet.

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

az login --service-principal -u "<myAppClientID>" -p cert.pem --tenant "<myTenantID>"

Konvertera en befintlig PKCS12-fil

Om du redan har en PKCS#12-fil kan du konvertera den till PEM-format med OpenSSL. Om du har ett lösenord ändrar du passin argumentet.

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

Lägga till ett certifikat i tjänstens huvudnamn

Använd parametern --append i az ad sp credential reset för att lägga till ett certifikat till ett befintligt huvudnamn för tjänsten. Som standard rensar det här kommandot alla lösenord och nycklar så använd noggrant.

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

Konsolutdata:

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

Logga in med tjänstens huvudnamn med hjälp av ett certifikat

Om du vill logga in med ett certifikat måste certifikatet vara tillgängligt lokalt som en PEM- eller DER-fil i ASCII-format. PKCS#12-filer (.p12/.pfx) fungerar inte. När du använder en PEM-fil måste DEN PRIVATA NYCKELN och CERTIFIKATet läggas till tillsammans i filen. Du behöver inte prefixa sökvägen med en @ som du gör med andra az-kommandon.

az login --service-principal \
         --username myServicePrincipalID \
         --tenant myOwnerOrganizationId \
         --password /path/to/cert

Nästa steg

Nu när du har lärt dig hur du arbetar med tjänstens huvudnamn med hjälp av ett certifikat går du vidare till nästa steg för att lära dig hur du hämtar ett befintligt huvudnamn för tjänsten.