Tokom godina, pokrili smo pravila upravljanja aplikacijama Entra nekoliko puta, posljednji put u ovom članku. Ako vam je potreban podsjetnik, politike upravljanja aplikacijama omogućuju vam da konfigurirate različita ograničenja za aplikacije i principale usluga u vašem zakupcu, kao što je kontrola životnog vijeka tajni klijenta ili potpuno blokiranje njihove upotrebe, kontrola publike aplikacija, nametanje ograničenja na skup URI-ja odgovora i još mnogo toga. Iako je ova funkcija pokrenuta samo uz podršku za Graph API, sada imamo korisničko sučelje za nju, koje se nalazi ispod Ulaz u administrativni centar > Enterprise aplikacije > Pravila prijave.
Osim ugla „lakoće upotrebe“, još jedna uobičajena pritužba na politike upravljanja aplikacijama bila je nemogućnost isključivanja određenih objekata. Doduše, čak i pri pokretanju imali smo opciju da konfigurišemo pravila specifična za objekte, ali pomenuta funkcionalnost nam nije dopuštala da ciljamo novoopremljene aplikacije, jer je bila vezana za (prisutnost) samog objekta aplikacije. Microsoft je sada objavio novu funkciju koja omogućava izuzecima da ciljaju principala koji kreira objekt, korisnika ili principala usluge, u korisničkom interfejsu i Graph API-ju. Hajde da pogledamo.
Dodavanje izuzetka kroz korisnički interfejs
Počinjemo sa implementacijom korisničkog interfejsa, koji je naravno mnogo lakši za korišćenje. Pristupite skupu politika upravljanja aplikacijom sa njegove uobičajene lokacije pod Ulaz u administrativni centar > Enterprise aplikacije > Pravila prijave. Kliknite na pravilo kojem želite dodati iznimke, na primjer Blokirajte dodavanje lozinke jedan za kontrolu dostupnosti tajni klijenta. Prvo ga prebacite Statusako već nije omogućeno. Zatim odaberite novouvedeno Sve aplikacije sa izuzecima opcija ispod To se odnosi na grupa.
Biće vam predstavljena dva načina za konfigurisanje izuzetaka. The Onemogućene aplikacije kartica i Dodajte aplikacije dugme je ono što vam omogućava da ciljate određene postojeći aplikacija ili objekti principala usluge. Ključna riječ ovdje je postojanje. Ovo je ekvivalentno kreiranju novog AppManagementPolicy objekta i njegovom pripajanju odabranoj aplikaciji ili principalu usluge, sa svom složenošću skrivenom od korisničkog sučelja.
Zanimljiviji scenario je tzv pozivalac izuzetak, konfigurirajte pod Isključeni pozivaoci tab. Udaranjem u Dodajte blokirane pozivaoce možete odabrati korisnika ili principala usluge koje želite dodati kao izuzetke odabranoj politici. UI vam ne dozvoljava da odaberete grupe, što bi moglo izgledati malo sumnjivo, ali kao što ćemo kasnije vidjeti, postoji valjan razlog za to. Pritisnite da završite proces Sačuvaj i zatvori dugme.
Iza kulisa, novododati izuzetak se nameće ažuriranjem podrazumevanog objekta politike upravljanja aplikacijom. Konkretno, dodaje aspekt excludeActors i definira skup od do 5 prilagođenih sigurnosnih atributa koji pridružuju politiku odabranom skupu korisnika i/ili principala usluge. Navedeni objekti moraju zauzvrat biti označeni odgovarajućim prilagođenim sigurnosnim atributom. U tome leži tuga koju imam zbog trenutne verzije korisničkog sučelja – previše dobro skriva svu ovu složenost. S jedne strane, ovo je dobra stvar i manje-više ono što očekujemo, ali s druge strane, postoje određene ovisnosti kada je u pitanju rad sa prilagođenim sigurnosnim atributima koji nisu jasni ni u jednom trenutku u procesu i mogu rezultirati problemima. Iskreno, dokumentacija se bavi ovim… ako se potrudite da je pročitate.
Konfiguriranje izuzetaka putem Graph API-ja
Sada kada imamo neko osnovno razumijevanje o tome kako proces funkcionira, hajde da uprljamo ruke i istražimo stvarne Graph API pozive koji čine da se sve to dogodi. Kao što je gore spomenuto, izuzeci pozivatelja uvelike zavise od prilagođenih sigurnosnih atributa, tako da će nam trebati dovoljno dozvola za rad s njima. Ako imate (i planirate da koristite) postojeći skup atributa, trebat će vam samo on CustomSecAttributeAssignment.ReadWrite.All obim. inače, CustomSecAttributeDefinition.ReadWrite.All jedan će takođe biti potreban. A ako vam je potrebno osvježenje o radu s prilagođenim sigurnosnim atributima, pogledajte našu seriju ovdje.
Kao zanimljivu napomenu, korisnički interfejs će omogućiti novi prilagođeni skup imenovanih atributa AppManagementPolicySet. Unutar njega je definiran jedan atribut sa vrijednošću niza, imenovanim passwordAdditionExempted da odgovara vrsti ograničenja koja smo postavili. Navedeni atribut se zatim utiskuje na bilo koji od objekata koje ste odabrali kao dio procesa, s vrijednošću od pravi. Cmdlete ispod mogu se koristiti za provjeru gornjih izjava. Kao sporedna napomena, molimo vas da stavite u red obavezno lajanje o tome koliko loše Graph SDK rukuje radom sa prilagođenim sigurnosnim atributima, čak iu 2026. godini!
Get-MgDirectoryCustomSecurityAttributeDefinition -CustomSecurityAttributeDefinitionId appManagementPolicySet_passwordAdditionExempted | fl Get-MgUser -UserId fe506ef0-235f-43cf-ae0c-e82f833c3e91 -Property customSecurityAttributes | select -ExpandProperty CustomSecurityAttributes | select -ExpandProperty AdditionalProperties | ConvertTo-Json
Konvencija imenovanja koja se koristi sa “embedded” tokom korisničkog sučelja je savršeno prihvatljiva, ali organizacije mogu imati svoje zahtjeve. Štoviše, glavna ograničenja upravljanja aplikacijom za konfiguriranje možda neće imati potrebne dozvole za rad s prilagođenim skupovima atributa ili upravljanje dodjeljivanjem atributa. Kada postoje valjani razlozi za korištenje vlastitog skupa, samo budite sigurni da koristite polje s jednom vrijednošću, što je prilagođeni sigurnosni atribut Serije momak, sa njegovim isCollection svojstvo postavljeno na lažno.
Pošto smo već pokrili proces kreiranja prilagođenih sigurnosnih atributa, ovdje nećemo ponavljati korake. Ako trebate više informacija o procesu, pogledajte zvaničnu dokumentaciju. Isto vrijedi i za dodjeljivanje prilagođenih sigurnosnih atributa objektima korisnika i principala usluge. Samo pazite da navedete ispravne vrijednosti, za razliku od primjera dodjele u trenutnoj dokumentaciji 🙂
S druge strane, budući da prilagođeni sigurnosni atributi još nisu podržani za grupne objekte, sada razumijemo zašto nam korisničko sučelje ne dozvoljava odabir grupa prilikom konfiguriranja izuzimanja. Uopšteno govoreći, podrška za grupe nije zaista potrebna, jer možemo jednostavno “proširiti” članstvo u grupi i označiti relevantne prilagođene sigurnosne atribute na svakom korisniku i/ili principalu usluge koji se nalazi u njoj. Ali skrećem pažnju.
Vratimo se na zadatak. Nakon što ste odabrali skup, prilagođene sigurnosne atribute i principale za koje želite konfigurirati izuzetak, morate zakrpiti zadanu politiku upravljanja aplikacijom kako biste je uputili da poštuje navedene izuzetke. Zanimljivo, čini se da u ovom dijelu nema nikakve stroge validacije, što je vidljivo iz redoslijeda API zahtjeva prilikom konfigurisanja izuzetaka putem korisničkog sučelja. Drugim riječima, prilagođeni sigurnosni skup/atribut ne mora postojati unaprijed, tako da je redoslijed koji slijedite stvar vaših ličnih preferencija.
Bez daljeg odlaganja, evo kako da izmenite podrazumevanu politiku upravljanja aplikacijom za ovaj scenario. Koristićemo metod PATCH protiv odgovarajućeg /policies/defaultAppManagementPolicy krajnja tačka, dostupna sa oba /v1.0 i /beta grane. Ovo posljednje je potrebno samo ako želite dodati iznimke za scenarije povezane sa IdentifierURI. Što se tiče potrebnih dozvola, trebat će vam Policy.ReadWrite.ApplicationConfiguration opseg i odgovarajuću ulogu administratora ako koristite delegirane dozvole.
Budući da se naši scenariji fokusiraju na sprječavanje dodavanja novih lozinki (klijentskih vjerodajnica), morat ćemo izmijeniti konfiguraciju passwordCredential-a. Konkretno, moramo konfigurirati excludedActorss svojstvo s vrijednošću koja ukazuje na odabrani prilagođeni sigurnosni atribut i njegovu očekivanu vrijednost. Na primjer, ako izaberemo BlockPasswordCreation atribut izvana Prijave postavljeno i očekujemo isključiti vrijednost za konfiguraciju, koristit ćemo sljedeće opterećenje:
"excludeActors":
"customSecurityAttributes": [
"@odata.type": "#microsoft.graph.customSecurityAttributeStringValueExemption",
"id": "Applications_BlockPasswordCreation",
"operator": "equals",
"value": "exclude"
]
The excludedActors nosivost se može konfigurirati pod bilo kojim svojstvom koje odgovara podržanom ograničenju. U našem primjeru koji gledamo RestrictionType of PasswordAddition. A pošto želimo da se izuzeci primjenjuju i na aplikaciju i na principala usluge, konfiguriramo ih u oba odjeljka u skladu s tim. Ne morate uključiti svojstva ili sekcije koje ne planirate mijenjati. Evo punog zahtjeva i povezanog tereta za naš scenarij:
PATCH https://graph.microsoft.com/v1.0/policies/defaultAppManagementPolicy
{
"applicationRestrictions":
"passwordCredentials": [
"restrictionType": "passwordAddition",
"state": "enabled",
"maxLifetime": null,
"restrictForAppsCreatedAfterDateTime": "0001-01-01T00:00:00Z",
"excludeActors":
"customSecurityAttributes": [
"@odata.type": "#microsoft.graph.customSecurityAttributeStringValueExemption",
"id": "Applications_BlockPasswordCreation",
"operator": "equals",
"value": "exclude"
]
,
]
,
"servicePrincipalRestrictions":
"passwordCredentials": [
"restrictionType": "passwordAddition",
"state": "enabled",
"maxLifetime": null,
"restrictForAppsCreatedAfterDateTime": "0001-01-01T00:00:00Z",
"excludeActors":
"customSecurityAttributes": [
"@odata.type": "#microsoft.graph.customSecurityAttributeStringValueExemption",
"id": "Applications_BlockPasswordCreation",
"operator": "equals",
"value": "exclude"
]
,
],
}

