Поделиться через


Настройка синхронизации между клиентами с помощью PowerShell или API Microsoft Graph

В этой статье описаны основные шаги по настройке синхронизации между клиентами с помощью Microsoft Graph PowerShell или API Microsoft Graph. При настройке идентификатор Microsoft Entra id автоматически подготавливает и отменяет подготовку пользователей B2B в целевом клиенте. Подробные инструкции, описанные в Центре администрирования Microsoft Entra, см. в разделе "Настройка синхронизации между клиентами".

Схема, демонстрирующая синхронизацию между исходным клиентом и целевым клиентом.

Необходимые компоненты

Значок исходного клиента.
Исходный клиент

Значок целевого клиента.
Целевой клиент

Шаг 1. Вход в целевой клиент

Значок целевого клиента.
Целевой клиент

  1. Запустите PowerShell.

  2. При необходимости установите пакет SDK Для Microsoft Graph PowerShell.

  3. Получите идентификатор клиента исходного и целевого клиентов и инициализировать переменные.

    $SourceTenantId = "<SourceTenantId>"
    $TargetTenantId = "<TargetTenantId>"
    
  4. Используйте команду Connect-MgGraph, чтобы войти в целевой клиент и предоставить согласие на следующие необходимые разрешения.

    • Policy.Read.All
    • Policy.ReadWrite.CrossTenantAccess
    Connect-MgGraph -TenantId $TargetTenantId -Scopes "Policy.Read.All","Policy.ReadWrite.CrossTenantAccess"
    

Шаг 2. Включение синхронизации пользователей в целевом клиенте

Значок целевого клиента.
Целевой клиент

  1. В целевом клиенте используйте команду New-MgPolicyCrossTenantAccessPolicyPartner , чтобы создать новую конфигурацию партнера в политике доступа между целевым клиентом и исходным клиентом. Используйте идентификатор исходного клиента в запросе.

    Если вы получите ошибку New-MgPolicyCrossTenantAccessPolicyPartner_Create: Another object with the same value for property tenantId already exists, возможно, у вас уже есть существующая конфигурация. Дополнительные сведения см. в разделе "Симптом" — ошибка new-MgPolicyCrossTenantAccessPolicyPartner_Create.

    $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]]}
    
  2. Используйте команду Invoke-MgGraphRequest, чтобы включить синхронизацию пользователей в целевом клиенте.

    Если возникает Request_MultipleObjectsWithSameKeyValue ошибка, возможно, у вас уже есть существующая политика. Дополнительные сведения см. в разделе "Симптом" — Request_MultipleObjectsWithSameKeyValue ошибка.

    $Params = @{
        userSyncInbound = @{
            isSyncAllowed = $true
        }
    }
    Invoke-MgGraphRequest -Method PUT -Uri "https://graph.microsoft.com/v1.0/policies/crossTenantAccessPolicy/partners/$SourceTenantId/identitySynchronization" -Body $Params
    
  3. Используйте команду Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization, чтобы проверитьIsSyncAllowed, задано значение True.

    (Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId).UserSyncInbound
    
    IsSyncAllowed
    -------------
    True
    

Шаг 3. Автоматическое активация приглашений в целевом клиенте

Значок целевого клиента.
Целевой клиент

  1. В целевом клиенте используйте команду Update-MgPolicyCrossTenantAccessPolicyPartner для автоматического активации приглашений и подавления запросов на согласие для входящего доступа.

    $AutomaticUserConsentSettings = @{
        "InboundAllowed"="True"
    }
    Update-MgPolicyCrossTenantAccessPolicyPartner -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId -AutomaticUserConsentSettings $AutomaticUserConsentSettings
    

Шаг 4. Вход в исходный клиент

Значок исходного клиента.
Исходный клиент

  1. Запустите экземпляр PowerShell.

  2. Получите идентификатор клиента исходного и целевого клиентов и инициализировать переменные.

    $SourceTenantId = "<SourceTenantId>"
    $TargetTenantId = "<TargetTenantId>"
    
  3. Используйте команду Connect-MgGraph, чтобы войти в исходный клиент и предоставить согласие на следующие необходимые разрешения.

    • 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"
    

