Een Azure-service-principal maken met de Azure CLI

Geautomatiseerde hulpprogramma's die gebruikmaken van Azure-services moeten altijd beperkte machtigingen krijgen. In plaats van dat toepassingen zich moeten aanmelden als volledig bevoegde gebruikers, biedt Azure service-principals.

Wat is een Azure-service-principal?

Een Azure-service-principal is een identiteit die is gemaakt om toepassingen, gehoste services en geautomatiseerde hulpprogramma's toegang te geven tot Azure-resources. Deze toegang wordt beperkt door de rol die wordt toegewezen aan de service-principal, zodat u kunt bepalen welke resources kunnen worden geopend en op welk niveau. Uit veiligheidsoverwegingen is het altijd aanbevolen om voor geautomatiseerde tools service-principals te gebruiken, in plaats van deze zich te laten aanmelden met een gebruikers-id.

In dit artikel worden de stappen beschreven voor het maken, verkrijgen van informatie over en het opnieuw instellen van een Azure-service-principal met de Azure CLI.

Een service-principal maken

Maak een Azure-service-principal met de opdracht az ad sp create-for-rbac.

De appId sleutels en worden weergegeven in de uitvoer van en worden gebruikt bij verificatie van de tenant az ad sp create-for-rbac service-principal. Neem hun waarden op, maar ze kunnen op elk moment worden opgehaald met az ad sp list.

Wanneer u een service-principal maakt, kiest u het type verificatie dat voor aanmelding wordt gebruikt. Er zijn twee soorten verificatie beschikbaar voor Azure-service-principals: verificatie op basis van wachtwoorden en verificatie op basis van certificaten.

Notitie

Als uw account niet over voldoende rechten beschikt om een service-principal te maken, retourneert az ad sp create-for-rbac de volgende foutmelding: 'U hebt onvoldoende bevoegdheden om de bewerking te voltooien.' Neem contact op met uw Azure Active Directory-beheerder om een service-principal te maken.

Waarschuwing

Wanneer u een Azure-service-principal maakt met behulp van de opdracht , bevat az ad sp create-for-rbac de uitvoer referenties die u moet beveiligen. Zorg ervoor dat u deze referenties niet in uw code opneemt of incheckt bij uw broncodebeheer. Als alternatief kunt u overwegen om beheerde identiteiten te gebruiken, indien beschikbaar, om te voorkomen dat u referenties hoeft te gebruiken.

We raden u aan Contributor om minimaal voor de parameter te --role gebruiken. Wijs een specifiekere rol toe en verklein het bereik tot een resource of resourcegroep om het risico op een aangetaste service-principal te beperken. Raadpleeg Stappen om een roltoewijzing toe te voegen voor meer informatie.

Verificatie op basis van een wachtwoord

Zonder verdere verificatieparameters wordt verificatie op basis van een wachtwoord gebruikt en wordt er een willekeurig wachtwoord voor u gemaakt.

az ad sp create-for-rbac --name ServicePrincipalName --role Contributor

Belangrijk

Vanaf Azure CLI 2.0.68 wordt de parameter voor het maken van een service-principal met een door de gebruiker gedefinieerd wachtwoord niet meer ondersteund om onbedoeld gebruik van zwakke wachtwoorden te --password voorkomen.

De uitvoer voor een service-principal met wachtwoordverificatie bevat de password sleutel. Zorg ervoor dat u deze waarde kopieert. Deze kan niet worden opgehaald. Als u het wachtwoord bent vergeten, stelt u de referenties voor de service-principal opnieuw in.

Verificatie op basis van certificaat

Gebruik voor verificatie op basis van certificaten het --cert argument . Dit argument vereist dat u een bestaand certificaat hebt. Zorg ervoor dat elk hulpprogramma dat gebruikmaakt van deze service-principal toegang heeft tot de persoonlijke sleutel van het certificaat. Certificaten moeten een ASCII-indeling hebben, zoals PEM, CER of DER. Geef het certificaat door als een tekenreeks of gebruik de @path indeling om het certificaat uit een bestand te laden.

Notitie

Wanneer u een PEM-bestand gebruikt, moet het CERTIFICAAT worden toegevoegd aan de PERSOONLIJKE SLEUTEL in het bestand.

az ad sp create-for-rbac --name ServicePrincipalName --role Contributor --cert "-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----"
az ad sp create-for-rbac --name ServicePrincipalName --role Contributor --cert @/path/to/cert.pem

