Weboldal keresés

Hogyan találja ki, milyen Microsoft Graph engedélyekre van szüksége


Amikor a Microsoft Graph PowerShell SDK-val dolgozik

Mostanra tudnia kell, hogy a Microsoft azt tervezi, hogy 2022 végén vagy röviddel azután megszünteti az Azure AD és MSOL PowerShell modulokat. A visszavont modulokban lévő parancsmagok ezután is működni fognak, de nem lesz támogatásuk. A Microsoft azt javasolja, hogy frissítse a parancsfájlokat a Microsoft Graph PowerShell SDK parancsmagjainak használatára. A tényleges átalakítás gyakran abból áll, hogy meg kell találni a megfelelő parancsmagot a Microsoft parancsmag-térképében, és át kell váltani rá. A parancsmagok zökkenőmentes futtatása előtt azonban más bonyolultságok akadályozzák. Az adatokhoz való hozzáféréshez használandó megfelelő Microsoft Graph API engedélyek kitalálása csak az egyik ilyen bonyolultság.

Legkisebb engedélyű modell

Az engedélyek kezelése jelentősen eltér az Azure AD PowerShell-modul és a Microsoft Graph PowerShell SDK között. Ha a Connect-AzureAD parancsmaggal jelentkezik be, használhatja a bejelentkezéshez használt fiókhoz tartozó összes adminisztrátori engedélyt. A Graph SDK azonban a legkevesebb engedélyes modellen működik, ami azt jelenti, hogy engedélyeket kell kérnie a műveletek végrehajtásához, még akkor is, ha erősen jogosult fiókhoz csatlakozik.

A szkript Azure AD-parancsmagokról SDK-parancsmagokra való frissítésének első lépése annak mérlegelése, hogy milyen engedélyekre van szüksége a szkriptnek a feldolgozás végrehajtásához. Ez a szabály attól függetlenül érvényes, hogy hogyan használja az SDK-parancsmagokat - interaktívan, tanúsítványalapú hitelesítést használó háttérfeladaton vagy Azure Automation runbookjában. A bejelentkezett fiókoktól örökölt engedélyektől eltérően az SDK által használt engedélyek az SDK-parancsmagok futtatásához használt egyszerű szolgáltatáshoz tartoznak. Az interaktív munkamenetek esetében a szolgáltatás fő neve a Microsoft Graph

Felmerül a kérdés, hogyan lehet megtalálni a művelet végrehajtásához szükséges Microsoft Graph API engedélyeket. A célt négyféleképpen érheti el:

Találgatás és túlzott engedély

Az első módszer a találgatás és a remény megközelítése. Más szóval, adjon meg minden engedélyt, amelyet egy szkript esetleg használhat, vagy folytassa az engedélyek hozzáadását, amíg a kód le nem fut. A veszély itt az, hogy egy erősen engedélyezett szolgáltatási taghoz jut, amely vonzó célponttá válik a támadók számára. Ha interaktív munkameneteket használ az SDK-parancsmagok futtatásához, jó esély van arra, hogy a Microsoft Graph PowerShell egyszerű szolgáltatása idővel sok engedélyt szerez be, és erősen engedélyezett állapotba kerül (1. ábra). Erre a kérdésre később visszatérünk.

Használja a Graph Explorert a Graph Permissions kiemeléséhez

Ezután, ha lekérdezést futtat a Graph Explorerben, az Intéző megmutatja a lekérdezés futtatásához szükséges engedélyeket a Jogosultságok módosítása lapon (2. ábra). A megjelenített engedélykészlet minden érvényes engedélyt tartalmaz, amelyet használhat, ezért ki kell választania a legmegfelelőbb engedélyt. Ebben az esetben a lekérdezés a felhasználói fiókok készletének lekérése a bérlőben (a felhasználói fiókokkal végzett műveletek egyik alapkészlete), ezért a User.Read.All engedély jó választás.

Kiberbiztonsági kockázatkezelés az Active Directoryhoz

Fedezze fel, hogyan lehet megelőzni és helyreállítani az AD-támadásokat ezekkel a kiberbiztonsági kockázatkezelési megoldásokkal.

Olvassa el a Graph dokumentációját

Minden SDK-parancsmag a Graph-lekérdezésekből származik. A Microsoft az AutoRest nevű folyamatot használja az elérhető Graph-lekérdezések feldolgozásához és az SDK-parancsmagok létrehozásához. Ez a folyamat havonta történik az SDK új verziójának létrehozásához. A folyamat automatizált dokumentációt is létrehoz, de a géppel generált szöveg gyakran tompa és nehezen követhető, ezért gyakran visszatérek az alapul szolgáló Graph dokumentációhoz. Vegyük például a felhasználói fiókok listázását. Egy gyors keresés elvezet minket a List Users (Felhasználók listázása) oldalra, amely felsorolja a szükséges engedélyeket mind a delegált (az adatokhoz bejelentkezett felhasználóként való hozzáféréshez), mind az alkalmazáshoz (a háttérfolyamatokhoz használatos) szükséges engedélyeket. Ebben az esetben az oldal megerősíti, hogy a User.Read.All jó választás.

