Skapa ett huvudnamn för Azure-tjänsten med Azure CLI

Automatiserade verktyg som använder Azure-tjänster bör alltid ha begränsad behörighet. Azure erbjuder tjänstens huvudnamn i stället för att programmen loggar in som användare med fullständig behörighet.

Vad är azure-tjänstens huvudnamn?

Ett huvudnamn för tjänsten i Azure är en identitet som skapas för användning med program, värdbaserade tjänster och automatiserade verktyg för att tillgång till Azure-resurser. Åtkomsten begränsas av de roller som tilldelas tjänstens huvudnamn, vilket ger dig kontroll över vilka resurser som kan nås och på vilken nivå. Av säkerhetsskäl rekommenderar vi att du alltid använder tjänstens huvudnamn med automatiserade verktyg i stället för att tillåta inloggning med en användaridentitet.

Den här artikeln visar hur du skapar, hämtar information om och återställer ett huvudnamn för Azure-tjänsten med Azure CLI.

1. Skapa ett huvudnamn för tjänsten

Skapa ett huvudnamn för Azure-tjänsten med kommandot az ad sp create-for-rbac.

Nycklarna appId och visas i tenant utdata för och används i autentisering av az ad sp create-for-rbac tjänstens huvudnamn. Registrera sina värden, men de kan hämtas när som helst med az ad sp list.

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 för Azure-tjänstens huvudnamn: lösenordsbaserad autentisering och certifikatbaserad autentisering.

Anteckning

Om ditt konto inte har behörighet att skapa ett huvudnamn för tjänsten visar az ad sp create-for-rbac ett felmeddelande om att du inte har rätt behörigheter för att slutföra åtgärden. Kontakta Azure Active Directory-administratören om du vill skapa ett huvudnamn för tjänsten.

Varning

När du skapar ett huvudnamn för Azure-tjänsten az ad sp create-for-rbac med kommandot innehåller utdata autentiseringsuppgifter som du måste skydda. Se till att du inte inkluderar dessa autentiseringsuppgifter i din kod eller kontrollera autentiseringsuppgifterna i källkontrollen. Alternativt kan du överväga att använda hanterade identiteter om de är tillgängliga för att undvika att behöva använda autentiseringsuppgifter.

Vi rekommenderar att Contributor du använder som minimum för --role parametern . Om du vill minska risken för att tjänstens huvudnamn komprometteras tilldelar du en mer specifik roll och begränsar omfånget för en resurs eller resursgrupp. Mer information finns i Steg för tillägg av en rolltilldelning.

Lösenordsbaserad autentisering

Om inga autentiseringsparametrar finns används lösenordsbaserad autentisering, och ett slumpmässigt lösenord skapas åt dig.

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

Viktigt

Från och med Azure CLI 2.0.68 stöds inte längre parametern för att skapa ett huvudnamn för tjänsten med ett användardefinierat lösenord för att förhindra oavsiktlig användning av --password svaga lösenord.

Utdata för tjänstens huvudnamn med lösenordsautentisering innehåller password nyckeln. Se till att du kopierar det här värdet – det kan inte hämtas. Om du glömmer lösenordet återställer du autentiseringsuppgifterna för tjänstens huvudnamn.

Certifikatbaserad autentisering

Använd argumentet för certifikatbaserad --cert autentisering. Det här argumentet kräver att du har ett befintligt certifikat. Kontrollera att alla verktyg som använder tjänstens huvudnamn har åtkomst till certifikatets privata nyckel. Certifikaten ska ha ETT ASCII-format, till exempel PEM, CER eller DER. Skicka certifikatet som en sträng eller använd formatet @path för att läsa in certifikatet från en fil.

Anteckning

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

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

Argumentet --keyvault kan läggas till för att använda ett certifikat i Azure Key Vault. I det här fallet --cert är värdet namnet på certifikatet.

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

Om du vill skapa ett själv signerat certifikat för autentisering använder du --create-cert argumentet :

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

Konsolutdata:

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

Innehållet i den nya PEM-filen:

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

Anteckning

Kommandot az ad sp create-for-rbac --create-cert skapar tjänstens huvudnamn och en PEM-fil. PEM-filen innehåller en korrekt formaterad PRIVAT NYCKEL och CERTIFIKAT.

Argumentet --keyvault kan läggas till för att lagra certifikatet i Azure Key Vault. När du --keyvault använder --cert krävs argumentet.

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

Om du inte lagrar certifikatet Key Vault innehåller utdata fileWithCertAndPrivateKey nyckeln. Värdet för den här nyckeln visar var det genererade certifikatet lagras. Se till att du kopierar certifikatet till en säker plats eller att du inte kan logga in med tjänstens huvudnamn.

Om du förlorar åtkomsten till ett certifikats privata nyckel återställer du autentiseringsuppgifterna för tjänstens huvudnamn.

Hämta certifikat från Key Vault

För certifikat som lagras Key Vault hämtar du certifikatet med dess privata nyckel med az keyvault secret show och konverterar det till en PEM-fil. I Key Vault är namnet på certifikatets hemlighet samma 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: -out cert.pem -nodes

2. Hämta ett befintligt huvudnamn för tjänsten