Het --keyvault argument kan worden toegevoegd om een certificaat te gebruiken in Azure Key Vault. In dit geval --cert is de waarde de naam van het certificaat.

az ad sp create-for-rbac --name ServicePrincipalName --role Contributor --cert CertName --keyvault VaultName

Als u een zelf-ondertekend certificaat voor verificatie wilt maken, gebruikt u het --create-cert argument :

az ad sp create-for-rbac --name ServicePrincipalName --role Contributor --create-cert

Console-uitvoer:

Creating a role assignment under the scope of "/subscriptions/myId"
Please copy C:\myPath\myNewFile.pem to a safe place.
When you run 'az login', provide the file path in the --password argument
{
  "appId": "myAppId",
  "displayName": "myDisplayName",
  "fileWithCertAndPrivateKey": "C:\\myPath\\myNewFile.pem",
  "name": "http://myName",
  "password": null,
  "tenant": "myTenantId"
}

Inhoud van het nieuwe PEM-bestand:

-----BEGIN PRIVATE KEY-----
myPrivateKeyValue
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
myCertificateValue
-----END CERTIFICATE-----

Notitie

Met az ad sp create-for-rbac --create-cert de opdracht maakt u de service-principal en een PEM-bestand. Het PEM-bestand bevat een correct opgemaakte PERSOONLIJKE SLEUTEL en CERTIFICAAT.

Het argument --keyvault kan worden toegevoegd om het certificaat te bewaren in Azure Key Vault. Wanneer u --keyvault gebruikt, --cert is het argument vereist.

az ad sp create-for-rbac --name ServicePrincipalName --role Contributor --create-cert --cert CertName --keyvault VaultName

Tenzij u het certificaat in Key Vault opgeslagen, bevat de uitvoer de fileWithCertAndPrivateKey sleutel. De waarde van deze sleutel geeft aan waar het gegenereerde certificaat wordt opgeslagen. Zorg ervoor dat u het certificaat kopieert naar een veilige locatie of dat u zich niet kunt aanmelden met deze service-principal.

Als u geen toegang meer hebt tot de persoonlijke sleutel van een certificaat, stelt u de referenties voor de service-principal opnieuw in.

Certificaat ophalen uit Key Vault

Voor het certificaat dat is opgeslagen in Key Vault, haalt u het certificaat op met de persoonlijke sleutel met az keyvault secret show en converteert u het naar een PEM-bestand. In de Key Vault is de naam van het geheim van het certificaat hetzelfde als de certificaatnaam.

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

Een bestaande service-principal ophalen

Een lijst met de service-principals in een tenant kan worden opgehaald met az ad sp list. Deze opdracht retourneert standaard de eerste 100 service-principals voor uw tenant. Gebruik het argument om alle service-principals van een tenant op te --all halen. Het verkrijgen van deze lijst kan lang duren, dus het is raadzaam om de lijst te filteren met een van de volgende argumenten:

  • --display-name vraagt service-principals aan die een voorvoegsel hebben dat overeenkomen met de opgegeven naam. De weergavenaam van een service-principal is de waarde die tijdens het maken is --name ingesteld met de parameter . Als u niet hebt ingesteld tijdens het --name maken van de service-principal, is het naam voorvoegsel azure-cli- .
  • --spn filtert op de exacte overeenkomende service-principal-naam. De naam van de service-principal begint altijd met https:// . Als de waarde die u voor hebt gebruikt geen URI was, wordt deze --name waarde gevolgd door de https:// weergavenaam.
  • --show-mine vraagt alleen service-principals aan die zijn gemaakt door de aangemelde gebruiker.
  • --filter gebruikt een OData-filter en voert filteren op de server uit. Deze methode wordt aanbevolen voor het filteren van clientzijde met het argument van de --query CLI. Zie Syntaxis voor OData-expressies voor filters voor meer informatie over OData-filters.

De informatie die wordt geretourneerd voor service-principal-objecten is uitgebreid. Gebruik de querytekenreeks om alleen de informatie op te halen die nodig is om u aan te [].{id:appId, tenant:appOwnerTenantId} melden. Als u bijvoorbeeld de aanmeldingsgegevens wilt op halen voor alle service-principals die zijn gemaakt door de momenteel aangemelde gebruiker:

az ad sp list --show-mine --query "[].{id:appId, tenant:appOwnerTenantId}"

Belangrijk

