Weboldal keresés

Csatlakozás a Microsoft Graphhoz a PowerShell SDK használatával


Csatlakozzon a grafikonhoz biztonságos és hatékony módon

Frissítve: 2023. augusztus 1.

Egy korábbi cikkben tárgyaltam a Microsoft Graph SDK for PowerShell parancsmagjainak használatát az Azure AD modul licenckezelési parancsmagjainak lecserélésére, mielőtt azok 2022. június 30-án megszűnnének (frissítés: a Microsoft ezt a dátumot márciusra tette át 2024). Mint kiderült, néhány Azure AD-parancsmag konvertálása olyan parancsmagokra való cserével, mint a Get-MgUser és a Set-MgUserLicense, nem különösebben nehéz (ha volt, akkor én nem tudná megtenni). Azonban egy új modul bevezetése az éles környezetben használt PowerShell keverékébe mindig felvet néhány kérdést és aggályt, amelyek közül nem utolsósorban a biztonság.

Van jó és helytelen módja a Graph SDK-parancsmagok tesztelési és éles környezetben való használatának. Dióhéjban, a parancsmagok interaktív futtatása egyszerű, de problémát okozhat egy túlengedélyezett egyszerű szolgáltatás (alkalmazás) esetén. Mindez a Graph SDK csatlakozási módjától és az általa használt engedélyektől függ. Vizsgáljuk meg, miért.

Csatlakozás a Graph SDK-hoz

A Graph SDK használatának első lépése a Graphhoz való csatlakozás a Connect-MgGraph parancsmag használatával. Amikor a Connect-MgGraph parancsot futtatja a Graphhoz való csatlakozáshoz, célszerű megadni annak a bérlőnek az azonosítóját, amelyhez csatlakozni kíván.

Connect-MgGraph -TenantId "828e1143-88e3-492b-bf82-24c4a47ada63"

Ha nem ad meg bérlőt, a Connect-MgGraph azt a bérlőt választja ki, akibe utoljára bejelentkezett egy munkamenet során (amely lehet, hogy nem az, akihez csatlakozni szeretne). Ezt akkor fedeztem fel, amikor csatlakoztam a Graphhoz, és felfedeztem, hogy a felhasznált adatok a fejlesztési bérlőmhöz tartoznak. Akkor vettem észre, de előfordulhat, hogy valaki máshonnan lemarad, ezért legyen szokás, hogy a bérlőazonosítóval kapcsolódjon.

Egy munkamenet a Disconnect-MgGraph futtatásáig tart (lásd alább), és a Connect-MgGraph futtatásával napokon keresztül többször is újraindítható. A színfalak mögött a Graph SDK titkosított token-gyorsítótárat tart, és szükség szerint frissíti a tokent, hogy lehetővé tegye a Graph-parancsokkal való munkát.

Engedélyek

A sikeres kapcsolat létrehozása után a munkamenet az Ön fiókjaként jelentkezik be. A kapcsolat engedélyi hatóköre az Azure AD-ben az SDK-hoz regisztrált egyszerű szolgáltatástól (vállalati alkalmazástól) származik. Ha még soha nem jelentkezett be a Graph SDK-val, az SDK létrehoz egy Microsoft Graph Command Line Tools nevű vállalati alkalmazást 14d82eec-204b-4c2f-b7e8-296a70dab67e AppId-vel., és korlátozott számú engedélyt kér (1. ábra). Ha Ön rendszergazda, beleegyezését adhatja ezekhez az engedélyekhez a szervezet nevében. Az éber adminisztrátorok megalapozott gyanújának enyhítése érdekében jó lenne, ha a szolgáltatási cím ellenőrzöttként jelenne meg, de jelenleg nem ez a helyzet.

A Microsoft Graph PowerShell SDK-hoz jóváhagyott engedélyeket a vállalati alkalmazás egyszerű szolgáltatása birtokolja.

Új engedélyek gyűjtése

Amint az emberek elkezdik végrehajtani a Graph SDK-parancsokat az interaktív kliens használatával, bele kell adniuk a parancsok futtatásához szükséges engedélyeket. Ha például a Get-MgUser parancsmagot Azure AD-fiókok lekéréséhez szeretné használni, a felhasználónak engedélyre van szüksége a címtárinformációk olvasásához, így a Hatókör használatával kérheti az engedélyeket. > paramétert a csatlakozáskor a következőképpen:

$RequiredScopes = @("Directory.AccessAsUser.All", "Directory.ReadWrite.All")
Connect-MgGraph -Scopes $RequiredScopes

