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-namebegä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--nameparametern när den skapas. Om du inte konfigurerade när--namedu skapade tjänstens huvudnamn är namnprefixetazure-cli-.--spnfiltrerar på exakt matchning av tjänstens huvudnamn. Tjänstens huvudnamn börjar alltid medhttps://. Om värdet som du använde--nameför inte var en URI följs det här värdet avhttps://visningsnamnet.--show-minebegä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--queryargument. 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.
Logga in som tjänstens huvudnamn.
az login --service-principal --username APP_ID --password PASSWORD --tenant TENANT_IDSkapa 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_GROUPSkapa 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 --yesHä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