En lista över tjänstens huvudnamn i en klientorganisation kan hämtas med az ad sp list. Som standard returnerar det här kommandot de första 100 tjänsthuvudnamnen för din klientorganisation. Om du vill hämta alla tjänsthuvudnamn för en klient använder du --all argumentet . Det kan ta lång tid att hämta listan, så vi rekommenderar att du filtrerar listan med något av följande argument:

  • --display-name begär tjänstens huvudnamn som har ett prefix som matchar det angivna namnet. Visningsnamnet för ett huvudnamn för tjänsten är det värde som anges med --name parametern när den skapas. Om du inte konfigurerade när --name du skapade tjänstens huvudnamn är namnprefixet azure-cli- .
  • --spn filtrerar på exakt matchning av tjänstens huvudnamn. Tjänstens huvudnamn börjar alltid med https:// . Om värdet som du använde --name för inte var en URI följs det här värdet av https:// visningsnamnet.
  • --show-mine begär endast tjänstens huvudnamn som skapats av den inloggade användaren.
  • --filtertar ett OData-filter och utför filtrering på serversidan. Den här metoden rekommenderas för filtrering på klientsidan med CLI:s --query argument. Mer information om OData-filter finns i OData-uttryckssyntax för filter.

Informationen som returneras för tjänstens huvudnamnsobjekt är utförlig. Om du bara vill hämta den information som krävs för inloggning använder du frågesträngen [].{id:appId, tenant:appOwnerTenantId} . Om du till exempel vill hämta inloggningsinformationen för alla tjänsthuvudnamn som skapats av den inloggade användaren:

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

Viktigt

az ad sp list eller az ad sp show get the user and tenant, but not any authentication secrets or the authentication method. Hemligheter för certifikat i Key Vault kan hämtas med az keyvault secret show, men inga andra hemligheter lagras som standard. Om du glömmer en autentiseringsmetod eller hemlighet återställer du autentiseringsuppgifterna för tjänstens huvudnamn.

3. Hantera roller för tjänstens huvudnamn

Azure CLI har följande kommandon för att hantera rolltilldelningar:

Vi rekommenderar att du minst använder rollen Deltagare för tjänstens huvudnamn. Den här rollen har fullständig behörighet att läsa och skriva till ett Azure-konto. Rollen Läsare är mer begränsad och ger endast läsåtkomst. Mer information om rollbaserad åtkomstkontroll (RBAC) och roller finns i RBAC: inbyggda roller.

Det här exemplet lägger till rollen Läsare och tar bort rollen Deltagare:

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

Anteckning

Om ditt konto inte har behörighet att tilldela en roll visas ett felmeddelande om att kontot inte har behörighet att utföra åtgärden "Microsoft.Authorization/roleAssignments/write". Kontakta Azure Active Directory-administratören om du vill hantera roller.

När en roll läggs till begränsas inte tidigare tilldelade behörigheter. När du begränsar behörigheter för tjänstens huvudnamn bör rollen Deltagare tas bort.

Du bekräftar ändringarna genom att ange de roller som är tilldelade:

az role assignment list --assignee APP_ID

4. Logga in med ett huvudnamn för tjänsten

Testa det nya tjänsthuvudnamnets autentiseringsuppgifter och behörigheter genom att logga in. Om du vill logga in med ett huvudnamn för tjänsten behöver du appId tenant autentiseringsuppgifterna , och .

Så här loggar du in med ett huvudnamn för tjänsten med lösenord:

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

Om du vill logga in med ett certifikat måste det vara tillgängligt lokalt som en PEM- eller DER-fil i ASCII-format. När du använder en PEM-fil måste den PRIVATA NYCKELN och CERTIFIKATET läggas till tillsammans i filen.

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

Mer information om hur du loggar in med ett huvudnamn för tjänsten finns i Logga in med Azure CLI.

5. Skapa en resurs med hjälp av tjänstens huvudnamn

Följande avsnitt innehåller ett exempel på hur du skapar en resurs för Azure Storage med ett huvudnamn för tjänsten med hjälp av följande kommandon:

Om du vill logga in med ett huvudnamn för tjänsten behöver du appId tenant , och password returneras som svar när du skapade tjänstens huvudnamn.

  1. Logga in som tjänstens huvudnamn.

    az login --service-principal --username APP_ID --password PASSWORD --tenant TENANT_ID
    
  2. Skapa en resursgrupp för alla resurser som används för samma snabbstart, självstudie eller utvecklingsprojekt.

    az group create --location WESTUS --name MY_RESOURCE_GROUP
    
  3. Skapa en resurs till en Azure-tjänst. Ersätt <SERVICENAME> med namnet på Azure-tjänsten.

    Till Azure Storage är giltiga värden <KIND> för parametern:

    • 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. Hämta resursnycklar för den nya resursen, som du använder i koden för att autentisera till Azure-tjänsten.

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

6. Återställ autentiseringsuppgifter

Om du glömmer bort autentiseringsuppgifterna för ett huvudnamn för tjänsten använder du az ad sp credential reset. Återställningskommandot tar samma argument som az ad sp create-for-rbac .

az ad sp credential reset --name APP_ID

Se även