Uspješno izvršenje se signalizira sa 204 Nema sadržaja odgovor, kao što je prikazano na slici iznad.
Nakon što promjene zadane politike upravljanja aplikacijom stupe na snagu, niko osim korisnika koji odgovaraju konfiguriranim izuzecima neće moći dodati nove vjerodajnice lozinke bilo postojećim ili novododijeljenim aplikacijama i principalima usluga. Ovo je ilustrovano na snimku ekrana ispod, gdje poredimo ponašanje globalnog administratora i vlasnika aplikacije sa potrebnim prilagođenim postavljenim sigurnosnim atributima. Nažalost, čini se da iskustvo Entra Admin centra još nije ažurirano da odražava logiku izuzetaka, pa koristimo Graph explorer za prikaz očekivanog ponašanja. U svakom slučaju, osnovni Graph API poziv je važan, a kao što vidimo, politika je blokirala pokušaj dodavanja nove klijentske tajne za globalnog administratora, dok je operacija bila uspješna za korisnika s ispravnim postavljenim prilagođenim sigurnosnim atributom!
Za iskustvo korisničkog interfejsa potreban je poljski jezik
Pored pomenutog nedostatka podrške za izuzetke pri radu sa tajnama klijenata u Entra Admin centru, još važnije ograničenje trenutno utiče na ovu funkciju. Ako promijenite zadane politike upravljanja aplikacijom preko Graph API-ja, nećete moći čak ni vidjeti trenutnu konfiguraciju politike u korisničkom sučelju. Umjesto toga, prikazuje se sljedeća greška: “Ograničenje je izmijenjeno izvan ovog interfejsa. Kako bi se spriječio gubitak podataka, uređivanje je onemogućeno dok se ograničenja ne sinkroniziraju.“

