Zuweisen von Azure AD-Rollen über Privileged Identity Management-APIs (PIM) in Microsoft Graph
Artikel
21 Minuten Lesedauer
Die Microsoft Graph PIM-API ermöglicht Es Organisationen, den privilegierten Zugriff auf Ressourcen in Azure Active Directory (Azure AD) zu verwalten. Es hilft auch, die Risiken des privilegierten Zugriffs zu verwalten, indem der Aktive Zugriff beschränkt, der Zugriffsbereich verwaltet und ein überprüfbares Protokoll des privilegierten Zugriffs bereitgestellt wird.
In diesem Tutorial möchte ein fiktives Unternehmen namens Contoso Limited, dass sein IT-Helpdesk den Lebenszyklus des Zugriffs von Mitarbeitern verwaltet. Das Unternehmen hat die Rolle "Azure AD-Benutzeradministrator" als die geeignete privilegierte Rolle identifiziert, die für den IT-Helpdesk erforderlich ist, und verwendet die PIM-API, um die Rolle zuzuweisen.
Sie erstellen eine Rollenzuweisbare Sicherheitsgruppe für IT-Helpdesk und weisen die Berechtigung der Sicherheitsgruppe mithilfe der PIM-API der Rolle "Benutzeradministrator" zu. Durch das Zuweisen der berechtigten Rolle zu einer Sicherheitsgruppe hat Contoso eine effizientere Möglichkeit, den Administratorzugriff auf Ressourcen wie Azure AD-Rollen zu verwalten. Zum Beispiel:
Wenn Sie vorhandene Mitglieder entfernen oder weitere Gruppenmitglieder hinzufügen, werden auch Administratoren entfernt.
Hinzufügen weiterer Rollen zu den Gruppenmitgliedern, anstatt einzelnen Benutzern Rollen zuzuweisen.
Das Zuweisen der Berechtigung anstelle einer dauerhaft aktiven Benutzeradministratorberechtigung ermöglicht es dem Unternehmen, just-in-time-Zugriff zu erzwingen, wodurch temporäre Berechtigungen zum Ausführen der privilegierten Aufgaben gewährt werden. Nach dem Definieren der Rollenberechtigung aktiviert das berechtigte Gruppenmitglied seine Zuweisung für einen temporären Zeitraum. Alle Datensätze von Rollenaktivierungen können vom Unternehmen überwacht werden.
Hinweis
Die in diesem Tutorial gezeigten Antwortobjekte können aus Gründen der Lesbarkeit gekürzt werden.
Voraussetzungen
Für dieses Tutorial benötigen Sie die folgenden Ressourcen und Berechtigungen:
Ein funktionierender Azure AD-Mandant mit aktivierter Azure AD Premium P2- oder EMS E5-Lizenz.
Melden Sie sich bei einem API-Client wie Graph-Explorer oder Postman an, oder erstellen Sie Eine eigene Client-App, um Microsoft Graph aufzurufen. Zum Aufrufen von Microsoft Graph-APIs in diesem Tutorial müssen Sie ein Konto mit der Rolle "Globaler Administrator" verwenden.
[Optional] Starten Sie eine neue Sitzung in einem anderen Browser. Sie melden sich später in diesem Tutorial an.
Gewähren Sie sich die folgenden delegierten Berechtigungen: User.ReadWrite.All, , Group.ReadWrite.AllDirectory.Read.All, RoleEligibilitySchedule.ReadWrite.Directory, und RoleAssignmentSchedule.ReadWrite.Directory, und .RoleManagement.ReadWrite.Directory
Auf Ihrem Smartphone installierte Authentifikator-App, um einen Benutzer für die mehrstufige Authentifizierung (Multi-Factor Authentication, MFA) zu registrieren.
Schritt 1: Erstellen eines Testbenutzers
Erstellen Sie einen Benutzer, der sein Kennwort bei der ersten Anmeldung zurücksetzen muss. Notieren Sie sich in diesem Schritt den Wert der ID des neuen Benutzers zur Verwendung im nächsten Schritt. Rufen Sie nach dem Erstellen des Benutzers die Azure-Portal auf, und aktivieren Sie die mehrstufige Authentifizierung (Multi-Factor Authentication, MFA) für den Benutzer. Weitere Informationen zum Aktivieren von MFA finden Sie im Abschnitt Siehe auch .
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new User();
$requestBody->setAccountEnabled(true);
$requestBody->setDisplayName('Aline Dupuy');
$requestBody->setMailNickname('AlineD');
$requestBody->setUserPrincipalName('AlineD@Contoso.com');
$passwordProfile = new PasswordProfile();
$passwordProfile->setForceChangePasswordNextSignIn(true);
$passwordProfile->setPassword('xWwvJ]6NMw+bWH-d');
$requestBody->setPasswordProfile($passwordProfile);
$requestResult = $graphServiceClient->users()->post($requestBody);
Schritt 2: Erstellen einer Sicherheitsgruppe, der eine Azure AD-Rolle zugewiesen werden kann
Erstellen Sie eine Gruppe, die einer Azure AD-Rolle zugewiesen werden kann. Weisen Sie sich selbst als Gruppenbesitzer und sowohl Sie als auch Aline (der in Schritt 1 erstellte Benutzer) als Mitglieder zu.
Anforderung: Erstellen einer Gruppe mit Rollenzuweisung
Ersetzen Sie durch 1ed8ac56-4827-4733-8f80-86adc2e67db5 Ihre ID und 7146daa8-1b4b-4a66-b2f7-cf593d03c8d2 durch den Wert der Aline-ID.
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new Group();
$requestBody->setDescription('IT Helpdesk to support Contoso employees');
$requestBody->setDisplayName('IT Helpdesk (User)');
$requestBody->setMailEnabled(false);
$requestBody->setMailNickname('userHelpdesk');
$requestBody->setSecurityEnabled(true);
$requestBody->setIsAssignableToRole(true);
$additionalData = [
'owners@odata.bind' => ['https://graph.microsoft.com/v1.0/users/1ed8ac56-4827-4733-8f80-86adc2e67db5', ],
'members@odata.bind' => ['https://graph.microsoft.com/v1.0/users/1ed8ac56-4827-4733-8f80-86adc2e67db5', 'https://graph.microsoft.com/v1.0/users/7146daa8-1b4b-4a66-b2f7-cf593d03c8d2', ],
];
$requestBody->setAdditionalData($additionalData);
$requestResult = $graphServiceClient->groups()->post($requestBody);
Schritt 3: Erstellen einer unifiedRoleEligibilityScheduleRequest
Nachdem Sie nun über eine Sicherheitsgruppe verfügen, weisen Sie sie als berechtigt für die Rolle Benutzeradministrator zu. In diesem Schritt:
Erstellen Sie ein unifiedRoleEligibilityScheduleRequest-Objekt, das den IT-Helpdesk der Gruppe (Benutzer) für ein Jahr als berechtigt für die Rolle "Benutzeradministrator" identifiziert. Azure AD erweitert diese berechtigte Zuweisung auf die Gruppenmitglieder, d. h. Sie und Aline.
Legen Sie die berechtigte Zuweisung auf Ihren gesamten Mandanten fest. Dadurch kann der Benutzeradministrator seine Berechtigungen für alle Benutzer in Ihrem Mandanten verwenden, mit Ausnahme von Benutzern mit höheren Berechtigungen wie dem globalen Administrator.
Anforderung
Ersetzen Sie durch e77cbb23-0ff2-4e18-819c-690f58269752 den Wert der ID der Sicherheitsgruppe IT-Helpdesk (Benutzer). Diese principalId identifiziert den Berechtigungsempfänger für die Rolle "Benutzeradministrator". RoleDefinitionId fe930be7-5e62-47db-91af-98c3a49a38b1 ist der globale Vorlagenbezeichner für die Rolle "Benutzeradministrator" in Azure AD.
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new UnifiedRoleEligibilityScheduleRequest();
$requestBody->setAction(new UnifiedRoleScheduleRequestActions('adminassign'));
$requestBody->setJustification('Assign User Admin eligibility to IT Helpdesk (User) group');
$requestBody->setRoleDefinitionId('fe930be7-5e62-47db-91af-98c3a49a38b1');
$requestBody->setDirectoryScopeId('/');
$requestBody->setPrincipalId('e77cbb23-0ff2-4e18-819c-690f58269752');
$scheduleInfo = new RequestSchedule();
$scheduleInfo->setStartDateTime(new DateTime('2021-07-01T00:00:00Z'));
$scheduleInfoExpiration = new ExpirationPattern();
$scheduleInfoExpiration->setEndDateTime(new DateTime('2022-06-30T00:00:00Z'));
$scheduleInfoExpiration->setType(new ExpirationPatternType('afterdatetime'));
$scheduleInfo->setExpiration($scheduleInfoExpiration);
$requestBody->setScheduleInfo($scheduleInfo);
$requestResult = $graphServiceClient->roleManagement()->directory()->roleEligibilityScheduleRequests()->post($requestBody);
Schritt 4: Bestätigen der aktuellen Rollenzuweisungen des Benutzers
Obwohl die Gruppenmitglieder jetzt für die Rolle "Benutzeradministrator" berechtigt sind, können sie die Rolle weiterhin nicht verwenden. Dies liegt daran, dass sie ihre Berechtigung noch aktivieren müssen. Sie können dies bestätigen, indem Sie die aktuellen Rollenzuweisungen des Benutzers überprüfen.
Anforderung
Ersetzen Sie 7146daa8-1b4b-4a66-b2f7-cf593d03c8d2 in der folgenden Anforderung durch den Wert der ID von Aline.
GET https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?$filter=principalId eq '7146daa8-1b4b-4a66-b2f7-cf593d03c8d2'
var graphClient = new GraphServiceClient(requestAdapter);
var result = await graphClient.RoleManagement.Directory.RoleAssignments.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Filter = "principalId eq '7146daa8-1b4b-4a66-b2f7-cf593d03c8d2'";
});
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestConfiguration = new RoleAssignmentsRequestBuilderGetRequestConfiguration();
$queryParameters = new RoleAssignmentsRequestBuilderGetQueryParameters();
$queryParameters->filter = "principalId eq '7146daa8-1b4b-4a66-b2f7-cf593d03c8d2'";
$requestConfiguration->queryParameters = $queryParameters;
$requestResult = $graphServiceClient->roleManagement()->directory()->roleAssignments()->get($requestConfiguration);
Das leere Antwortobjekt zeigt, dass Aline über keine azure AD-Rollen in Contoso verfügt. Aline aktiviert nun die berechtigte Rolle "Benutzeradministrator" für einen begrenzten Zeitraum.
Schritt 5: Der Benutzer aktiviert seine berechtigte Zuweisung selbst.
Ein Incidentticket CONTOSO: Security-012345 wurde im Incident-Management-System von Contoso ausgelöst, und das Unternehmen verlangt, dass alle Aktualisierungstoken des Mitarbeiters ungültig gemacht werden. Als Mitglied des IT-Helpdesks ist Aline für die Erfüllung dieser Aufgabe verantwortlich.
Starten Sie zunächst die Authenticator-App auf Ihrem Smartphone, und öffnen Sie das Konto von Aline Dupuy.
Melden Sie sich beim Graph-Explorer als Aline an. Sie können für diesen Schritt einen anderen Browser verwenden. Auf diese Weise unterbrechen Sie Ihre aktuelle Sitzung nicht als Benutzer in der Rolle "Globaler Administrator". Alternativ können Sie Ihre aktuelle Sitzung unterbrechen, indem Sie sich vom Graph-Explorer abmelden und sich wieder als Aline anmelden.
Wenn Sie als Aline angemeldet sind, ändern Sie zunächst Ihr Kennwort, da dieses bei der Kontoerstellung angegeben wurde. Da der Administrator Ihr Konto dann für MFA konfiguriert hat, werden Sie aufgefordert, Ihr Konto in der Authenticator-App einzurichten und zur MFA-Anmeldung aufgefordert zu werden. Dies liegt daran, dass PIM die MFA für alle aktiven Rollenzuweisungen erfordert.
Aktivieren Sie nach der Anmeldung die Rolle "Benutzeradministrator" für fünf Stunden.
Anforderung
Um eine Rolle zu aktivieren, rufen Sie den Endpunkt auf roleAssignmentScheduleRequests . In dieser Anforderung ermöglicht ihnen die UserActivate Aktion, Ihre berechtigte Zuweisung zu aktivieren, in diesem Fall für fünf Stunden.
Geben Sie für principalId den Wert Ihrer (Aline- )ID an.
Die roleDefinitionId ist die ID der Rolle, für die Sie berechtigt sind, in diesem Fall die Rolle "Benutzeradministrator".
Geben Sie die Details des Ticketsystems ein, das eine überprüfbare Begründung für die Aktivierung der Anforderung bereitstellt.
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new UnifiedRoleAssignmentScheduleRequest();
$requestBody->setAction(new UnifiedRoleScheduleRequestActions('selfactivate'));
$requestBody->setPrincipalId('7146daa8-1b4b-4a66-b2f7-cf593d03c8d2');
$requestBody->setRoleDefinitionId('fe930be7-5e62-47db-91af-98c3a49a38b1');
$requestBody->setDirectoryScopeId('/');
$requestBody->setJustification('Need to invalidate all app refresh tokens for Contoso users.');
$scheduleInfo = new RequestSchedule();
$scheduleInfo->setStartDateTime(new DateTime('2021-09-04T15:13:00.000Z'));
$scheduleInfoExpiration = new ExpirationPattern();
$scheduleInfoExpiration->setType(new ExpirationPatternType('afterduration'));
$scheduleInfoExpiration->setDuration(new \DateInterval('PT5H'));
$scheduleInfo->setExpiration($scheduleInfoExpiration);
$requestBody->setScheduleInfo($scheduleInfo);
$ticketInfo = new TicketInfo();
$ticketInfo->setTicketNumber('CONTOSO:Security-012345');
$ticketInfo->setTicketSystem('Contoso ICM');
$requestBody->setTicketInfo($ticketInfo);
$requestResult = $graphServiceClient->roleManagement()->directory()->roleAssignmentScheduleRequests()->post($requestBody);
Sie können Ihre Zuweisung bestätigen, indem Sie ausführen GET https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignmentScheduleRequests/filterByCurrentUser(on='principal'). Das Antwortobjekt gibt Ihre neu aktivierte Rollenzuweisung zurück, deren Status auf festgelegt ist Granted. Führen Sie mit Ihrer neuen Berechtigung alle zulässigen Aktionen innerhalb von fünf Stunden aus, für die Ihre Zuweisung aktiv ist. Dies schließt das Ungültigen der Aktualisierungstoken aller Mitarbeiter ein. Nach fünf Stunden läuft die aktive Zuweisung ab, aber durch Ihre Mitgliedschaft in der Gruppe IT-Support (Benutzer) bleiben Sie weiterhin für die Rolle Benutzeradministrator berechtigt.
Zurück in der globalen Administratorsitzung haben Sie Benachrichtigungen über die berechtigte Zuweisung und die Rollenaktivierung erhalten. Auf diese Weise kann der globale Administrator alle Rechteerweiterungen für Administratorrechte in Ihrer Organisation kennen.
Schritt 6: Bereinigen von Ressourcen
Melden Sie sich als globaler Administrator an, und löschen Sie die folgenden Ressourcen, die Sie für dieses Tutorial erstellt haben: die Rollenberechtigungsanforderung, die Gruppe IT-Support (Benutzer) und der Testbenutzer (Aline Dupuy).
Widerrufen der Rollenberechtigungsanforderung
Anforderung
Ersetzen Sie durch e77cbb23-0ff2-4e18-819c-690f58269752 die ID der IT-Supportgruppe (Benutzer).
var graphClient = new GraphServiceClient(requestAdapter);
var requestBody = new UnifiedRoleEligibilityScheduleRequest
{
Action = UnifiedRoleScheduleRequestActions.AdminRemove,
PrincipalId = "e77cbb23-0ff2-4e18-819c-690f58269752",
RoleDefinitionId = "fe930be7-5e62-47db-91af-98c3a49a38b1",
DirectoryScopeId = "/",
};
var result = await graphClient.RoleManagement.Directory.RoleEligibilityScheduleRequests.PostAsync(requestBody);
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new UnifiedRoleEligibilityScheduleRequest();
$requestBody->setAction(new UnifiedRoleScheduleRequestActions('adminremove'));
$requestBody->setPrincipalId('e77cbb23-0ff2-4e18-819c-690f58269752');
$requestBody->setRoleDefinitionId('fe930be7-5e62-47db-91af-98c3a49a38b1');
$requestBody->setDirectoryScopeId('/');
$requestResult = $graphServiceClient->roleManagement()->directory()->roleEligibilityScheduleRequests()->post($requestBody);
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClientWithCredentials(cred, scopes)
graphClient.GroupsById("group-id").Delete(context.Background(), nil)
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$graphServiceClient->groupsById('group-id')->delete();
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClientWithCredentials(cred, scopes)
graphClient.UsersById("user-id").Delete(context.Background(), nil)
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$graphServiceClient->usersById('user-id')->delete();