az ad sp list of az ad sp show get the user and tenant, but not any authentication secrets or the authentication method. Geheimen voor certificaten in Key Vault kunnen worden opgehaald met az keyvault secret show,maar er worden standaard geen andere geheimen opgeslagen. Als u een verificatiemethode of geheim bent vergeten, stelt u de referenties van de service-principal opnieuw in.

Service-principalrollen beheren

De Azure CLI heeft de volgende opdrachten voor het beheren van roltoewijzingen:

U wordt aangeraden minimaal de rol Inzender te gebruiken voor een service-principal. Deze rol heeft alle machtigingen om in een Azure-account te lezen en te schrijven. De rol van Lezer is beperkter en biedt alleen-lezentoegang. Zie voor meer informatie over rollen en op rollen gebaseerd toegangsbeheer (RBAC) RBAC: Ingebouwde rollen.

In dit voorbeeld wordt de rol Lezer toegevoegd en de rol Inzender verwijderd:

az role assignment create --assignee APP_ID --role Reader
az role assignment delete --assignee APP_ID --role Contributor

Notitie

Als uw account niet beschikt over machtigingen om een rol toe te wijzen, wordt er een foutmelding weergegeven. Hierin staat dat uw account niet voldoende machtigingen heeft om de actie 'Microsoft.Authorization/roleAssignments/write' uit te voeren. Neem contact op met uw Azure Active Directory-beheerder om rollen te beheren.

Als u een rol toevoegt, worden eerder toegewezen machtigingen niet beperkt. Wanneer de machtigingen van een service-principal worden beperkt, moet de rol Inzender worden verwijderd.

De wijzigingen kunnen worden geverifieerd door de toegewezen rollen in een lijst weer te geven:

az role assignment list --assignee APP_ID

Aanmelden met een service-principal

Test de referenties van de nieuwe service-principal en de machtigingen door u met deze referenties aan te melden. Als u zich wilt aanmelden met een service-principal, hebt u de appId tenant referenties , en nodig.

Als u zich wilt aanmelden met de service-principal met behulp van een wachtwoord, gebruikt u:

az login --service-principal --username APP_ID --password PASSWORD --tenant TENANT_ID

Als u zich wilt aanmelden met een certificaat, moet het lokaal beschikbaar zijn als PEM- of DER-bestand, in ASCII-indeling. Wanneer u een PEM-bestand gebruikt, moeten de PERSOONLIJKE SLEUTEL en het CERTIFICAAT samen in het bestand worden toegevoegd.

az login --service-principal --username APP_ID --tenant TENANT_ID --password /path/to/cert

Zie Aanmelden met de Azure CLIvoor meer informatie over het aanmelden met een service-principal.

Een resource maken met behulp van een service-principal

In de volgende sectie vindt u een voorbeeld van het maken van een resource voor Azure Storage met een service-principal, met behulp van de volgende opdrachten:

Als u zich wilt aanmelden met een service-principal, hebt u de , en als antwoord geretourneerd bij het maken appId tenant van uw password service-principal.

  1. Meld u aan als de service-principal.

    az login --service-principal --username APP_ID --password PASSWORD --tenant TENANT_ID
    
  2. Maak een resourcegroep voor alle resources die worden gebruikt voor hetzelfde quickstart-, zelfstudie- of ontwikkelingsproject.

    az group create --location WESTUS --name MY_RESOURCE_GROUP
    
  3. Maak een resource voor een Azure-service. Vervang <SERVICENAME> door de naam van de Azure-service.

    Voor Azure Storage zijn geldige waarden voor de <KIND> parameter:

    • BlobStorage
    • BlockBlobStorage
    • FileStorage
    • Storage
    • StorageV2
    az storage account create --name MY_RESOURCE_<SERVICENAME> --resource-group MY_RESOURCE_GROUP --kind <KIND> --sku F0 --location WESTUS --yes
    
  4. Haal resourcesleutels op voor de nieuwe resource, die u in uw code gebruikt om te verifiëren bij de Azure-service.

    az storage account keys list --name MY_RESOURCE_<SERVICENAME> --resource-group MY_RESOURCE_GROUP
    

Referenties opnieuw instellen

Als u de referenties voor een service-principal bent vergeten, gebruikt u az ad sp credential reset. De opdracht reset heeft dezelfde argumenten als az ad sp create-for-rbac .

az ad sp credential reset --name APP_ID

Zie ook