U stvari, Microsoft je dokumentirao da je ovo poznat problem i također predlaže metodu za njegovo rješavanje. Nažalost, u priči je nešto više. Stvar je u tome što je korisničko sučelje tvrdo kodirano za provjeru prilagođene kombinacije sigurnosnih atributa/atributa/vrijednosti i neće čak ni pokušati raščlaniti ono što je konfigurirano u samoj politici. Ovo se lako može potvrditi posmatranjem mrežnog traga u pretraživaču. Nakon preuzimanja politike, pokreće se upit za provjeru prisutnosti AppManagementPolicySet set i passwordAdditionExempted atributa, nakon čega slijedi upit za filtriranje korisničkih objekata i principala usluga koji imaju pečat s vrijednošću pravi.
U stvari, korisničko sučelje će prijaviti samo odgovarajući skup principala konfiguriranih kao isključeni pozivaoci ako koristite tvrdo kodiranu vrijednost za ime skupa/atributa i njegovu potrebnu vrijednost. Ako koristite svoje, korisničko sučelje će rado prijaviti netačan skup principala, ako ih ima. Ovo je ilustrovano na snimku ekrana ispod, gdje je pogrešan korisnik (onaj sa “tvrdo kodiranim” vrijednostima) prikazan u korisničkom sučelju, umjesto onog koji odgovara onome što je konfigurirano u samoj politici.

