Přístup na Entra ID pomocí Service Principal
Jeden z hlavních důvodů, proč to řešit je pravděpodoně to, že Global Admins / Privilegované Role mají většinou přístup podmíněný zadáním MFA a to blokuje použití těchto účtů pro automatizace (což je dobře). Než začneme rozebírat tuto prolematiku, tak musím zmínit, že nejsem původním autorem tohoto članku a pouze jsem ho z větší části převzal od někoho jiného. Je důležité uvědomit si jako roli hrají certifikáty při ověřování. Pokud použijeme pro ověření Service Principal certifikát, tak ztráta kontroly nad soukromým klíčem vede ke ztrátě kontroly nad Identity Principal..
Než budeme pokračovat, raději si spusťte PowerShell ISE v elevovaném režimu, protože některé operacu budou elevaci přímo vyžadovat a mohlo by dojít k situaci, že nebudete moct dál pokračovat v postupu.
Budete muset iniciovat připojení k Entra ID což budepotřebovat PowerShell modul AzureAD nebo AzureADPreview. Ať už použijete jakýkoliv z těchto modulů , použijte tyto příkazy:
import-module azuread
# or import-module azureadpreview
connect-azuread -tenantID IDoftenant
Následně nadefinujte $pwd proměnnou, která bude obsahovat heslo k pfx souboru.
$pwd = "plaintext password"
Vytvořte složku, kde bude pfx soubor dočasně uložen, v tomto příkladu jsem použil cestu C:\temp. Dále nedefinujte -DNSName hodnotou, která reprezentuje jméno tenantu.
$notAfter = (Get-Date).AddMonths(6) # Valid for 6 months
$thumb = (New-SelfSignedCertificate -DnsName "mytestdomain.onmicrosoft.com" -CertStoreLocation "cert:\LocalMachine\My" -KeyExportPolicy Exportable -Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" -NotAfter $notAfter).Thumbprint
$pwd = ConvertTo-SecureString -String $pwd -Force -AsPlainText
Export-PfxCertificate -cert "cert:\localmachine\my\$thumb" -FilePath c:\temp\examplecert.pfx -Password $pwd
Načtěte certifikát, aby mohl být použitý v Entra ID
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate("C:\temp\examplecert.pfx", $pwd)
$keyValue = [System.Convert]::ToBase64String($cert.GetRawCertData())
Prosím upravte hodnotu IdentifierUris tak, aby to odpovídal jménu tenantu. Upravte DisplayName and CuctomeKeyIdentifier podle potřeby.
$application = New-AzureADApplication -DisplayName "test123" -IdentifierUris "https://mytestdomain.onmicrosoft.com"
New-AzureADApplicationKeyCredential -ObjectId $application.ObjectId -CustomKeyIdentifier "Test123" -Type AsymmetricX509Cert -Usage Verify -Value $keyValue -EndDate $notAfter
Připravte Service Principle pro novou aplikaci
$sp=New-AzureADServicePrincipal -AppId $application.AppId
Teď nastavíme roli pro naši novou aplikaci. Můžete zvolit jakoukoliv roli, role lze vylistovat i pomocí následujicího commandletu. V mém případě budu potřebovat roli Global Administrator, proto vyberu roli "Global Admins" .
Get-AzureADDirectoryRole
Zde je už příkaz na přidání role.
Add-AzureADDirectoryRoleMember -ObjectId (Get-AzureADDirectoryRole | where-object {$_.DisplayName -eq "Global Administrator"}).Objectid -RefObjectId $sp.ObjectId
Pro přidáni do tentantu můžete použít násedujicí kód, prosim upravte:
- YourTenantID (Tenant ID Vašeho tenantu)
- YourApplicationID (v mém případě bych získal toto ID pomocí příkazu Get-AzureADApplication -SearchString „test123“)
- YourCertThumbprint (ten získáte tak že otevřete certifikáty počítače, následně poklepáte na certifikát, který jsme dříve vytvořili, kliknete na Details a thumbprint naleznete v poli Thumbprint)
Connect-AzureAD -TenantId YourTenantID -ApplicationId YourApplicationID -CertificateThumbprint YourCertThumbprint
Původní zdroj: https://learn.microsoft.com/en-us/powershell/azure/active-directory/signing-in-service-principal?view=azureadps-2.0