Dela via


Logga in på Azure PowerShell icke-interaktivt för automatiseringsscenarier

Ett tjänsthuvudkonto i Azure är ett icke-interaktivt konto som ger en identitet som används av applikationer, tjänster och automatiseringsverktyg för åtkomst till specifika Azure-resurser. Att autentisera med tjänstens huvudnamn är det bästa sättet att skriva säkra skript eftersom de fungerar som en säkerhetsidentitet med tilldelade behörigheter som styr vilka åtgärder som kan utföras och vilka resurser som kan nås. Tjänsthuvudnamn hjälper till att på ett säkert sätt automatisera hanteringen av uppgifter utan att använda personliga användarkonton, vilket möjliggör en säkrare och mer hanterbar åtkomst till Azure-resurser. Precis som andra användarkonton hanterar du deras behörigheter med Microsoft Entra. Genom att endast ge tjänstens huvudnamn de behörigheter som krävs förblir dina automatiseringsskript säkra.

Förutsättningar

Logga in med en hanterad identitet

Hanterade identiteter är en särskild typ av tjänsthuvudnamn som tillhandahåller Azure-tjänster med en automatiskt hanterad identitet. Att använda den här typen av identitet kräver inte lagring av autentiseringsuppgifter i konfiguration eller kod för att autentisera till någon Azure-tjänst som stöder hanterade identiteter.

Det finns två typer av hanterade identiteter:

  • Systemtilldelad hanterad identitet
  • Användartilldelad hanterad identitet

Hanterade identiteter är ett säkert sätt att kommunicera med andra Azure-tjänster utan att utvecklare behöver hantera autentiseringsuppgifter. De hjälper också till att minska risken för läckage av autentiseringsuppgifter.

Så här fungerar hanterade identiteter i verkliga scenarier:

  • Azure hanterar automatiskt skapandet och borttagningen av de autentiseringsuppgifter som används av den hanterade identiteten.
  • En Azure-tjänst som är aktiverad med en hanterad identitet kan komma åt andra tjänster på ett säkert sätt, till exempel Azure Key Vault, Azure SQL Database, Azure Blob Storage osv. med hjälp av Microsoft Entra-token.
  • Den här identiteten hanteras direkt i Azure utan ytterligare etablering.

Hanterade identiteter förenklar säkerhetsmodellen genom att undvika behovet av att lagra och hantera autentiseringsuppgifter, och de spelar en avgörande roll i säkra molnåtgärder genom att minska risken för hantering av hemligheter.

Systemtilldelad hanterad identitet

Azure skapar automatiskt en systemtilldelad hanterad identitet för en Azure-tjänstinstans (till exempel en virtuell Azure-dator, App Service eller Azure Functions). När tjänstinstansen tas bort rensar Azure automatiskt autentiseringsuppgifterna och identiteten som är associerad med tjänsten.

Följande exempel ansluter med hjälp av en systemtilldelad hanterad identitet i värdmiljön. Om den körs på en virtuell dator med en tilldelad hanterad identitet kan koden logga in med den tilldelade identiteten.

 Connect-AzAccount -Identity

Användartilldelad hanterad identitet

En användartilldelad hanterad identitet är en identitet som du skapar och hanterar i Microsoft Entra. Den kan tilldelas till en eller flera Azure-tjänstinstanser. Livscykeln för en användartilldelad hanterad identitet hanteras separat från de tjänstinstanser som den har tilldelats.

När du använder en användartilldelad hanterad identitet måste du ange parametern AccountId och parametern Identity, enligt följande exempel.

 Connect-AzAccount -Identity -AccountId <user-assigned-identity-clientId-or-resourceId>

Följande kommandon ansluter med hjälp av den hanterade identiteten för myUserAssignedIdentity. Den lägger till den användartilldelade identiteten till den virtuella datorn och ansluter sedan med hjälp av ClientId- för den användartilldelade identiteten.

$identity = Get-AzUserAssignedIdentity -ResourceGroupName myResourceGroup -Name myUserAssignedIdentity
Get-AzVM -ResourceGroupName contoso -Name testvm | Update-AzVM -IdentityType UserAssigned -IdentityId $identity.Id
Connect-AzAccount -Identity -AccountId $identity.ClientId # Run on the virtual machine
Account                              SubscriptionName TenantId                             Environment
-------                              ---------------- --------                             -----------
00000000-0000-0000-0000-000000000000 My Subscription  00000000-0000-0000-0000-000000000000 AzureCloud

