Az Azure Managed Identity használata
Az Azure-erőforrásoknak, például az Azure Automationnak vagy az Azure Virtual Machines-nek gyakran hozzá kell férniük más erőforrásokhoz. Például, amikor egy Runbookból éri el az Azure AD-t. A hozzáférés biztosításához általában fiókokra, jelszavakra vagy tanúsítványokra van szüksége. De ezeket az információkat nem szeretné a kódjában tárolni. Itt jön be az Azure Managed Identity.
Az Azure Managed Identity felügyelt identitást biztosít az Azure Resources számára az Azure AD-ben. Így egyszerűen kezelheti az engedélyeket és hitelesítheti az Azure-ban anélkül, hogy hitelesítő adatokat kellene tárolnia.
Ebben a cikkben megvizsgáljuk, hogy mik azok az Azure Managed Identities, hogyan hozhatók létre és természetesen hogyan használhatják őket. Létrehoztam egy PowerShell-szkriptet is, amely lehetővé teszi a felügyelt identitás engedélyeinek egyszerű beállítását.
Mik azok az Azure Managed Identities
Az Azure Managed Identities az Azure-erőforrásokhoz való hozzáférés biztonságos kezelésének alapvető eszköze. Ezek az identitások lehetőséget biztosítanak az Azure Applications and Services számára, hogy hitelesítési adatok tárolása és kezelése nélkül hitelesítsék és engedélyezzék magukat. Ez csökkenti a hitelesítő adatok ellopásának vagy visszaéléseinek kockázatát, mivel nem kell ellopni vagy kezelni a hitelesítő adatokat.
Úgy működnek, hogy létrehoznak egy identitást (Enterprise Application) az Azure Active Directoryban (AAD). Az identitás ezután egy adott Azure-erőforráshoz, például egy Azure Automation-fiókhoz van társítva. Az identitásspecifikus engedélyt megadhatja az Azure különböző API-jainak, például az MsGraph-nak vagy az Exchange Online-nak, akárcsak az Azure AD rendszeres vállalati alkalmazásainál. Az identitást ezután az erőforrás hitelesítésre és hozzáférés engedélyezésére használja, hitelesítő adatok nélkül.
Felügyelt identitástípusok
Az Azure Managed Identities két típusa létezik, a fő különbség a létrehozásuk és kezelésük módjában van:
| Created | Life cycle | Sharing | |
|---|---|---|---|
| System-assigned | Part of an Azure resource | Deleted when parent resource is deleted | Can only be used for one Azure resource |
| User-assigned | Standalone resource | Independent life cycle | Can be shared with more than one Azure Resource |
Srendszer által hozzárendelt felügyelt identitás
A rendszer által hozzárendelt felügyelt identitások egy adott erőforráshoz vannak kötve. Engedélyezheti őket a legtöbb Azure-szolgáltatáshoz, például virtuális gépekhez vagy automatizálási fiókokhoz. Egyedi identitást hoz létre az Azure AD-ben, amely lehetővé teszi, hogy meghatározott engedélyeket állítson be az erőforráshoz.
A rendszer által hozzárendelt identitások előnye, hogy az erőforrás törlésekor automatikusan törlődnek.
Felhasználó által hozzárendelt felügyelt identitás
A felhasználó által hozzárendelt felügyelt identitások viszont önálló Azure-erőforrások. Egy vagy több Azure-szolgáltatáshoz társíthatók. Ez nagyobb rugalmasságot és ellenőrzést biztosít az identitások kezelésében, lehetővé téve saját identitások létrehozását és kezelését, valamint több erőforráshoz való felhasználását.
Ez azt is jelenti, hogy a felhasználó által hozzárendelt identitások nem törlődnek, amikor eltávolít egy erőforrást, ami lehetővé teszi az identitás újrafelhasználását.
Azure felügyelt identitás létrehozása
A felügyelt identitás létrehozásának és az engedélyek hozzárendelésének elve nagyjából ugyanaz minden Azure-szolgáltatás esetében. Az alábbi példákban felügyelt identitást fogunk létrehozni egy Azure Automation-fiókhoz. Ezt követően a runbookokon belüli identitás segítségével elérhetjük a különböző API-kat, például az MsGraph-t vagy az Exchange online-t.
Feltételezem, hogy már létrehozott egy Automation-fiókot, ha nem, akkor először olvassa el ezt a cikket a kezdéshez.
1. lépés - A rendszer által hozzárendelt felügyelt identitás engedélyezése
Az első lépés a rendszerhez rendelt felügyelt identitás engedélyezése. Ha megnyitja az Azure-szolgáltatást, ebben az esetben az Automation-fiókot, a bal oldali menüben megtalálja az Identitás elemet (lehet, hogy egy kicsit lejjebb kell görgetnie). Válassza ezt, és engedélyezze a rendszer által hozzárendelt identitást, majd kattintson a mentés gombra.
2. lépés - Szerepek kiosztása
Miután a Mentés gombra kattintott, megjelenik egy megerősítő előugró ablak. Miután megerősítette, hogy létre kíván hozni egy rendszerhez rendelt identitást, látni fogja az objektumazonosítót és az Azure-szerepkörök hozzárendelésének lehetőségét. Itt fontos, hogy ugyanazokat a szerepköröket adjuk hozzá, mint a jelenlegi Run-As-fiókunk (ha a runbookot migrálja).
- Azure Automation-fiókjában kattintson a Futtatás fiókként lehetőségre
- Nyissa meg a Futtatás mint fiókot
- Vegye figyelembe a fiókhoz jelenleg rendelt szerepeket
- Lépjen vissza az Identitás oldalra
- Kattintson az Azure-szerepkör-hozzárendelések lehetőségre
Ugyanazokat a szerepköröket fogjuk hozzárendelni a rendszer által hozzárendelt identitáshoz, mint a RunAs-fiókunkhoz.
- Kattintson a Szerepkör-hozzárendelés hozzáadása lehetőségre
- Állítsa be a hatókört
- Adja hozzá a szükséges szerepet
- Kattintson a Mentés gombra
Most már csatlakozhat például az Azure Runbookból az Azure-erőforrásokhoz. Az ehhez szükséges modulok már be vannak töltve az új automatizálási fiókokba. A meglévő automatizálási fiókokhoz azonban legalább a következő modulokat be kell töltenie:
- Az.ManagedServiceIdentity
- Az.Számlák
- Az.Automatizálás
3. lépés - Engedélyek hozzáadása
Az Azure-szerepkörök csak a többi Azure-erőforráshoz tartozó engedélyeket kezelik, de nem adnak hozzáférést a felügyelt identitásnak például az MsGraphhoz vagy az Exchange Online-hoz. Ehhez minden egyes szolgáltatáshoz engedélyt kell adnunk.
Megtekintheti a hozzárendelt engedélyeket az Azure Portalban, de nem tudunk engedélyeket hozzárendelni. Ehhez a PowerShellt kell használnunk, és meg kell adni a felügyelt identitás objektumazonosítóját.
Először nézzük meg az objektumazonosítót:
- Nyissa meg a vállalati alkalmazásokat az Azure Portalon
- Válassza az Minden alkalmazás lehetőséget
- Kattintson az Alkalmazás típusa szűrőre
- Válassza a Felügyelt identitások lehetőséget, és kattintson az Alkalmaz gombra
Most már csak a felügyelt identitások jelennek meg. Nyissa meg a korábban létrehozott identitást, és ne az objektumazonosítót:
Nyissa meg a PowerShellt a számítógépen, ellenőrizze, hogy telepítve van-e a Microsoft Graph Module, és csatlakozzon a Graphhoz a következő hatókörökkel:
# Connect to Microsoft Graph
Connect-MgGraph -Scopes "Application.Read.All","AppRoleAssignment.ReadWrite.All,RoleManagement.ReadWrite.Directory"
# Select beta profile
Select-MgProfile BetaElőször a Managed Identity Object ID-t fogjuk tárolni egy változóban, mert néhányszor használni fogjuk az alábbi szkriptekben:
$managedIdentityId = "3e4c2842-1778-407f-9b3f-2191f10874ec"
# We can also lookup the object id using the name of the managed identity:
$managedIdentityId = (Get-MgServicePrincipal -Filter "displayName eq 'LazyAutomationAccount'").idMsGraph engedélyek
Először a Graph szolgáltatási költségét fogjuk megkapni a szabványos alkalmazásazonosító alapján:
$graphApp = Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'"A Graph esetében meg kell határoznunk azokat a hatóköröket, amelyekhez engedélyre van szükségünk. Ezután az alkalmazásszerepkör megkeresésével engedélyeket adhatunk az egyes hatókörökhöz:
$graphScopes = @(
'UserAuthenticationMethod.Read.All',
'Group.ReadWrite.All',
'Directory.Read.All',
'User.ReadWrite.All'
)
ForEach($scope in $graphScopes){
$appRole = $graphApp.AppRoles | Where-Object {$_.Value -eq $scope}
New-MgServicePrincipalAppRoleAssignment -PrincipalId $managedIdentityId -ServicePrincipalId $managedIdentityId -ResourceId $graphApp.Id -AppRoleId $appRole.Id
}Most már használhatjuk például az MgGraph-ot az Azure Runbookunkban. A runbookok esetében győződjön meg arról, hogy legalább a következő modulokat hozzáadta Azure Automation-fiókjához:
- Microsoft.Graph.Authentication
- Microsoft.Graph.Users
A Graphhoz való csatlakozáshoz először csatlakoznunk kell az Azure-hoz, hogy hozzáférési jogkivonatot kaphassunk.
Jegyzet
Győződjön meg arról, hogy a következő modulok vannak betöltve az Automation-fiókjába:
- Az.ManagedServiceIdentity
- Az.Accounts
- Az.Automation
Egyébként nem fogja tudni használni a Connect- AzAccount parancsmag
try {
# Logging in to Azure.
Connect-AzAccount -Identity
# Get token and connect to MgGraph
Connect-MgGraph -AccessToken ((Get-AzAccessToken -ResourceTypeName MSGraph).token)
} catch {
Write-Error -Message $_.Exception
throw $_.Exception
}
# Test if we can get users:
Get-MgUserA Microsoft Graphhoz való csatlakozás egyszerűbbé válik a megjelenő új V2 modullal. Jelenleg előnézetben van, de a kiadás után egyszerűen csatlakozhat a Microsoft Graphhoz egy felügyelt identitás segítségével a -identity paraméter használatával.
# For System Assigned Managed Identies
Connect-MgGraph -Identity
# For User Assigned Managed Identies
Connect-MgGraph -Identity -ClientId "User_Assigned_Managed_identity_Client_Id"SharePoint Online engedélyek
A SharePoint esetében is először meg kell szereznünk a Service Principal-t, és meg kell határoznunk azokat a hatóköröket, amelyekhez engedélyt szeretnénk adni. Az alábbi PowerShell-parancsok segítségével adja hozzá a SharePoint engedélyt a kezelt identitáshoz:
$spoApp = Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0ff1-ce00-000000000000'"
$spoScopes = @(
'Sites.FullControl.All',
'TermStore.ReadWrite.All',
'User.ReadWrite.All'
)
ForEach($scope in $spoScopes){
$appRole = $spoApp.AppRoles | Where-Object {$_.Value -eq $scope}
New-MgServicePrincipalAppRoleAssignment -PrincipalId $managedIdentityId -ServicePrincipalId $managedIdentityId -ResourceId $spoApp.Id -AppRoleId $appRole.Id
}A SharePoint Online-hoz való csatlakozáshoz a runbookon belül PnP-Online modulokat kell hozzáadnia Automation-fiókjához. A PnPOnline-hoz való csatlakozás a -ManagedIdentity paraméter hozzáadásával történik:
Connect-PnPOnline -Url lazydev-admin.sharepoint.com -ManagedIdentity
# Test connection
Get-PnPTeamsTeamExchange Online
Az Exchange esetében gyakran csak a ManageAsApp szerepkörre van szükségünk. Így egyszerűen hozzáadhatjuk az engedélyt a következő parancsokkal:
$exoApp = Get-MgServicePrincipal -Filter "AppId eq '00000002-0000-0ff1-ce00-000000000000'"
$appRole = $exoApp.AppRoles | Where-Object {$_.DisplayName -eq "Manage Exchange As Application"}
$AppRoleAssignment = @{
"PrincipalId" = $managedIdentityId
"ServicePrincipalId" = $managedIdentityId
"ResourceId" = $exoApp.Id
"AppRoleId" = $appRole.Id
}
New-MgServicePrincipalAppRoleAssignment @AppRoleAssignment
Az engedélyen kívül felügyelt identitásunknak az Exchange Adminisztrátor szerepkört is meg kell adnunk. Ellenkező esetben a következő hibaüzenetet kapja:
The role assigned to application <id> isn't supported in this scenario. Please check online documentation for assigning correct Directory Roles to Azure AD Application for EXO App-Only Authentication.Hozzáadhatjuk a szerepet az MgGraph vagy az Azure Portal használatával. Ez utóbbihoz nyissa meg az Azure Active Directory > Roles and administrator oldalt. Keresse meg az Exchange-rendszergazdai szerepkört, és adja hozzá felügyelt identitását tagként. De természetesen használhatjuk a PowerShellt is:
# Make sure that you connected to Graph with the scope RoleManagement.ReadWrite.Directory
$roleId = (Get-MgRoleManagementDirectoryRoleDefinition -Filter "DisplayName eq 'Exchange Administrator'").id
New-MgRoleManagementDirectoryRoleAssignment -PrincipalId $managedIdentityId -RoleDefinitionId $roleId -DirectoryScopeId "/""Az Exchange Online kapcsolat használatához az Azure Runbookban meg kell győződnie arról, hogy a legújabb Exchange Online (EXO V3) modul van betöltve az automatizálási fiókjába. Mivel ez sokkal egyszerűbbé teszi az Exchange Online-hoz való csatlakozást a felügyelt identitásokkal:
Connect-ExchangeOnline -ManagedIdentity -Organization lazyadmin.onmicrosoft.comEngedélyek ellenőrzése
Miután hozzáadta az összes engedélyt, mindig jó ötlet ellenőrizni, hogy mindegyik hozzáadva van-e kezelt identitásához, ahogy azt elvárta. Megtekinthetjük az engedélyeket az Azure Active Directoryban:
- Nyissa meg a portal.azure.com webhelyet, és lépjen aVállalati alkalmazások oldalra az Azure AD-ben
- Kattintson a Minden alkalmazás lehetőségre
- Módosítsa az Alkalmazástípus szűrőt Kezelt identitásokra
- Válassza ki a felügyelt identitást
- Kattintson az engedélyek elemre az ellenőrzésükhöz
Felügyelt identitásengedély-szkript
Létrehoztam egy teljes szkriptet is, amely beállítja az összes engedélyt a kezelt identitásodhoz. Csak a felügyelt identitás nevét kell beállítani, vagy használhatja az identitás objektumazonosítóját. A szkript beállítja az összes szükséges engedélyt. A szkript legújabb verziója itt található a GitHub-tárhelyemben
# Change this to your Managed Identity app name:
$managedIdentityName = "LazyAutomationAccount"
# Connect to Microsoft Graph
Connect-MgGraph -Scopes "Application.Read.All","AppRoleAssignment.ReadWrite.All,RoleManagement.ReadWrite.Directory"
Select-MgProfile Beta
# Get the Managed Identity Object id
# You can find the name or object id in Azure > Automation Account > Identity
# $managedIdentityId = "<id-number-goes-here>"
$managedIdentityId = (Get-MgServicePrincipal -Filter "displayName eq $managedIdentityName").id
#
# Adding Microsoft Graph permissions
#
Write-host "Adding Microsoft Graph Permissions" -ForegroundColor Cyan
$graphApp = Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'"
# Add the required Graph scopes
$graphScopes = @(
'UserAuthenticationMethod.Read.All',
'Group.ReadWrite.All',
'Directory.Read.All',
'User.ReadWrite.All'
)
ForEach($scope in $graphScopes){
$appRole = $graphApp.AppRoles | Where-Object {$_.Value -eq $scope}
if ($null -eq $appRole) { Write-Warning "Unable to find App Role for scope $scope"; continue; }
# Check if permissions isn't already assigned
$assignedAppRole = Get-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentityId | Where-Object { $_.AppRoleId -eq $appRole.Id -and $_.ResourceDisplayName -eq "Microsoft Graph" }
if ($null -eq $assignedAppRole) {
New-MgServicePrincipalAppRoleAssignment -PrincipalId $managedIdentityId -ServicePrincipalId $managedIdentityId -ResourceId $graphApp.Id -AppRoleId $appRole.Id
}else{
write-host "Scope $scope already assigned"
}
}
#
# SharePoint Online Permissions
#
Write-host "Adding SharePoint Online Permissions" -ForegroundColor Cyan
$spoApp = Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0ff1-ce00-000000000000'"
# Add the required SPO scopes
$spoScopes = @(
'Sites.FullControl.All',
'TermStore.ReadWrite.All',
'User.ReadWrite.All'
)
ForEach($scope in $spoScopes){
$appRole = $spoApp.AppRoles | Where-Object {$_.Value -eq $scope}
if ($null -eq $appRole) { Write-Warning "Unable to find App Role for scope $scope"; continue; }
# Check if permissions isn't already assigned
$assignedAppRole = Get-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentityId | Where-Object { $_.AppRoleId -eq $appRole.Id -and $_.ResourceDisplayName -eq "Office 365 SharePoint Online"}
if ($null -eq $assignedAppRole) {
New-MgServicePrincipalAppRoleAssignment -PrincipalId $managedIdentityId -ServicePrincipalId $managedIdentityId -ResourceId $spoApp.Id -AppRoleId $appRole.Id
}else{
write-host "Scope $scope already assigned"
}
}
#
# Adding Exchange Online permissions
#
Write-host "Adding Exchange Online Permissions" -ForegroundColor Cyan
$exoApp = Get-MgServicePrincipal -Filter "AppId eq '00000002-0000-0ff1-ce00-000000000000'"
$appRole = $exoApp.AppRoles | Where-Object {$_.DisplayName -eq "Manage Exchange As Application"}
$AppRoleAssignment = @{
"PrincipalId" = $managedIdentityId
"ServicePrincipalId" = $managedIdentityId
"ResourceId" = $exoApp.Id
"AppRoleId" = $appRole.Id
}
New-MgServicePrincipalAppRoleAssignment @AppRoleAssignment
# Add Exchange Administrator Role
$roleId = (Get-MgRoleManagementDirectoryRoleDefinition -Filter "DisplayName eq 'Exchange Administrator'").id
New-MgRoleManagementDirectoryRoleAssignment -PrincipalId $managedIdentityId -RoleDefinitionId $roleId -DirectoryScopeId "/"Becsomagolás
A felügyelt identitások túl biztonságosan kezelik az Azure-erőforrásokhoz való hozzáférést. Biztonságos és egyszerű módot biztosít az erőforrásokhoz való hozzáférés kezelésére hitelesítési adatok vagy összetett biztonsági szabályzatok nélkül, ami csökkenti a hitelesítő adatok ellopásának vagy visszaéléseinek kockázatát.
A szkriptek frissítése közben győződjön meg arról, hogy az Exchange Online modul legújabb verziójára vált, és az Azure AD modult az új Microsoft Graph modulra cseréli.
Remélem tetszett ez a cikk, ha bármilyen kérdése van, csak írjon megjegyzést alább.







