Udostępnij za pośrednictwem


Zaloguj się do Azure PowerShell w trybie nieinteraktywnym dla scenariuszy automatyzacji

Jednostka usługi na platformie Azure to nieinteraktywne konto, które zapewnia tożsamość używaną przez aplikacje, usługi i narzędzia automatyzacji do uzyskiwania dostępu do określonych zasobów platformy Azure. Uwierzytelnianie przy użyciu głównej jednostki usługowej to najlepszy sposób na tworzenie bezpiecznych skryptów. Działa ona jako tożsamość zabezpieczeń z przypisanymi uprawnieniami, które określają, jakie działania można podjąć i do jakich zasobów uzyskać dostęp. Jednostki usług pomagają bezpiecznie automatyzować zadania zarządzania bez korzystania z kont użytkowników osobistych, ułatwiając bezpieczniejszy i możliwy do zarządzania dostęp do zasobów platformy Azure. Podobnie jak w przypadku innych kont użytkowników, zarządzasz ich uprawnieniami w firmie Microsoft Entra. Przyznając zasadniczemu użytkownikowi tylko niezbędne uprawnienia, twoje skrypty automatyzacji pozostają bezpieczne.

Warunki wstępne

Logowanie przy użyciu tożsamości zarządzanej

Tożsamości zarządzane to specjalny typ jednostki usługi, która zapewnia usługom platformy Azure automatyczną tożsamość zarządzaną. Użycie tego typu tożsamości nie wymaga przechowywania poświadczeń w konfiguracji ani kodzie w celu uwierzytelniania w dowolnej usłudze platformy Azure obsługującej tożsamości zarządzane.

Istnieją dwa typy tożsamości zarządzanych:

  • Tożsamość zarządzana przypisana przez system
  • Tożsamość zarządzana przypisana przez użytkownika

Tożsamości zarządzane zapewniają bezpieczny sposób komunikowania się z innymi usługami platformy Azure bez konieczności zarządzania poświadczeniami przez deweloperów. Pomagają one również zmniejszyć ryzyko wycieków poświadczeń.

Oto jak działają tożsamości zarządzane w rzeczywistych scenariuszach:

  • Platforma Azure automatycznie zarządza tworzeniem i usuwaniem poświadczeń używanych przez tożsamość zarządzaną.
  • Usługa platformy Azure z włączoną tożsamością zarządzaną może bezpiecznie uzyskiwać dostęp do innych usług, takich jak Azure Key Vault, Azure SQL Database, Azure Blob Storage itp., przy użyciu tokenów firmy Microsoft Entra.
  • Ta tożsamość jest zarządzana bezpośrednio na platformie Azure bez konieczności dodatkowej aprowizacji.

Tożsamości zarządzane upraszczają model zabezpieczeń, unikając konieczności przechowywania poświadczeń i zarządzania nimi, a także odgrywają kluczową rolę w bezpiecznych operacjach w chmurze, zmniejszając ryzyko związane z obsługą wpisów tajnych.

Tożsamość zarządzana przypisana przez system

Platforma Azure automatycznie tworzy tożsamość zarządzaną przydzielaną przez system dla instancji usługi Azure (na przykład maszyny wirtualnej Azure, usługi App Service lub usługi Azure Functions). Po usunięciu wystąpienia usługi platforma Azure automatycznie czyści poświadczenia oraz tożsamość skojarzoną z tą usługą.

W poniższym przykładzie nawiązano połączenie przy użyciu przypisanej przez system tożsamości zarządzanej środowiska hosta. Jeśli jest wykonywana na maszynie wirtualnej z przypisaną tożsamością zarządzaną, umożliwia kodowi zalogowanie się przy użyciu przypisanej tożsamości.

 Connect-AzAccount -Identity

Tożsamość zarządzana przypisana przez użytkownika