Ha olyan hatókörhöz csatlakozik, amely nem a vállalati alkalmazás által birtokolt engedélyeket tartalmazza, az Azure AD beleegyezést kér a nem a szolgáltatás egyszerűtől örökölt engedélyekhez (2. ábra).

A Graph API-kat használó többi alkalmazáshoz hasonlóan a rendszergazda a szervezet nevében hozzájárul a kért engedélyekhez. Ez hozzáadja a további engedélyeket az egyszerű szolgáltatási készlethez. Ha egy rendszergazda nem adja meg a hozzájárulást, akkor a kért engedélyek rendelkezésre állnak (a bejelentkezett fiók által birtokolt adminisztrátori szerepköröktől függően) a munkamenethez, de nem csatlakoznak a rendszergazda által birtokolt készlethez.

Idővel az SDK szolgáltatási tagjának engedélyei megegyeznek a beleegyezés kezdeti időpontjában megadott engedélyekkel, valamint az interaktív klienssel végzett munka során a későbbiekben megadott egyéb engedélyekkel. Más szavakkal, az egyszerű szolgáltatás idővel összesített engedélyeket gyűjt. Emiatt nem javasolt a Graph SDK-parancsmagok interaktív használata, mert ha igen, idővel fennáll annak a lehetősége, hogy az egyszerű szolgáltatás nagyon túlengedélyezett lesz, és ezért biztonsági kockázatot jelent. Ez az a fajta probléma, amelyet az App Governance for Cloud App Security (vagy az ebben a cikkben ismertetett otthoni megoldásban) emel ki. Ezenkívül ügyelnie kell a magas prioritású engedélyekkel rendelkező alkalmazásokra, mivel ezek azok, amelyeket a támadók telepíthetnek vagy kihasználhatnak.

A túlengedélyezett egyszerű szolgáltatási tagok esetében az egyetlen megoldás az eltávolítás és az újbóli létrehozása, amikor is az adminisztrátor hozzájárulást adhat korlátozott engedélyekhez az új egyszerű szolgáltatási tag számára. A szolgáltatás egyszerű eltávolítása a Graph SDK-parancsmagok használatával (természetesen):

$Sp = Get-MgServicePrincipal -Filter "AppId eq '14d82eec-204b-4c2f-b7e8-296a70dab67e'"
Remove-MgServicePrincipal -ServicePrincipalId $Sp.Id

Csatlakozás a bétaprofilhoz

Bizonyos helyzetekben a bétaprofilt kell használnia bizonyos parancsokhoz és adatokhoz való hozzáféréshez. Ez megegyezik a béta végpont megadásával a Graph API-lekérdezések kiadásakor. A béta profil kiválasztásához futtassa a Select-MgProfile parancsmagot:

Select-MgProfile beta

Frissítés: A Microsoft Graph PowerShell SDK 2.0-s verziója megszünteti a Select-MgProfile parancsmag szükségességét. Ehelyett a béta parancsmagok külön modulban vannak.

A kapcsolat jelentése

Annak ellenőrzésére, hogy a megfelelő profillal és jogosultságokkal rendelkező bérlőhöz csatlakozik-e, a Get-MgOrganization parancsmaggal kinyerhetünk információkat a bérlőről, amely a jelenlegi kapcsolat a Get-MgContexttel. parancsmagot és a Get-MgProfile parancsmaggal használt profilt, és néhány hasznos információt jelenít meg:

$Details = Get-MgContext
$Scopes = $Details | Select -ExpandProperty Scopes
$Scopes = $Scopes -Join ", "
$OrgName = (Get-MgOrganization).DisplayName
CLS
Write-Host "Microsoft Graph Connection Information"
Write-Host "--------------------------------------"
Write-Host " "
Write-Host ("Connected to Tenant {0} ({1}) as account {2}" -f $Details.TenantId, $OrgName, $Details.Account)
Write-Host "+-------------------------------------------------------------------------------------------------------------------+"
Write-Host ("Profile set as {0}. The following permission scope is defined: {1}" -f $ProfileName, $Scopes)
Write-Host ""

Microsoft Graph Connection Information
--------------------------------------

Connected to Tenant a662313f-14fc-43a2-9a7a-d2e27f4f3475 (Office 365 for IT Pros) as account Global.Administrator@office365itpros.com
+-------------------------------------------------------------------------------------------------+
The following scopes are defined: Directory.AccessAsUser.All, Directory.ReadWrite.All, openid, profile, User.Read, email, Group.Read.All, Group.ReadWrite.All 