Шаг 5. Автоматическое активация приглашений в исходном клиенте

Значок исходного клиента.
Исходный клиент

  1. В исходном клиенте используйте команду New-MgPolicyCrossTenantAccessPolicyPartner , чтобы создать новую конфигурацию партнера в политике доступа между исходным клиентом и целевым клиентом. Используйте идентификатор целевого клиента в запросе.

    Если вы получите ошибку New-MgPolicyCrossTenantAccessPolicyPartner_Create: Another object with the same value for property tenantId already exists, возможно, у вас уже есть существующая конфигурация. Дополнительные сведения см. в разделе "Симптом" — ошибка new-MgPolicyCrossTenantAccessPolicyPartner_Create.

    $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]]}
    
    
  2. Используйте команду Update-MgPolicyCrossTenantAccessPolicyPartner для автоматического активации приглашений и подавления запросов согласия для исходящего доступа.

    $AutomaticUserConsentSettings = @{
        "OutboundAllowed"="True"
    }
    Update-MgPolicyCrossTenantAccessPolicyPartner -CrossTenantAccessPolicyConfigurationPartnerTenantId $TargetTenantId -AutomaticUserConsentSettings $AutomaticUserConsentSettings
    

Шаг 6. Создание приложения конфигурации в исходном клиенте

Значок исходного клиента.
Исходный клиент

  1. В исходном клиенте используйте команду Invoke-MgInstantiateApplicationTemplate , чтобы добавить экземпляр приложения конфигурации из коллекции приложений Microsoft Entra в клиент.

    Invoke-MgInstantiateApplicationTemplate -ApplicationTemplateId "518e5f48-1fc8-4c48-9387-9fdf28b0dfe7" -DisplayName "Fabrikam"
    
  2. Используйте команду Get-MgServicePrincipal, чтобы получить идентификатор субъекта-службы и идентификатор роли приложения.

    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                      :
    
    ...
    
  3. Инициализировать переменную для идентификатора субъекта-службы.

    Не забудьте использовать идентификатор субъекта-службы вместо идентификатора приложения.

    $ServicePrincipalId = "<ServicePrincipalId>"
    
  4. Инициализировать переменную для идентификатора роли приложения.

    $AppRoleId= "<AppRoleId>"
    

Шаг 7. Проверка подключения к целевому клиенту

Значок исходного клиента.
Исходный клиент

  1. В исходном клиенте используйте команду Invoke-MgGraphRequest для проверки подключения к целевому клиенту и проверки учетных данных.

    $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
    

Шаг 8. Создание задания подготовки в исходном клиенте

Значок исходного клиента.
Исходный клиент

Чтобы включить подготовку, создайте задание подготовки в исходном клиенте.

  1. Определите шаблон синхронизации, используемый, например Azure2Azure.

    Шаблон имеет предварительно настроенные параметры синхронизации.

  2. В исходном клиенте используйте команду New-MgServicePrincipalSynchronizationJob для создания задания подготовки на основе шаблона.

    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]}
    
  3. Инициализация переменной для идентификатора задания.

    $JobId = "<JobId>"
    

Шаг 9. Сохранение учетных данных

Значок исходного клиента.
Исходный клиент

  1. В исходном клиенте используйте команду Invoke-MgGraphRequest для сохранения учетных данных.

    $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
    

Шаг 10. Назначение пользователя конфигурации

Значок исходного клиента.
Исходный клиент

Чтобы синхронизация между клиентами работала, необходимо назначить по крайней мере одного внутреннего пользователя конфигурации.

  1. В исходном клиенте используйте команду New-MgServicePrincipalAppRoleAssignedTo , чтобы назначить внутреннего пользователя конфигурации.

    $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]}
    

Шаг 11. Проверка подготовки по запросу

Значок исходного клиента.
Исходный клиент