Tożsamość zarządzana przypisana przez użytkownika to tożsamość tworzona i zarządzana w usłudze Microsoft Entra. Można go przypisać do jednego lub więcej wystąpień usługi platformy Azure. Cykl życia zarządzanej tożsamości przypisanej przez użytkownika jest zarządzany niezależnie od instancji usług, do których jest przypisana.

W przypadku korzystania z tożsamości zarządzanej przypisanej przez użytkownika należy określić parametr AccountId i parametr Identity, jak pokazano w poniższym przykładzie.

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

Następujące polecenia łączą się przy użyciu tożsamości zarządzanej myUserAssignedIdentity. Dodaje tożsamość przypisaną przez użytkownika do maszyny wirtualnej, a następnie nawiązuje połączenie przy użyciu ClientId tożsamości przypisanej przez użytkownika.

$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

Aby uzyskać więcej informacji, zobacz Konfigurowanie tożsamości zarządzanych dla zasobów platformy Azure na maszynie wirtualnej platformy Azure.

Logowanie przy użyciu jednostki usługi

Aby zalogować się przy użyciu jednostki usługi, użyj parametru ServicePrincipal cmdletu Connect-AzAccount. Potrzebne będą również następujące informacje dla zasadniczego podmiotu usługi:

  • Identyfikator aplikacji
  • Poświadczenia logowania lub dostęp do certyfikatu użytego do utworzenia jednostki usługi
  • Identyfikator dzierżawy

Sposób logowania przy użyciu jednostki usługi zależy od tego, czy jest on skonfigurowany do uwierzytelniania opartego na certyfikatach, czy opartego na hasłach.

Uwierzytelnianie oparte na certyfikatach

Aby dowiedzieć się, jak utworzyć jednostkę usługi dla programu Azure PowerShell, zobacz Tworzenie jednostki usługi platformy Azure przy użyciu programu Azure PowerShell.

Uwierzytelnianie oparte na certyfikatach wymaga, aby program Azure PowerShell pobierał informacje z lokalnego magazynu certyfikatów na podstawie odcisku palca certyfikatu.

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

W przypadku korzystania z jednostki usługi zamiast zarejestrowanej aplikacji określ parametr ServicePrincipal i podaj identyfikator AppId jednostki usługi jako wartość parametru ApplicationId.

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

W programie Windows PowerShell 5.1 magazyn certyfikatów można zarządzać i sprawdzać za pomocą modułu PKI. W przypadku programu PowerShell w wersji 7.x lub nowszej proces jest inny. Poniższe skrypty pokazują, jak zaimportować istniejący certyfikat do magazynu certyfikatów dostępnego dla programu PowerShell.

Importowanie certyfikatu w programie PowerShell 7.x lub nowszym

# 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()

Importowanie certyfikatu w programie 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

Uwierzytelnianie oparte na hasłach

Utwórz zasadę usługi do użycia z przykładami w tej sekcji. Aby uzyskać więcej informacji na temat tworzenia jednostek usługi, zobacz Tworzenie jednostki usługi platformy Azure przy użyciu programu Azure PowerShell.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

Ostrożność

Podany tajny klucz jednostki usługi jest przechowywany w pliku AzureRmContext.json w twoim profilu użytkownika ($env:USERPROFILE\.Azure). Upewnij się, że ten katalog ma odpowiednie zabezpieczenia.

Aby otrzymać poświadczenia jednostki usługi w formie obiektu, użyj polecenia cmdlet Get-Credential. To polecenie cmdlet wyświetla monit o podanie nazwy użytkownika i hasła. Użyj AppId głównego składnika usługi jako nazwy użytkownika i przekonwertuj jego secret na hasło w zwykłym tekście.

# 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

W przypadku scenariuszy automatyzacji należy utworzyć poświadczenia na podstawie zasobu usługi AppId i 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

Podczas automatyzowania połączeń z jednostką usługi należy stosować odpowiednie rozwiązania dotyczące magazynu haseł.

Zobacz też