A fent felsorolt engedélyek közé tartoznak az egyszerű szolgáltatástól örökölt engedélyek, valamint a felhasználó által a munkamenethez kért egyéb engedélyek.

Ha végzett, bontsa le a kapcsolatot

Ha befejezte a Graph interakciót, ne felejtse el bezárni a munkamenetet a Disconnect-MgGraph parancs futtatásával, hogy kijelentkezzen a munkamenetből a grafikonból. A munkamenet leválasztása eltávolítja a titkosított token gyorsítótár, és megakadályozza a munkamenet újrainicializálását.

Disconnect-MgGraph

Csak alkalmazás-hozzáférés éles használatra

A fenti leírás egy interaktív munkamenetre vonatkozik. Ez egy jó módja annak, hogy megismerje a Graph SDK-parancsmagokat és a hibakereső szkripteket az operatív használatra való felkészülés során. Ha azonban interaktívan futtatja az SDK-parancsmagokat, az engedélyek delegálására korlátozódik. Más szavakkal, hozzáférhet azokhoz az elemekhez, amelyekkel kapcsolatba léphet a Microsoft 365-alkalmazásokon keresztül, de nem férhet hozzá más felhasználók tulajdonában lévő elemekhez. Például elolvashatja a postafiókjában lévő elemeket, de egy másik postafiókban nem. Ha alkalmazásengedélyekkel szeretné futtatni az SDK-t, ezt megteheti egy alkalmazással vagy az Azure Automationban (RunAs-fiók vagy felügyelt identitás használatával).

A hozzájárulással és az egyszerű szolgáltatással kapcsolatos problémák miatt a Microsoft azt javasolja, hogy a működési szkriptek tanúsítványalapú hitelesítéssel (csak alkalmazásokhoz való hozzáférés) vagy felügyelt identitású regisztrált Azure AD-alkalmazásokat használjanak. Természetesen írhat és tesztelhet szkripteket az interaktív kliens használatával, de ha a kód elkészült, itt az ideje, hogy saját alkalmazással futtassa, szigorúan meghatározott engedélykészlettel. Ez a megközelítés azt jelenti, hogy az alkalmazásokhoz rendelt engedélyeket csak arra a készletre korlátozhatja, amelyre a szkript által végzett feldolgozáshoz szükség van, és korlátozhatja azokat, akik használhatják az alkalmazást egy kiválasztott fiókra. A hatókörű engedélyekkel rendelkező különálló alkalmazások használatának hátránya, hogy idővel sok regisztrált alkalmazás halmozódhat fel az Azure AD-ben, amelyeket kezelni kell.

A másik megoldás az Azure Automation használata felügyelt identitásokkal az SDK-parancsmagokat használó szkriptek futtatásához. További információért tekintse meg ezt a cikket.

Néhány probléma, amelyet a Microsoftnak meg kell oldania

Nem tűnik jó ötletnek egy olyan szolgáltatási tag, amely folyamatosan szorgalmasan gyűjti az engedélyeket. Valójában ez egy rossz ötlet. A Microsoftnak jobb módszert kell kidolgoznia arra, hogy lehetővé tegye a rendszergazdáknak a Graph SDK-parancsmagok interaktív futtatását anélkül, hogy biztonsági problémákat okoznának. Az egyszerű biztonsági kód törlése a Disconnect-MgGraph futtatásakor az engedélyek nullázásának egyik módja, de ez rossz megoldás. A jelenlegi fenyegetettségi környezetben sem lehet megtenni azt, hogy az emberek szigorúan kódolhassák felhasználóneveiket és jelszavaikat, vagy alkalmazástitkokat használhassanak szkriptekben a Graphhoz való hozzáférés hitelesítésére.

A helyzet az, hogy a bérlői adminisztrátorok elfelejtik az engedélyek felhalmozódásának problémáját, hacsak nem ellenőrzik a szolgáltatási tagokat. Szomorú, de igaz, és más munka követelményei miatt. Az emberek nem futtatják a Disconnect-MgGraph fájlt ugyanazon okból, mert a rendszer figyelmen kívül hagyja az olyan parancsmagokat, mint a Disconnect-MicrosoftTeams és a Disconnect-ExchangeOnline.

A Graph SDK kiváló ötlet, mert elszigeteli a PowerShell-felhasználókat a Graph API-k használatának számos bonyolultságától. Ez még folyamatban van, de ha a Microsoft a Graph SDK-t a bérlői rendszergazdák egyszerű eszközévé szeretné tenni, meg kell oldaniuk az engedélyekkel kapcsolatos problémát. És hamarosan (az elavulási határidő előtt!)

Kapcsolódó cikkek