Használja az SDK súgóját a grafikonengedélyek azonosításához

Az SDK két parancsmagot tartalmaz, amelyek segítenek a fejlesztőknek kitalálni, milyen engedélyekre van szükségük a műveletek végrehajtásához.

  • Find-MgGraphPermission: Felsorolja a különböző műveletekhez delegált és alkalmazásengedélyeket.
  • Find-MgGraphCommand: Felsorolja a különböző típusú objektumokkal való interakcióhoz rendelkezésre álló parancsmagokat, beleértve a szükséges engedélyeket. A parancsmag úgy működik, hogy az objektum URI-jét veszi az elérhető parancsok megtalálásához.

Tegyük fel például, hogy az Azure AD-ben tárolt szervezeti információkkal szeretnék kapcsolatba lépni. Kezdhetném a Find-MgGraphPermission parancsmag futtatásával:

Find-MgGraphPermission organization | ? {$_.PermissionType -eq "Application"} | Format-List Name, Description

Name        : Organization.Read.All
Description : Allows the app to read the organization and related resources, on behalf of the signed-in user. Related resources include things like subscribed skus and tenant branding information.

Name        : Organization.ReadWrite.All
Description : Allows the app to read and write the organization and related resources, on behalf of the signed-in user. Related resources include things like subscribed skus and tenant branding information.

A parancs kimenetét az alkalmazásengedélyek szűrésére és megjelenítésére továbbítja (ugyanazok a delegált engedélyek állnak rendelkezésre). A kimenetből nyilvánvaló, hogy az Organization.Read.All engedélyt kell használnunk a szervezeti adatok (például a bérlő neve és azonosítója), valamint az Organization.ReadWrite.All olvasásához. ha frissítenünk kell egy írható beállítást.

A rövidség kedvéért fent csak az engedély nevét és leírását mutatom meg. Íme a teljes kimenet a Group.ReadWrite.All engedélyhez, amely az Azure AD-csoportok, köztük a Microsoft 365-csoportok tulajdonságainak frissítéséhez szükséges.

Id             : 62a82d76-70ea-41e2-9197-370581804d09
PermissionType : Application
Consent        : Admin
Name           : Group.ReadWrite.All
Description    : Allows the app to create groups, read all group properties and memberships, update group properties and memberships, and delete groups. Also allows the app to read and write group calendar and conversations.  All of these operations can be performed by the app without a signed-in user.

Kipróbálhatja a parancsok módosított verzióját, hogy megtudja, milyen engedélyekre van szükség a felhasználókkal, csoportokkal, az Azure AD-vel (címtár), alkalmazásokkal (alkalmazással) és így tovább.

A Find-MgGraphCommand parancsmag átadja a Graph URL egy részét, hogy megtudja, milyen SDK-parancsmagok érhetők el az adott URL-hez. Az URL olyan, mint a felhasználók vagy csoportok, amelyek az objektumkészletek kezelésére rendelkezésre álló parancsmagokat listázzák. Ha hozzáadja az {id} értéket, az azt jelenti, hogy látni szeretné az egyes objektumok feldolgozásához rendelkezésre álló parancsmagokat.

Nézzük például, milyen parancsmagok állnak rendelkezésre az egyes csoportok feldolgozásához. A parancs és kimenete az alábbiakban látható:

Find-MgGraphCommand -uri "/groups/{id}" | ? {$_.APIVersion -eq "v1.0"} | Fl Command, Method, Permissions

Command     : Get-MgGroup
Method      : GET
Permissions : {Directory.AccessAsUser.All, Directory.Read.All, Directory.ReadWrite.All, Group.Read.All...}

Command     : Remove-MgGroup
Method      : DELETE
Permissions : {Directory.AccessAsUser.All, Group.ReadWrite.All}

Command     : Update-MgGroup
Method      : PATCH
Permissions : {Directory.AccessAsUser.All, Directory.ReadWrite.All, Group.ReadWrite.All}

A grafikonnak két végpontja van, a V1.0 és a béta. A V1.0 végpont az éles verzió, míg a béta végpont fejlesztés alatt áll. Sok esetben parancsmagokat fog használni a béta végponttal, mert ezek további funkciókat biztosítanak. Ha például a Get-MgUser parancsmagot a V1.0-s végponton futtatja, az nem ad vissza semmilyen licencinformációt a fiókokhoz, de a béta-végponton futtatva igen.

