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


Настройка синхронизации между клиентами с помощью 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. Используйте команду Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization, чтобы получить список настройки IsSyncAllowed.

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

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

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