Exclusividade de SPN e UPN
Autor: Justin Turner, engenheiro sênior de escalonamento de suporte com o grupo do Windows
Observação
Este documento foi criado por um engenheiro de atendimento ao cliente da Microsoft e é destinado a administradores e arquitetos de sistemas experientes que procuram explicações técnicas mais profundas para recursos e soluções no Windows Server 2012 R2 do que aquelas geralmente oferecidas em tópicos do TechNet. No entanto, ele não passou pelas mesmas etapas de edição que eles, por isso a linguagem pode parecer que menos refinada do que a geralmente encontrada no TechNet.
Visão geral
Controladores de Domínio que executam o Windows Server 2012 R2 bloqueiam a criação de SPNs (Nomes de entidade de serviço) e UPNs (Nomes de entidade de usuário) duplicados. Isso inclui casos em que a restauração ou a reanimação de um objeto excluído ou a renomeação de um objeto resultaria em uma duplicata.
Tela de fundo
SPNs (nomes de entidade de serviço) duplicados geralmente ocorrem e resultam em falhas de autenticação, podendo levar à utilização excessiva da CPU LSASS. Não há nenhum método predefinido para bloquear a adição de um SPN ou UPN duplicado. *
Valores de UPN duplicados interrompem a sincronização entre o AD local e o Office 365.
*Setspn.exe costuma ser usado para criar SPNs e, funcionalmente, foi integrado à versão lançada com o Windows Server 2008 que adiciona uma verificação de duplicatas.
Tabela SEQ Tabela \* ARABIC 1: Exclusividade de UPN e SPN
Recurso | Comentário |
---|---|
Exclusividade de UPN | UPNs duplicados interrompem a sincronização de contas do AD locais com serviços baseados no Microsoft Entra ID, como o Office 365. |
Exclusividade de SPN | O Kerberos requer SPNs para autenticação mútua. SPNs duplicados resultam em falhas de autenticação. |
Para obter mais informações sobre os requisitos de exclusividade para UPNs e SPNs, consulte Restrições de exclusividade.
Sintomas
Os códigos de erro 8467 ou 8468, ou seus equivalentes hexadecimais, simbólicos ou de cadeia de caracteres são registrados em várias caixas de diálogo na tela e na ID de evento 2974 no log de eventos do Directory Services. A tentativa de criar um UPN ou SPN duplicado é bloqueada somente nas seguintes circunstâncias:
- A gravação é processada por um DC do Windows Server 2012 R2
Tabela SEQ Tabela \* ARABIC 2: Códigos de erro de exclusividade de UPN e SPN
Decimal | Hex | Simbólico | String |
---|---|---|---|
8647 | 21C7 | ERROR_DS_SPN_VALUE_NOT_UNIQUE_IN_FOREST | A operação falhou porque o valor do SPN fornecido para adição/modificação não é exclusivo em toda a floresta. |
8648 | 21C8 | ERROR_DS_UPN_VALUE_NOT_UNIQUE_IN_FOREST | A operação falhou porque o valor do UPN fornecido para adição/modificação não é exclusivo em toda a floresta. |
A criação do usuário falha se o UPN não é exclusivo
DSA.msc
O nome de logon do usuário escolhido já está em uso nesta empresa. Escolha outro nome de logon e tente novamente.
Modificar uma conta existente:
O nome de logon de usuário especificado já existe na empresa. Especifique um novo, alterando o prefixo ou selecionando um sufixo diferente na lista.
Centro Administrativo do Active Directory (DSAC.exe)
Uma tentativa de criar um usuário no Centro Administrativo do Active Directory com um UPN que já existe retornará o erro a seguir.
Figura SEQ Figura \* ARABIC 1 Erro exibido no Centro Administrativo do AD quando a criação de um usuário falha devido a UPN duplicado
Evento 2974 Origem: ActiveDirectory_DomainService
Figura SEQ Figura \* ARABIC 2 ID de evento 2974 com erro 8648
O evento 2974 lista o valor que foi bloqueado e uma lista de um ou mais objetos (até 10) que já contêm esse valor. Na figura a seguir, você pode ver que o valor dhunt@blue.contoso.com do atributo de UPN já existe em quatro outros objetos. Como esse é um novo recurso no Windows Server 2012 R2, a criação acidental de UPN e SPNs duplicados em um ambiente misto ainda ocorrerá quando DCs de nível inferior processarem a tentativa de gravação.
Figura SEQ Figura \* ARABIC 3 Evento 2974 mostrando todos os objetos que contêm o UPN duplicado
Dica
Examine as IDs de evento 2974 regularmente para:
- identificar tentativas de criar UPN ou SPNs duplicados
- identificar objetos que já contêm duplicatas
8648 = "A operação falhou porque o valor do UPN fornecido para adição/modificação não é exclusivo em toda a floresta."
SetSPN:
Setspn.exe teve a detecção de SPN duplicado integrado desde a versão do Windows Server 2008 ao usar a opção "-S". No entanto, você pode ignorar a detecção de SPN duplicado usando a opção "-A". A criação de um SPN duplicado é bloqueada ao direcionar um DC do Windows Server 2012 R2 usando SetSPN com a opção -A. A mensagem de erro exibida é a mesma exibida ao usar a opção -S: "SPN duplicado encontrado, anulando operação!"
ADSIEDIT:
Operation failed. Error code: 0x21c8
The operation failed because UPN value provided for addition/modification is not unique forest-wide.
000021C8: AtrErr: DSID-03200BBA, #1: 0: 000021C8: DSID-03200BBA, problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 90290 (userPrincipalName)
Figura SEQ Figura \* ARABIC 4 Mensagem de erro exibida em ADSIEdit quando a adição de um UPN duplicado é bloqueada
Windows PowerShell
Windows Server 2012 R2:
PowerShell em execução no Server 2012 direcionado a um DC do Windows Server 2012 R2:
DSAC.exe em execução no Windows Server 2012 direcionado a um DC do Windows Server 2012 R2 DC:
Figura SEQ Figura \* ARABIC 5 DSAC Erro de criação de usuário fora do Windows Server 2012 R2 ao direcionar o DC do Windows Server 2012 R2
Figura SEQ Figura \* ARABIC 6 DSAC Erro de modificação de usuário fora do Windows Server 2012 R2 ao direcionar o DC do Windows Server 2012 R2
Falha na restauração de um objeto que resultaria em um UPN duplicado:
Nenhum evento é registrado quando um objeto falha ao restaurar devido a um UPN/SPN duplicado.
O UPN do objeto deve ser exclusivo para que ele seja restaurado.
Identificar o UPN que existe no objeto na Lixeira
Identificar todos os objetos que têm o mesmo valor
Remover os UPNs duplicados
Identificar o UPN conflitante no objeto excluído usando repadmin.exe
Repadmin /showattr DCName "DN of deleted objects container" /subtree /filter:"(msDS-LastKnownRDN=<NAME>)" /deleted /atts:userprincipalname
repadmin /showattr DCName "CN=Deleted Objects,DC=blue,DC=contoso,DC=com" /subtree /filter:"(msDS-LastKnownRDN=Dianne Hunt2)" /deleted /atts:userprincipalname
C:\>repadmin /showattr winbluedc1 "cn=deleted objects,dc=blue,dc=contoso,dc=com" /subtree /filter:"(msds-lastknownrdn=Dianne Hunt2)" /deleted /atts:userprincipalname
DN: CN=Dianne Hunt2\0ADEL:dd3ab8a4-3005-4f2f-814f-d6fc54a1a1c0,CN=Deleted Object
s,DC=blue,DC=contoso,DC=com
1> userPrincipalName: dhunt@blue.contoso.com
Para identificar todos os objetos com o mesmo UPN: usando Repadmin.exe
repadmin /showattr WinBlueDC1 "DC=blue,DC=contoso,DC=com" /subtree /filter:"(userPrincipalName=dhunt@blue.contoso.com)" /deleted /atts:DN
C:\>repadmin /showattr winbluedc1 "dc=blue,dc=contoso,dc=com" /subtree /filter:"(userPrincipalName=dhunt@blue.contoso.com)" /deleted /atts:DN
DN: CN=Administrator,CN=Users,DC=blue,DC=contoso,DC=com
DN: CN=xouser1,CN=Users,DC=blue,DC=contoso,DC=com
DN: CN=xouser10,CN=Users,DC=blue,DC=contoso,DC=com
DN: CN=xouser100,CN=Users,DC=blue,DC=contoso,DC=com
DN: CN=Dianne Hunt,OU=Marketing,DC=blue,DC=contoso,DC=com
DN: CN=Dianne Hunt2\0ADEL:dd3ab8a4-3005-4f2f-814f-d6fc54a1a1c0,CN=Deleted Objects,DC=blue,DC=contoso,DC=com
Dica
O parâmetro /deleted não documentado anteriormente em repadmin.exe é usado para incluir objetos excluídos no conjunto de resultados
Usando a Pesquisa Global
Abra o Centro Administrativo do Active Directory e navegue até Pesquisa Global
Selecione o botão de opção Converter em LDAP
Digite (userPrincipalName=ConflictingUPN)
- Substitua ConflictingUPN pelo UPN real que está em conflito
Selecione Aplicar.
Usando o Windows PowerShell
Get-ADObject -LdapFilter "(userPrincipalName=dhunt@blue.contoso.com)" -IncludeDeletedObjects -SearchBase "DC=blue,DC=Contoso,DC=com" -SearchScope Subtree -Server winbluedc1.blue.contoso.com
Se o objeto precisar ser restaurado, você precisará remover os UPNs duplicados dos outros objetos. Para apenas um objeto, basta usar ADSIEdit para remover a duplicata. Se houver vários objetos com duplicatas, o Windows PowerShell poderá ser a melhor ferramenta a ser usada.
Para anular o atributo UserPrincipalName usando o Windows PowerShell:
Observação
O atributo userPrincipalName é um atributo de valor único, portanto, esse procedimento removerá apenas o UPN duplicado.
SPN duplicado
Figura SEQ Figura \* ARABIC 8 Mensagem de erro exibida em ADSIEdit quando a adição de um SPN duplicado é bloqueada
Registrada no log de eventos do Directory Services há uma ActiveDirectory_DomainService ID de evento 2974.
Operation failed. Error code: 0x21c7
The operation failed
The attribute value provided is not unique in the forest or partition. Attribute:
servicePrincipalName Value=<SPN>
<Object DN> Winerror: 8467
Figura SEQ Figura \* ARABIC 9 Erro registrado quando a criação do SPN duplicado é bloqueada
Fluxo de trabalho
Se DC == GC
Nenhuma chamada offbox necessária, a consulta pode ser atendida localmente
Ocorrência de UPN
Consultar o índice UPN em toda a floresta local em busca do UPN fornecido (userPrincipalName; um índice global)
Se as entradas retornadas == 0 –> a gravação continuará
Se as entradas retornadas != 0 –> a gravação falhará
Evento registrado
Também retorna um erro estendido:
8648:
ERROR_DS_UPN_VALUE_NOT_UNIQUE_IN_FOREST
Ocorrência de SPN
Consultar o índice SPN em toda a floresta local em busca do SPN fornecido (servicePrincipalName; um índice global)
Se as entradas retornadas == 0 –> a gravação continuará
Se as entradas retornadas != 0 –> a gravação falhará
Evento registrado
Também retorna um erro estendido:
8647:
ERROR_DS_SPN_VALUE_NOT_UNIQUE_IN_FOREST
Se DC != GC
Chamada offbox desejável, mas não crítica, ou seja, esta é uma verificação de exclusividade de melhor esforço
A verificação continuará no DIT local somente se o GC não puder ser localizado
Evento registrado para indicar isso
Ocorrência de UPN
Enviar consulta LDAP no GC mais próximo? Consultar o índice UPN em toda a floresta do GC em busca do UPN fornecido (userPrincipalName; um índice global)
Se as entradas retornadas == 0 –> a gravação continuará
Se as entradas retornadas != 0 –> a gravação falhará
Evento registrado
Também retorna um erro estendido:
8648:
ERROR_DS_UPN_VALUE_NOT_UNIQUE_IN_FOREST
Ocorrência de SPN
Enviar consulta LDAP no GC mais próximo? Consultar o índice SPN em toda a floresta do GC em busca do SPN fornecido (servicePrincipalName; um índice global)
Se as entradas retornadas == 0 –> a gravação continuará
Se as entradas retornadas != 0 –> a gravação falhará
Evento registrado
Também retorna um erro estendido:
8647:
ERROR_DS_SPN_VALUE_NOT_UNIQUE_IN_FOREST
Quando objetos excluídos são reanimados, os valores de SPN ou UPN presentes são verificados quanto à exclusividade. Se uma duplicata for encontrada, a solicitação falhará.
Em determinadas alterações de atributo, como Nome do Host DNS, Nome da Conta SAM etc, os SPNs são atualizados adequadamente quando a modificação é feita. No processo, SPNs obsoletos são excluídos e novos SPNs são construídos e adicionados ao banco de dados. As modificações de atributo necessárias em relação às quais esse caminho é disparado são:
ATT_DNS_HOST_NAME
ATT_MS_DS_ADDITIONAL_DNS_HOST_NAME
ATT_SAM_ACCOUNT_NAME
ATT_MS_DS_ADDITIONAL_SAM_ACCOUNT_NAME
ATT_SERVER_REFERENCE_BL
ATT_USER_ACCOUNT_CONTROL
Se qualquer um dos novos valores de SPN for duplicado, a modificação falhará. Da lista acima, os atributos importantes são ATT_DNS_HOST_NAME (Nome do computador) e ATT_SAM_ACCOUNT_NAME (Nome da conta SAM).
Experimente: Explorar a exclusividade de SPN e UPN
Esta é a primeira de várias atividades "Experimente" no módulo. Não há um guia de laboratório separado para este módulo. As atividades Experimente são atividades livres que permitem explorar o material da lição no ambiente do laboratório. Você tem a opção de seguir o prompt ou sair do script e criar sua atividade.
Observação
- Esta é a primeira de várias atividades "Experimente".
- Não há um guia de laboratório separado para este módulo.
- As atividades Experimente são essencialmente atividades livres que permitem explorar o material da lição no ambiente de laboratório.
- Você tem a opção de seguir o prompt ou sair do script e criar sua atividade.
- Embora nem todas as seções tenham um prompt Experimente, ainda incentivamos você a explorar o conteúdo da lição no laboratório, quando apropriado.
Experimente a exclusividade de SPN e UPN. Siga estes prompts ou conclua os seus.
Criar usuários com UPNs
Criar contas com SPNs
Crie um usuário com um UPN já definido anteriormente ou altere o UPN de uma conta existente. Faça o mesmo para um SPN em outra conta
Preencher uma conta de usuário existente com um UPN já em uso
- Usando o PowerShell, ADSIEDIT ou o Centro Administrativo do Active Directory (DSAC.exe)
Preencher uma conta existente com um SPN já em uso
- Usando o Windows PowerShell, ADSIEDIT ou SetSPN
Observe os erros
Opcionalmente
Verifique com o instrutor da sala de aula se não há problema em habilitar a Lixeira do AD no Centro Administrativo do Active Directory. Se não houver problema, vá para a próxima etapa.
Preencher o UPN em uma conta de usuário
Excluir a conta
Preencher uma conta diferente com o mesmo UPN que a conta excluída
Tentar usar a GUI da Lixeira para restaurar a conta
Imagine que você se depara com o erro que viu na etapa anterior. (e não tem um histórico das etapas que você acabou de executar). Sua meta é realizar a restauração da conta. Consulte as etapas da pasta de trabalho, por exemplo.