Ebben az esetben a kimenetet úgy szűrtem, hogy csak a V1.0 végpontban elérhető parancsok jelenjenek meg, és láthatjuk, hogy három parancsmag érhető el egy csoport listázásához, csoport törléséhez és egy csoport tulajdonságainak frissítéséhez. Azt is láthatjuk, hogy a Group.Read.All engedély elegendő a csoportinformációk olvasásához, de egy csoport törléséhez vagy frissítéséhez Group.ReadWriteAll szükséges.

Hatáskör

Miután megtudta, hogy mely Microsoft Graph API engedélyekre van szükség ahhoz, hogy egy szkript bármilyen műveletet végrehajtson, a Connect-MgGraph parancsmag Scopes paraméterében adja meg a szükséges engedélyek készletét, amikor a Graphhoz csatlakozik. Például:

$RequiredScopes = ("Organization.ReadWrite.All”, "Directory.Read.All")
Connect-MgGraph -Scope $RequiredScopes

Interaktív munkamenetek esetén, ha a Microsoft Graph PowerShell-szolgáltatás nem rendelkezik beleegyezéssel a kért engedélyek használatához, a rendszer kérni fogja a hozzájárulást (3. ábra).

Ha engedélyezi az alkalmazás számára az engedély használatát, a munkamenet használhatja a delegált engedélyt a munkamenet időtartama alatt. A delegált engedély lényegében azt jelenti, hogy a felhasználó hozzáférhet a tulajdonában lévő adatokhoz, de nem férhet hozzá a többi felhasználó adataihoz. Az is lehetséges azonban, hogy az adatokhoz a fiókhoz rendelt adminisztrátori szerepkörök révén lehet hozzáférni. Ahogy a Microsoft a dokumentációjában kifejti, „az alkalmazás tényleges engedélyei az alkalmazás számára (beleegyezéssel) kapott delegált engedélyek és a jelenleg bejelentkezett felhasználó jogosultságai legkevésbé kiváltságos metszéspontja. .” Más szóval, ha fiókja rendszergazdai szerepkörrel rendelkezik, akkor több adathoz férhet hozzá, mintha fiókja nem.

Ha beleegyezését adja a szervezet nevében, az Entra ID hozzáadja az engedélyt az egyszerű szolgáltatáshoz, és ezt követően az összes munkamenet számára elérhetővé válik. A szolgáltatási megbízónak adott hozzájárulás egy alkalmazásengedélyre vonatkozik, ami azt jelenti, hogy a felhasználó hozzáférhet az adatokhoz a szervezet egészéből.

A csatlakozás után a következő futtatással ellenőrizheti, hogy mely engedélyek aktívak:

(Get-MgContext).Scopes

Felhalmozott grafikonengedélyek

Óvakodni kell attól, hogy a Microsoft Graph PowerShell szolgáltatási igazgató folyamatosan felhalmozza az engedélyeket. Ha el szeretné távolítani az összes engedélyt az egyszerű szolgáltatásból, ezt megteheti az Azure AD felügyeleti központon keresztül (az 1. ábrán látható módon), vagy eltávolíthatja az egyszerű szolgáltatást. Amikor ez megtörténik, az SDK észleli, hogy az egyszerű szolgáltatásnév hiányzik, amikor legközelebb valaki megpróbál bejelentkezni, és újra létrehozza (a szolgáltatás egyszerű AppId-je mindig 14d82eec-204b-4c2f-b7e8-296a70dab67e) .

Az egyszerű szolgáltatás létrehozásához csatlakozzon a Graphhoz az Application.ReadWrite.All engedéllyel, és futtassa az alábbi parancsokat:

A Remove-MgServicePrincipal parancsmag nem kér megerősítést. Szerencsére hamarosan az Azure AD bebizonyítja, hogy képes visszaállítani a szoftveresen törölt egyszerű szolgáltatásobjektumokat arra az esetre, ha hibázik.

$SDKServicePrincipalId = (Get-MgServicePrincipal -all | ? {$_.DisplayName -eq "Microsoft Graph PowerShell"}).Id
Remove-MgServicePrincipal -ServicePrincipalId $SDKServicePrincipalID

Bonyolultabb, nagyobb kontroll

A Microsoft Graph PowerShell SDK-val való munkavégzés több figyelmet igényel az engedélyekre, mint a PowerShell-modulok esetében (eddig). Az adminisztrátori engedélyek vállalása helyett engedélyeket kell kérnie, és csak a szükséges készletet kell használnia. Egy kis megszokást igényel, és része az Azure AD- és MSOL-modulokon alapuló szkriptek konvertálásának ellenőrzőlistájának. Mint a legtöbb más dolog az életben, idővel megszokjuk a kapcsolatok engedélykezelését.

Kapcsolódó cikkek