Konfigurera synkronisering mellan klientorganisationer med PowerShell eller Microsoft Graph API
Den här artikeln beskriver de viktigaste stegen för att konfigurera synkronisering mellan klientorganisationer med hjälp av Microsoft Graph PowerShell eller Microsoft Graph API. När det är konfigurerat etablerar och avreglerar Microsoft Entra-ID automatiskt B2B-användare i målklientorganisationen. Detaljerade steg med administrationscentret för Microsoft Entra finns i Konfigurera synkronisering mellan klientorganisationer.
Förutsättningar
Källklientorganisation
- Microsoft Entra ID P1- eller P2-licens. Mer information finns i Licenskrav.
- Rollen Säkerhetsadministratör för att konfigurera åtkomstinställningar mellan klientorganisationer.
- Rollen Hybrididentitetsadministratör för att konfigurera synkronisering mellan klientorganisationer.
- Rollen Molnprogramadministratör eller programadministratör för att tilldela användare till en konfiguration och ta bort en konfiguration.
- Global administratörsroll för att samtycka till nödvändiga behörigheter.
Målklientorganisation
- Microsoft Entra ID P1- eller P2-licens. Mer information finns i Licenskrav.
- Rollen Säkerhetsadministratör för att konfigurera åtkomstinställningar mellan klientorganisationer.
- Global administratörsroll för att samtycka till nödvändiga behörigheter.
Steg 1: Logga in på målklientorganisationen
Målklientorganisation
Starta PowerShell.
Installera Microsoft Graph PowerShell SDK om det behövs.
Hämta klientorganisations-ID för käll- och målklientorganisationer och initiera variabler.
$SourceTenantId = "<SourceTenantId>" $TargetTenantId = "<TargetTenantId>"
Använd kommandot Connect-MgGraph för att logga in på målklientorganisationen och godkänna följande behörigheter.
Policy.Read.All
Policy.ReadWrite.CrossTenantAccess
Connect-MgGraph -TenantId $TargetTenantId -Scopes "Policy.Read.All","Policy.ReadWrite.CrossTenantAccess"
Steg 2: Aktivera användarsynkronisering i målklientorganisationen
Målklientorganisation
I målklientorganisationen använder du kommandot New-MgPolicyCrossTenantAccessPolicyPartner för att skapa en ny partnerkonfiguration i en åtkomstprincip mellan flera klientorganisationer mellan målklientorganisationen och källklientorganisationen. Använd källklient-ID:t i begäran.
Om du får felet
New-MgPolicyCrossTenantAccessPolicyPartner_Create: Another object with the same value for property tenantId already exists
kanske du redan har en befintlig konfiguration. Mer information finns i Symptom – nytt MgPolicyCrossTenantAccessPolicyPartner_Create fel.$Params = @{ TenantId = $SourceTenantId } New-MgPolicyCrossTenantAccessPolicyPartner -BodyParameter $Params | Format-List
AutomaticUserConsentSettings : Microsoft.Graph.PowerShell.Models.MicrosoftGraphInboundOutboundPolicyConfiguration B2BCollaborationInbound : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyB2BSetting B2BCollaborationOutbound : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyB2BSetting B2BDirectConnectInbound : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyB2BSetting B2BDirectConnectOutbound : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyB2BSetting IdentitySynchronization : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantIdentitySyncPolicyPartner InboundTrust : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyInboundTrust IsServiceProvider : TenantId : <SourceTenantId> TenantRestrictions : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyTenantRestrictions AdditionalProperties : {[@odata.context, https://graph.microsoft.com/v1.0/$metadata#policies/crossTenantAccessPolicy/partners/$entity], [crossCloudMeetingConfiguration, System.Collections.Generic.Dictionary`2[System.String,System.Object]], [protectedContentSharing, System.Collections.Generic.Dictionary`2[System.String,System.Object]]}
Använd kommandot Invoke-MgGraphRequest för att aktivera användarsynkronisering i målklientorganisationen.
Om du får ett
Request_MultipleObjectsWithSameKeyValue
fel kanske du redan har en befintlig princip. Mer information finns i Symptom – Request_MultipleObjectsWithSameKeyValue fel.$Params = @{ userSyncInbound = @{ isSyncAllowed = $true } } Invoke-MgGraphRequest -Method PUT -Uri "https://graph.microsoft.com/v1.0/policies/crossTenantAccessPolicy/partners/$SourceTenantId/identitySynchronization" -Body $Params
Använd kommandot Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization för att verifiera
IsSyncAllowed
att är inställt på Sant.(Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId).UserSyncInbound
IsSyncAllowed ------------- True
Steg 3: Lös in inbjudningar automatiskt i målklientorganisationen
Målklientorganisation
I målklientorganisationen använder du kommandot Update-MgPolicyCrossTenantAccessPolicyPartner för att automatiskt lösa in inbjudningar och förhindra medgivandemeddelanden för inkommande åtkomst.
$AutomaticUserConsentSettings = @{ "InboundAllowed"="True" } Update-MgPolicyCrossTenantAccessPolicyPartner -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId -AutomaticUserConsentSettings $AutomaticUserConsentSettings
Steg 4: Logga in på källklientorganisationen
Källklientorganisation
Starta en instans av PowerShell.
Hämta klientorganisations-ID för käll- och målklientorganisationer och initiera variabler.
$SourceTenantId = "<SourceTenantId>" $TargetTenantId = "<TargetTenantId>"
Använd kommandot Connect-MgGraph för att logga in på källklientorganisationen och godkänna följande nödvändiga behörigheter.
Policy.Read.All
Policy.ReadWrite.CrossTenantAccess
Application.ReadWrite.All
Directory.ReadWrite.All
AuditLog.Read.All
Connect-MgGraph -TenantId $SourceTenantId -Scopes "Policy.Read.All","Policy.ReadWrite.CrossTenantAccess","Application.ReadWrite.All","Directory.ReadWrite.All","AuditLog.Read.All"
Steg 5: Lös in inbjudningar automatiskt i källklientorganisationen
Källklientorganisation
I källklientorganisationen använder du kommandot New-MgPolicyCrossTenantAccessPolicyPartner för att skapa en ny partnerkonfiguration i en åtkomstprincip mellan klientorganisationer mellan källklientorganisationen och målklientorganisationen. Använd målklient-ID:t i begäran.
Om du får felet
New-MgPolicyCrossTenantAccessPolicyPartner_Create: Another object with the same value for property tenantId already exists
kanske du redan har en befintlig konfiguration. Mer information finns i Symptom – nytt MgPolicyCrossTenantAccessPolicyPartner_Create fel.$Params = @{ TenantId = $TargetTenantId } New-MgPolicyCrossTenantAccessPolicyPartner -BodyParameter $Params | Format-List
AutomaticUserConsentSettings : Microsoft.Graph.PowerShell.Models.MicrosoftGraphInboundOutboundPolicyConfiguration B2BCollaborationInbound : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyB2BSetting B2BCollaborationOutbound : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyB2BSetting B2BDirectConnectInbound : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyB2BSetting B2BDirectConnectOutbound : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyB2BSetting IdentitySynchronization : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantIdentitySyncPolicyPartner InboundTrust : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyInboundTrust IsServiceProvider : TenantId : <TargetTenantId> TenantRestrictions : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyTenantRestrictions AdditionalProperties : {[@odata.context, https://graph.microsoft.com/v1.0/$metadata#policies/crossTenantAccessPolicy/partners/$entity], [crossCloudMeetingConfiguration, System.Collections.Generic.Dictionary`2[System.String,System.Object]], [protectedContentSharing, System.Collections.Generic.Dictionary`2[System.String,System.Object]]}
Använd kommandot Update-MgPolicyCrossTenantAccessPolicyPartner för att automatiskt lösa in inbjudningar och förhindra medgivandemeddelanden för utgående åtkomst.
$AutomaticUserConsentSettings = @{ "OutboundAllowed"="True" } Update-MgPolicyCrossTenantAccessPolicyPartner -CrossTenantAccessPolicyConfigurationPartnerTenantId $TargetTenantId -AutomaticUserConsentSettings $AutomaticUserConsentSettings
Steg 6: Skapa ett konfigurationsprogram i källklientorganisationen
Källklientorganisation
I källklientorganisationen använder du kommandot Invoke-MgInstantiateApplicationTemplate för att lägga till en instans av ett konfigurationsprogram från Microsoft Entra-programgalleriet i klientorganisationen.
Invoke-MgInstantiateApplicationTemplate -ApplicationTemplateId "518e5f48-1fc8-4c48-9387-9fdf28b0dfe7" -DisplayName "Fabrikam"
Använd kommandot Get-MgServicePrincipal för att hämta tjänstens huvudnamns-ID och approll-ID.
Get-MgServicePrincipal -Filter "DisplayName eq 'Fabrikam'" | Format-List
AccountEnabled : True AddIns : {} AlternativeNames : {} AppDescription : AppDisplayName : Fabrikam AppId : <AppId> AppManagementPolicies : AppOwnerOrganizationId : <AppOwnerOrganizationId> AppRoleAssignedTo : AppRoleAssignmentRequired : True AppRoleAssignments : AppRoles : {<AppRoleId>} ApplicationTemplateId : 518e5f48-1fc8-4c48-9387-9fdf28b0dfe7 ClaimsMappingPolicies : CreatedObjects : CustomSecurityAttributes : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCustomSecurityAttributeValue DelegatedPermissionClassifications : DeletedDateTime : Description : DisabledByMicrosoftStatus : DisplayName : Fabrikam Endpoints : ErrorUrl : FederatedIdentityCredentials : HomeRealmDiscoveryPolicies : Homepage : https://account.activedirectory.windowsazure.com:444/applications/default.aspx?metadata=aad2aadsync|ISV9.1|primary|z Id : <ServicePrincipalId> Info : Microsoft.Graph.PowerShell.Models.MicrosoftGraphInformationalUrl KeyCredentials : {} LicenseDetails : ...
Initiera en variabel för tjänstens huvudnamns-ID.
Se till att använda tjänstens huvudnamns-ID i stället för program-ID:t.
$ServicePrincipalId = "<ServicePrincipalId>"
Initiera en variabel för approll-ID:t.
$AppRoleId= "<AppRoleId>"
Steg 7: Testa anslutningen till målklientorganisationen
Källklientorganisation
I källklientorganisationen använder du kommandot Invoke-MgGraphRequest för att testa anslutningen till målklientorganisationen och verifiera autentiseringsuppgifterna.
$Params = @{ "useSavedCredentials" = $false "templateId" = "Azure2Azure" "credentials" = @( @{ "key" = "CompanyId" "value" = $TargetTenantId } @{ "key" = "AuthenticationType" "value" = "SyncPolicy" } ) } Invoke-MgGraphRequest -Method POST -Uri "https://graph.microsoft.com/v1.0/servicePrincipals/$ServicePrincipalId/synchronization/jobs/validateCredentials" -Body $Params
Steg 8: Skapa ett etableringsjobb i källklientorganisationen
Källklientorganisation
Skapa ett etableringsjobb för att aktivera etablering i källklientorganisationen.
Fastställ synkroniseringsmallen som ska användas, till exempel
Azure2Azure
.En mall har förkonfigurerade synkroniseringsinställningar.
I källklientorganisationen använder du kommandot New-MgServicePrincipalSynchronizationJob för att skapa ett etableringsjobb baserat på en mall.
New-MgServicePrincipalSynchronizationJob -ServicePrincipalId $ServicePrincipalId -TemplateId "Azure2Azure" | Format-List
Id : <JobId> Schedule : Microsoft.Graph.PowerShell.Models.MicrosoftGraphSynchronizationSchedule Schema : Microsoft.Graph.PowerShell.Models.MicrosoftGraphSynchronizationSchema Status : Microsoft.Graph.PowerShell.Models.MicrosoftGraphSynchronizationStatus SynchronizationJobSettings : {AzureIngestionAttributeOptimization, LookaheadQueryEnabled} TemplateId : Azure2Azure AdditionalProperties : {[@odata.context, https://graph.microsoft.com/v1.0/$metadata#servicePrincipals('<ServicePrincipalId>')/synchro nization/jobs/$entity]}
Initiera en variabel för jobb-ID:t.
$JobId = "<JobId>"
Steg 9: Spara dina autentiseringsuppgifter
Källklientorganisation
I källklientorganisationen använder du kommandot Invoke-MgGraphRequest för att spara dina autentiseringsuppgifter.
$Params = @{ "value" = @( @{ "key" = "AuthenticationType" "value" = "SyncPolicy" } @{ "key" = "CompanyId" "value" = $TargetTenantId } ) } Invoke-MgGraphRequest -Method PUT -Uri "https://graph.microsoft.com/v1.0/servicePrincipals/$ServicePrincipalId/synchronization/secrets" -Body $Params
Steg 10: Tilldela en användare till konfigurationen
Källklientorganisation
För att synkronisering mellan klientorganisationer ska fungera måste minst en intern användare tilldelas till konfigurationen.
I källklientorganisationen använder du kommandot New-MgServicePrincipalAppRoleAssignedTo för att tilldela en intern användare till konfigurationen.
$Params = @{ PrincipalId = "<PrincipalId>" ResourceId = $ServicePrincipalId AppRoleId = $AppRoleId } New-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $ServicePrincipalId -BodyParameter $Params | Format-List
AppRoleId : <AppRoleId> CreatedDateTime : 7/31/2023 10:27:12 PM DeletedDateTime : Id : <Id> PrincipalDisplayName : User1 PrincipalId : <PrincipalId> PrincipalType : User ResourceDisplayName : Fabrikam ResourceId : <ServicePrincipalId> AdditionalProperties : {[@odata.context, https://graph.microsoft.com/v1.0/$metadata#appRoleAssignments/$entity]}
Steg 11: Testa etablering på begäran
Källklientorganisation
Nu när du har en konfiguration kan du testa etablering på begäran med en av dina användare.
I källklientorganisationen använder du kommandot Get-MgServicePrincipalSynchronizationJobSchema för att hämta schemaregel-ID:t.
$SynchronizationSchema = Get-MgServicePrincipalSynchronizationJobSchema -ServicePrincipalId $ServicePrincipalId -SynchronizationJobId $JobId $SynchronizationSchema.SynchronizationRules | Format-List
ContainerFilter : Microsoft.Graph.PowerShell.Models.MicrosoftGraphContainerFilter Editable : True GroupFilter : Microsoft.Graph.PowerShell.Models.MicrosoftGraphGroupFilter Id : <RuleId> Metadata : {defaultSourceObjectMappings, supportsProvisionOnDemand} Name : USER_INBOUND_USER ObjectMappings : {Provision Azure Active Directory Users, , , ...} Priority : 1 SourceDirectoryName : Azure Active Directory TargetDirectoryName : Azure Active Directory (target tenant) AdditionalProperties : {}
Initiera en variabel för regel-ID:t.
$RuleId = "<RuleId>"
Använd kommandot New-MgServicePrincipalSynchronizationJobOnDemand för att etablera en testanvändare på begäran.
$Params = @{ Parameters = @( @{ Subjects = @( @{ ObjectId = "<UserObjectId>" ObjectTypeName = "User" } ) RuleId = $RuleId } ) } New-MgServicePrincipalSynchronizationJobOnDemand -ServicePrincipalId $ServicePrincipalId -SynchronizationJobId $JobId -BodyParameter $Params | Format-List
Key : Microsoft.Identity.Health.CPP.Common.DataContracts.SyncFabric.StatusInfo Value : [{"provisioningSteps":[{"name":"EntryImport","type":"Import","status":"Success","description":"Retrieved User 'user1@fabrikam.com' from Azure Active Directory","timestamp":"2023-07-31T22:31:15.9116590Z","details":{"objectId": "<UserObjectId>","accountEnabled":"True","displayName":"User1","mailNickname":"user1","userPrincipalName":"use ... AdditionalProperties : {[@odata.context, https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.stringKeyStringValuePair]}
Steg 12: Starta etableringsjobbet
Källklientorganisation
Nu när etableringsjobbet har konfigurerats använder du kommandot Start-MgServicePrincipalSynchronizationJob i källklientorganisationen för att starta etableringsjobbet.
Start-MgServicePrincipalSynchronizationJob -ServicePrincipalId $ServicePrincipalId -SynchronizationJobId $JobId
Steg 13: Övervaka etablering
Källklientorganisation
Nu när etableringsjobbet körs använder du kommandot Get-MgServicePrincipalSynchronizationJob i källklientorganisationen för att övervaka förloppet för den aktuella etableringscykeln samt statistik hittills, till exempel antalet användare och grupper som har skapats i målsystemet.
Get-MgServicePrincipalSynchronizationJob -ServicePrincipalId $ServicePrincipalId -SynchronizationJobId $JobId | Format-List
Id : <JobId> Schedule : Microsoft.Graph.PowerShell.Models.MicrosoftGraphSynchronizationSchedule Schema : Microsoft.Graph.PowerShell.Models.MicrosoftGraphSynchronizationSchema Status : Microsoft.Graph.PowerShell.Models.MicrosoftGraphSynchronizationStatus SynchronizationJobSettings : {AzureIngestionAttributeOptimization, LookaheadQueryEnabled} TemplateId : Azure2Azure AdditionalProperties : {[@odata.context, https://graph.microsoft.com/v1.0/$metadata#servicePrincipals('<ServicePrincipalId>')/synchro nization/jobs/$entity]}
Förutom att övervaka statusen för etableringsjobbet använder du kommandot Get-MgAuditLogProvisioning för att hämta etableringsloggarna och hämta alla etableringshändelser som inträffar. Fråga till exempel efter en viss användare och ta reda på om de har etablerats.
Get-MgAuditLogDirectoryAudit | Select -First 10 | Format-List
ActivityDateTime : 7/31/2023 12:08:17 AM ActivityDisplayName : Export AdditionalDetails : {Details, ErrorCode, EventName, ipaddr...} Category : ProvisioningManagement CorrelationId : aaaa0000-bb11-2222-33cc-444444dddddd Id : Sync_aaaa0000-bb11-2222-33cc-444444dddddd_L5BFV_161778479 InitiatedBy : Microsoft.Graph.PowerShell.Models.MicrosoftGraphAuditActivityInitiator1 LoggedByService : Account Provisioning OperationType : Result : success ResultReason : User 'user2@fabrikam.com' was created in Azure Active Directory (target tenant) TargetResources : {<ServicePrincipalId>, } AdditionalProperties : {} ActivityDateTime : 7/31/2023 12:08:17 AM ActivityDisplayName : Export AdditionalDetails : {Details, ErrorCode, EventName, ipaddr...} Category : ProvisioningManagement CorrelationId : aaaa0000-bb11-2222-33cc-444444dddddd Id : Sync_aaaa0000-bb11-2222-33cc-444444dddddd_L5BFV_161778264 InitiatedBy : Microsoft.Graph.PowerShell.Models.MicrosoftGraphAuditActivityInitiator1 LoggedByService : Account Provisioning OperationType : Result : success ResultReason : User 'user2@fabrikam.com' was updated in Azure Active Directory (target tenant) TargetResources : {<ServicePrincipalId>, } AdditionalProperties : {} ActivityDateTime : 7/31/2023 12:08:14 AM ActivityDisplayName : Synchronization rule action AdditionalDetails : {Details, ErrorCode, EventName, ipaddr...} Category : ProvisioningManagement CorrelationId : aaaa0000-bb11-2222-33cc-444444dddddd Id : Sync_aaaa0000-bb11-2222-33cc-444444dddddd_L5BFV_161778395 InitiatedBy : Microsoft.Graph.PowerShell.Models.MicrosoftGraphAuditActivityInitiator1 LoggedByService : Account Provisioning OperationType : Result : success ResultReason : User 'user2@fabrikam.com' will be created in Azure Active Directory (target tenant) (User is active and assigned in Azure Active Directory, but no matching User was found in Azure Active Directory (target tenant)) TargetResources : {<ServicePrincipalId>, } AdditionalProperties : {}
Felsökningstips
Symptom – Otillräckligt behörighetsfel
När du försöker utföra en åtgärd får du ett felmeddelande som liknar följande:
code: Authorization_RequestDenied
message: Insufficient privileges to complete the operation.
Orsak
Antingen har den inloggade användaren inte tillräcklig behörighet eller så måste du samtycka till någon av de behörigheter som krävs.
Lösning
Kontrollera att du har tilldelats de roller som krävs. Se Krav tidigare i den här artikeln.
När du loggar in med Connect-MgGraph kontrollerar du att du anger de nödvändiga omfången. Se Steg 1: Logga in på målklientorganisationen och steg 4: Logga in på källklientorganisationen tidigare i den här artikeln.
Symptom – Nytt MgPolicyCrossTenantAccessPolicyPartner_Create fel
När du försöker skapa en ny partnerkonfiguration får du ett felmeddelande som liknar följande:
New-MgPolicyCrossTenantAccessPolicyPartner_Create: Another object with the same value for property tenantId already exists.
Orsak
Du försöker förmodligen skapa en konfiguration eller ett objekt som redan finns, eventuellt från en tidigare konfiguration.
Lösning
Kontrollera din syntax och att du använder rätt klientorganisations-ID.
Använd kommandot Get-MgPolicyCrossTenantAccessPolicyPartner för att visa en lista över det befintliga objektet.
Om du har ett befintligt objekt kan du behöva göra en uppdatering med Update-MgPolicyCrossTenantAccessPolicyPartner
Symptom – Request_MultipleObjectsWithSameKeyValue fel
När du försöker aktivera användarsynkronisering får du ett felmeddelande som liknar följande:
Invoke-MgGraphRequest: PUT https://graph.microsoft.com/v1.0/policies/crossTenantAccessPolicy/partners/<SourceTenantId>/identitySynchronization
HTTP/1.1 409 Conflict
...
{"error":{"code":"Request_MultipleObjectsWithSameKeyValue","message":"A conflicting object with one or more of the specified property values is present in the directory.","details":[{"code":"ConflictingObjects","message":"A conflicting object with one or more of the specified property values is present in the directory.", ... }}}
Orsak
Du försöker förmodligen skapa en princip som redan finns, eventuellt från en tidigare konfiguration.
Lösning
Kontrollera din syntax och att du använder rätt klientorganisations-ID.
Använd kommandot Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization för att visa en lista över inställningen
IsSyncAllowed
.(Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId).UserSyncInbound
Om du har en befintlig princip kan du behöva göra en uppdatering med hjälp av kommandot Set-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization för att aktivera användarsynkronisering.
$Params = @{ userSyncInbound = @{ isSyncAllowed = $true } } Set-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId -BodyParameter $Params