Radi potpunosti, evo kako zaobići zadane politike upravljanja aplikacijama nakon promjena napravljenih u našem primjeru (tj. promjene u PasswordAddition scenarij ograničenja). Kao što dokumentacija sugerira, morat ćete ukloniti sva ograničenja tipa PasswordAddition i simetrično dodavanje ključa. Zapravo možete zadržati bilo šta drugo, kao što je skup ograničenja URI-ja u primjeru korisnog opterećenja ispod:
PATCH https://graph.microsoft.com/v1.0/policies/defaultAppManagementPolicy
"applicationRestrictions":
"passwordCredentials": [],
"keyCredentials": [],
"identifierUris":
"nonDefaultUriAddition": null,
"uriAdditionWithoutUniqueTenantIdentifier":
"state": "enabled",
"isStateSetByMicrosoft": false,
"restrictForAppsCreatedAfterDateTime": "0001-01-01T00:00:00Z",
"excludeAppsReceivingV2Tokens": true,
"excludeSaml": true,
"excludeActors": null
,
"servicePrincipalRestrictions":
"passwordCredentials": [],
"keyCredentials": []
Kada se ove promjene izvrše, trebali biste moći koristiti iskustvo korisničkog sučelja i rekonfigurirati sva ograničenja po potrebi.
Abstract
Istražili smo novo izdanu funkcionalnost da isključimo odabrane objekte korisnika ili principala usluge iz bilo kojeg od ograničenja podržanih Entrinim politikama upravljanja aplikacijama. Ovo je odličan dodatak već vrlo korisnoj funkciji, omogućavajući bolje prilagođavanje i rješavanje nekih od najčešćih problema. Uvijek je dobro vidjeti stalna poboljšanja unutar usluge, za razliku od izdavanja “minimalno održivog proizvoda” i zaboravljanja na njega.
Nova funkcionalnost dolazi s pomalo nestabilnom UI podrškom, što može uzrokovati probleme u scenarijima u kojima želite više kontrole ili želite automatizirati konfiguraciju putem Graph API-ja. Iako vas zvanična dokumentacija upozorava na to, odluka da se UI kodira samo za određene scenarije je pomalo zbunjujuća, pa se nadamo da vidimo samo prvu iteraciju podrške za isključene pozive i da će se iskustvo poboljšati u budućnosti.
Za iskustvo korisničkog interfejsa potreban je poljski jezik