Теперь, когда у вас есть конфигурация, можно протестировать подготовку по запросу с одним из пользователей.

  1. В исходном клиенте используйте команду Get-MgServicePrincipalSynchronizationJobSchema , чтобы получить идентификатор правила схемы.

    $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 : {}
    
  2. Инициализировать переменную для идентификатора правила.

    $RuleId = "<RuleId>"
    
  3. Используйте команду New-MgServicePrincipalSynchronizationJobOnDemand для подготовки тестового пользователя по запросу.

    $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]}
    

Шаг 12. Запуск задания подготовки

Значок исходного клиента.
Исходный клиент

  1. Теперь, когда задание подготовки настроено в исходном клиенте, используйте команду Start-MgServicePrincipalSynchronizationJob для запуска задания подготовки.

    Start-MgServicePrincipalSynchronizationJob -ServicePrincipalId $ServicePrincipalId -SynchronizationJobId $JobId
    

Шаг 13. Мониторинг подготовки

Значок исходного клиента.
Исходный клиент

  1. Теперь, когда задание подготовки выполняется в исходном клиенте, используйте команду Get-MgServicePrincipalSynchronizationJob для отслеживания хода выполнения текущего цикла подготовки, а также статистики до даты, например количества пользователей и групп, созданных в целевой системе.

    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]}
    
  2. Помимо мониторинга состояния задания подготовки, используйте команду Get-MgAuditLogProvisioning для получения журналов подготовки и получения всех происходящих событий подготовки. Например, можно отправить запрос конкретному пользователю, чтобы узнать, насколько успешно прошла для него подготовка.

    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 : {}
    

Советы по устранению неполадок

Симптом — ошибка с недостаточными привилегиями

При попытке выполнить действие вы получите сообщение об ошибке, аналогичное следующему:

code: Authorization_RequestDenied
message: Insufficient privileges to complete the operation.

Причина

Пользователь, вошедшего в систему, не имеет достаточных привилегий, или необходимо предоставить согласие на одно из необходимых разрешений.

Решение

  1. Убедитесь, что вам назначены необходимые роли. См . предварительные требования, приведенные ранее в этой статье.

  2. При входе с помощью Connect-MgGraph убедитесь, что укажите необходимые области. См. шаг 1. Вход в целевой клиент и шаг 4. Вход в исходный клиент выше в этой статье.

Симптом — ошибка new-MgPolicyCrossTenantAccessPolicyPartner_Create

При попытке создать новую конфигурацию партнера вы получите сообщение об ошибке, аналогичное следующему:

New-MgPolicyCrossTenantAccessPolicyPartner_Create: Another object with the same value for property tenantId already exists.

Причина

Скорее всего, вы пытаетесь создать конфигурацию или объект, который уже существует, возможно, из предыдущей конфигурации.

Решение

  1. Проверьте синтаксис и используете правильный идентификатор клиента.

  2. Используйте команду Get-MgPolicyCrossTenantAccessPolicyPartner для перечисления существующего объекта.

  3. Если у вас есть объект, может потребоваться выполнить обновление с помощью Update-MgPolicyCrossTenantAccessPolicyPartner

Симптом — ошибка Request_MultipleObjectsWithSameKeyValue

При попытке включить синхронизацию пользователей вы получите сообщение об ошибке, аналогичное следующему:

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.", ... }}}

Причина

Скорее всего, вы пытаетесь создать политику, которая уже существует, возможно, из предыдущей конфигурации.

Решение

  1. Проверьте синтаксис и используете правильный идентификатор клиента.

  2. Чтобы получить список IsSyncAllowed параметров, используйте команду Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization.

    (Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId).UserSyncInbound
    
  3. Если у вас есть политика, может потребоваться выполнить обновление с помощью команды Set-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization , чтобы включить синхронизацию пользователей.

    $Params = @{
        userSyncInbound = @{
            isSyncAllowed = $true
        }
    }
    Set-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId -BodyParameter $Params
    

Следующие шаги