Mer information finns i Konfigurera hanterade identiteter för Azure-resurser på en virtuell Azure-dator.

Logga in med tjänstens huvudnamn

Om du vill logga in med tjänstens huvudnamn använder du parametern ServicePrincipal för cmdleten Connect-AzAccount. Du behöver också följande information för tjänstens huvudnamn:

  • AppId
  • Inloggningsuppgifter eller åtkomst till certifikatet som används för att skapa tjänstens huvudnamn
  • Hyresgäst-ID

Hur du loggar in med tjänstens huvudnamn beror på om det är konfigurerat för certifikatbaserad eller lösenordsbaserad autentisering.

Certifikatbaserad autentisering

Information om hur du skapar ett huvudnamn för tjänsten för Azure PowerShell finns i Skapa ett Huvudnamn för Azure-tjänsten med Azure PowerShell.

Certifikatbaserad autentisering kräver att Azure PowerShell hämtar information från ett lokalt certifikatarkiv baserat på ett tumavtryck för certifikatet.

Connect-AzAccount -ApplicationId $appId -Tenant $tenantId -CertificateThumbprint <thumbprint>

När du använder tjänstens huvudnamn i stället för ett registrerat program anger du parametern ServicePrincipal och anger tjänstens huvudnamns AppId som värde för parametern ApplicationId.

Connect-AzAccount -ServicePrincipal -ApplicationId $servicePrincipalId -Tenant $tenantId -CertificateThumbprint <thumbprint>

I Windows PowerShell 5.1 kan certifikatarkivet hanteras och inspekteras med modulen PKI. För PowerShell 7.x och senare är processen annorlunda. Följande skript visar hur du importerar ett befintligt certifikat till certifikatarkivet som är tillgängligt för PowerShell.

Importera ett certifikat i PowerShell 7.x och senare

# Import a PFX
$storeName = [System.Security.Cryptography.X509Certificates.StoreName]::My
$storeLocation = [System.Security.Cryptography.X509Certificates.StoreLocation]::CurrentUser
$store = [System.Security.Cryptography.X509Certificates.X509Store]::new($storeName, $storeLocation)
$certPath = <path to certificate>
$credentials = Get-Credential -Message "Provide PFX private key password"
$flag = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable
$certificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($certPath, $credentials.Password, $flag)
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
$store.Add($Certificate)
$store.Close()

Importera ett certifikat i Windows PowerShell 5.1

# Import a PFX
$credentials = Get-Credential -Message 'Provide PFX private key password'
Import-PfxCertificate -FilePath <path to certificate> -Password $credentials.Password -CertStoreLocation cert:\CurrentUser\My

Lösenordsbaserad autentisering

Skapa ett huvudnamn för tjänsten som ska användas med exemplen i det här avsnittet. Mer information om hur du skapar tjänstens huvudnamn finns i Skapa ett Huvudnamn för Azure-tjänsten med Azure PowerShell.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

Försiktighet

Den angivna hemligheten för tjänstens huvudnamn lagras i filen AzureRmContext.json i användarprofilen ($env:USERPROFILE\.Azure). Se till att den här katalogen har rätt skydd.

Om du vill hämta autentiseringsuppgifterna för tjänstens huvudnamn som ett objekt använder du cmdleten Get-Credential. Den här cmdleten frågar efter ett användarnamn och lösenord. Använd tjänstens huvudnamns AppId för användarnamnet och konvertera dess secret till oformaterad text för lösenordet.

# Retrieve the plain text password for use with Get-Credential in the next command.
$sp.PasswordCredentials.SecretText

$pscredential = Get-Credential -UserName $sp.AppId
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId

För automatiseringsscenarier måste du skapa autentiseringsuppgifter från en tjänstens huvudkontos AppId och SecretText:

$SecureStringPwd = $sp.PasswordCredentials.SecretText | ConvertTo-SecureString -AsPlainText -Force
$pscredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $sp.AppId, $SecureStringPwd
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId

Använd lämpliga metoder för lösenordslagring när du automatiserar anslutningar för service principal.

Se även