Lista de alguns dos erros comuns ao executar o UST e dicas para resolvê-los
FileNotFoundError: [Errno 2]
Exemplo de saída de erro do console:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\USER\\.pex\\install\\pycryptodome [...]'
Pode aparecer no Windows devido a caminhos com mais de 256 caracteres.
Dica: Crie uma variável de ambiente chamada PEX_ROOT com o valor C:\pex (se o script for executado a partir do C: ou alterar a letra para corresponder). Às vezes, é necessário reiniciar o sistema para que ele entre em vigor.
não é possível abrir o arquivo 'user-sync.pex': [Errno 2]
Exemplo de saída de erro do console:
python: can't open file 'user-sync.pex': [Errno 2] No such file or directory
Dica: Certifique-se de executar a linha de comando python de dentro da pasta onde o usuário-sync.pex está localizado.
Exemplo de saída de erro do console:
2018-01-01 11:49:42 28102 WARNING umapi - UMAPI timeout...service unavailable (code 429 on try 1)
2018-01-01 11:49:42 28102 WARNING umapi - Next retry in 42 seconds...
Dica: Essas mensagens de aviso são normais. Quando ocupado, o servidor responde com o código HTTP 429, portanto, uma nova tentativa pode resolvê-lo. O UST vem com um mecanismo de retirada exponencial para repetir a chamada, aumentando o tempo entre as tentativas. O script é interrompido após três tentativas com falha.
error.user.pertence_to_another_org
Exemplo de entrada de registro (modo de depuração):
2018-01-01 11:49:42 28102 ERROR umapi.action - Error in requestID: action_1 (User: {'user': 'myuser@domain2.com', 'requestID':'action_1'}, Command: {'createFederatedID': {'email': 'myuser@domain2.com', 'country': 'US', 'option': 'ignoreIfAlreadyExists', 'firstname': 'fname', 'lastname': 'lname'}}): code: "error.user.belongs_to_another_org" message: "Illegal to invite user from another organization's owned auth src"
Dica: O domínio usado para criar a conta pode não ser reivindicado/confiável em suas organizações. Um sinalizador ou ponto verde deve ser exibido para os domínios ativos em Admin Console -> Configurações. Se não for esse o caso, concluir o processo de reivindicação de domínio pode resolvê-lo.
Exemplo de entrada de registro (modo de depuração):
2018-01-01 12:34:23 13383 ERROR umapi.action - Error in requestID: action_6 (User: {'user': ‘user@domain.com’, 'requestID': 'action_6'}, Command: {'createEnterpriseID': {'email': 'user@domain.com', 'option': 'updateIfAlreadyExists', 'firstname': 'test', 'lastname': 'user', 'country': ‘US’}}): code: "error.user.type_mismatch" message: "The user type requested for the invite does not match the claimed domain type"
Dica: É feita uma tentativa de criar um tipo de conta federatedID, mas o diretório é criado para uso corporativo ou vice-versa. Pesquise o atributo user_identity_type no arquivo user-sync-config.yml. Modifique o valor de acordo com o tipo de diretório exibido no Admin Console (Configurações > Identidade > Domínios > valor do tipo de Diretório para o domínio especificado).
Exemplo de entrada de registro (modo de depuração):
Exemplo de saída de erro do console:
Failed to execute PEX file, missing compatible dependencies for:
pyyaml
cryptography
cffi
umapi-client
pycryptodome
pyldap
psutil
user-sync
Dicas:
a) Verifique se a versão do Python instalada no sistema é a versão de 32 bits. Desinstale o sistema de 32 bits e instale a versão de 64 bits para corrigir o problema.
b) Verifique se a versão user-sync.pex baixada do GitHub corresponde à versão do Python e ao tipo de sistema operacional. Por exemplo, user-sync-v2.3-win64-py365.O zip deve ser baixado para Windows de 64 bits e Python 3.
Usar a versão mais recente de Python nem sempre é uma boa ideia. Tentar combinar com a versão Python seria ótimo, o .pex foi criado em primeiro lugar. Siga o sufixo do arquivo .zip baixado para identificar qual versão do Python funcionaria. Para o exemplo acima (user-sync-v2.3-win64-py365.zip), é possível identificar o Python 3.6.5.
Erro ao descriptografar a chave privada
Exemplo de entrada de registro (modo de depuração):
2018-01-01 09:52:23 7920 DEBUG umapi - umapi: reading private key data from file C:\path\to\private.key
2018-01-01 09:52:23 7920 CRITICAL main - umapi configuration.enterprise: Error decrypting private key, either the password is wrong or: RSA key format is not supported
Dicas:
a) Às vezes, a chave privada pode conter alguns caracteres indefinidos ou linhas vazias inseridas por engano. Tente remover as linhas vazias ou regenerar a chave privada e pública do par.
b) Não use o atributo umapi_private_key_data se você estiver executando o script no Windows. Em vez disso, criptografe a chave e armazene a senha no Gerenciador de credenciais.
c) Experimente uma chave privada RSA256/2048 bits, se você usar um formato diferente.
d) É possível que você configure o secure_priv_key_pass_key: umapi_private_key_passwords dentro do arquivo connector-umapi.yml. Nesse caso, certifique-se de que a entrada no Repositório de credenciais para este valor e os valores associados correspondem (veja abaixo).
Nenhum valor no armazenamento seguro para o usuário...
Exemplo de entrada de registro (modo de depuração):
2018-01-01 09:52:23 7920 CRITICAL main - umapi CRITICAL main - umapi configuration.enterprise: No value in secure storage for user "someUUIDvalue@AdobeOrg", key "umapi_api_key"
Dicas:
a) A entrada do Repositório de credenciais de umapi_api_key pode estar ausente. Crie a entrada no Repositório de credenciais. A documentação de ajuda pode ser encontrada aqui.
b) Pode ser que o valor tenha sido adicionado ao Repositório de credenciais em outra conta de usuário. No entanto, para o usuário conectado no momento, essa entrada está ausente. Adicione-o, se necessário, ou mude as contas de usuário.
error.internal.exceptionflys / error.unauthorised
Exemplo de saída de erro do console:
umapi_client.error.RequestError: Request Error (401): {"lastPage":false,"result":"error.internal.exceptionflys","message":"Failed to exchange token"}
OR
"umapi_client.error.RequestError: Request Error (401): {"lastPage":false,"result":"error.unauthorized","message":"Failed to authenticate provided token"}"
Dica: Pode ser que em Admin Console -> Configurações -> Configurações de autenticação haja outra opção escolhida que não é a opção Mais fácil para usuários (a senha nunca expira). Se a opção Mais seguro ou Completamente seguro estiver ativada, ela poderá expirar a senha da Conta técnica vinculada à integração.
Para corrigir o problema, uma nova integração deve ser criada. Certifique-se de que os metadados também sejam renovados no arquivo connector-umapi.yml.
Uma correção foi implantada para ela, mas pode afetar integrações criadas antes de outubro de 2018.
Falha ao estabelecer uma nova conexão [Erro 10061]
Exemplo de saída de erro do console:
ConnectionError: HTTPSConnectionPool(host='usermanagement.adobe.io', port=443): Max retries exceeded with url: /v2/usermanagement/users/someUUID@AdobeOrg/0?directOnly=True (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x00000000027B9630>: Failed to establish a new connection: [Errno 10061] No connection could be made because the target machine actively refused it',))
Dica:
Está relacionado a que o UST não pode se conectar aos endpoints de API públicos. As configurações locais podem impedir o acesso devido a regras de firewall, proxy bloqueando o tráfego, configurações de conta para acesso à Internet e muito mais.
Em algumas situações, pode ser útil adicionar essas duas variáveis de ambiente:
http_proxy e valor associado do formato http://<proxy do host>:<port>
https_proxy e valor associado do formato https://<proxy do host>:<port>
Em outros casos, permitir o acesso a esses endpoints pode ajudar:
ims-na1.adobelogin.com:443
usermanagement.adobe.io:443
Isso só pode ser resolvido localmente, limpando o acesso aos endpoints acima da conta em execução.
Os metaescopos no JWT não são um subconjunto dos metaescopos no vínculo
Exemplo de entrada de registro (modo de depuração):
2017-07-07 09:01:37 4916 CRITICAL main - Connection to org [...] at endpoint https://usermanagement.adobe.io/v2/usermanagement failed: Unable to authorise against https://ims-na1.adobelogin.com/ims/exchange/jwt: Response Code: 400, Response Text: {"error_description":"The metascopes in the JWT are not a subset of the metascopes in the binding.","error":"invalid_scope"}
Dica: Acesse a integração criada em https://console.adobe.io/projects e verifique o menu esquerdo onde as APIs estão listadas. Verifique se a API do User Management foi adicionada como um serviço (aparece na lista).
Não foram encontrados vínculos válidos para combinação de conta técnica e organização
Exemplo de entrada de registro (modo de depuração):
2017-07-07 09:01:37 4916 CRITICAL main - UMAPI connection to org id 'someUUIDvalue@AdobeOrg' failed: Unable to authorize against https://ims-na1.adobelogin.com/ims/exchange/jwt:
Response Code: 400, Response Text: {"error_description":"No valid bindings were found for organization and technical account combination","error":"invalid_token"}
Dicas:
a) Isso pode ocorrer porque o valor tech_acct no arquivo connector-umapi.yml corresponde a outro valor que não é o da ID da conta técnica na integração em https://console.adobe.io. Verifique o valor da ID da conta técnica da integração atual e copie-o neste arquivo.
b) Também pode ocorrer porque o certificado público da integração expirou. Renove a chave privada e pública. Em seguida, faça upload da chave pública e substitua a chave privada antiga pela nova chave. Verifique o caminho dentro do arquivo connector-umapi.yml para apontar para o arquivo correto.
c) Verificar se a integração foi feita para a organização correta. Selecione a Organização na lista suspensa localizada no canto superior esquerdo em https://console.adobe.io/integrations. Em seguida, verifique o valor da ID da conta técnica da integração ativa junto com outros metadados (ID da organização, segredo e ID do cliente).
SSL: CERTIFICATE_VERIFY_FAILED
Exemplo de entrada de registro (modo de depuração):
2017-07-07 09:01:37 4916 CRITICAL main - UMAPI connection to org id 'someUUIDvalue@AdobeOrg' failed: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)
Dica: Isso ocorre porque pode haver alguma inspeção SSL habilitada no servidor proxy (configuração de ambiente local)
Solução1: Obtenha o certificado CA do firewall no formato PEM (suponha que seu nome seja ert.crt). Se o formato DER for usado, transforme-o em PEM usando o comando openssl:
openssl x509 -inform DER -in thecert.crt -out thecert.pem -outform PEM
Observação: Se não tiver certeza de que o arquivo .crt já está no formato PEM, execute essas linhas de comando primeiro e veja qual falha.
openssl x509 -text -inform DER -in thecert.crt
openssl x509 -text -inform PEM -in thecert.crt
Se o DER falhar, você já terá o arquivo no formato PEM, portanto renomeie o ert.crt para ert.pem, caso contrário, transforme-o em PEM usando a primeira linha de comando openssl acima.
Em seguida, crie uma variável de ambiente chamada REQUESTS_CA_BUNDLE e defina seu valor como o caminho para o arquivo ert.pem.
Solução2: No Windows, nos casos em que a ferramenta é executada a partir de um driver diferente daquele em que o SO e o Python estão instalados. Nesse caso, ele não pode acessar o pacote de certificados da CA raiz confiáveis. Mover o script inteiro na unidade na qual o SO existe pode ser uma solução. Se não for uma opção, o arquivo cacert que contém todas as CAs raiz confiáveis deve ser usado como destino para a variável de ambiente REQUESTS_CA_BUNDLE. Se um proxy inspeciona o tráfego SSL, o conteúdo do certificado da CA raiz deve ser copiado dentro do arquivo cacert.pem para verificar os certificados.
Observação: Uma instalação padrão do Python teria o pacote de certificados em C:\Python36\Lib\site-packages\certifi\cacert.pem.
Solução3: Desative a inspeção SSL no lado do proxy para os endpoints da API ims-na1.adobelogin.com e usermanagement.adobe.io
Nenhum grupo encontrado [...]
Exemplo de entrada de registro (modo de depuração):
2018-01-01 09:01:37 4916 WARNING ldap - No group found for: Name_Of_The_Group
Dicas:
a) Este grupo não existe no LDAP com esse nome exato; corrija-o adicionando o nome LDAP correto do grupo
b) O grupo não pode ser descoberto no base_dn declarado (consulte o arquivo connector-ldap.yml). Altere o valor base_dn para que contenha o grupo mencionado (ocorre principalmente quando base_dn aponta para alguma OU).
Exemplo de entrada de registro (modo de depuração):
2018-01-01 11:25:45 1 ERROR umapi.action - Error in requestID: action_1 (User: {'user': 'myuser@domain.com', 'useAdobeID': True, 'requestID': 'action_1'}, Command: {'add': {'product': ['group_name']}}): code: "error.group.not_found" message: "Group my_group_name was not found"
Dica: O group_name de user-group na saída acima não existe no lado da Adobe, portanto, vá em frente e crie-o. Se a intenção era definir o nome de um PLC em vez de um grupo de usuários, então consulte esta página de documentação para obter uma explicação mais visual.
Exemplo de entrada de registro (modo de depuração):
2018-09-05 10:58:08 96329 CRITICAL main - Connection to org some_Org_UUID@AdobeOrg at endpoint https://usermanagement.adobe.io/v2/usermanagement failed: dlopen(/Users/user/.pex/install/cryptography-2.3-cp37-cp37m-macosx_10_12_x86_64.whl.f77d5cc74b0deef9f1df7eacfe5f5ea57ed94a63/cryptography-2.3-cp37-cp37m-macosx_10_12_x86_64.whl/cryptography/hazmat/bindings/_openssl.abi3.so, 2): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
Referenced from: /Users/user/.pex/install/cryptography-2.3-cp37-cp37m-macosx_10_12_x86_64.whl.f77d5cc74b0deef9f1df7eacfe5f5ea57ed94a63/cryptography-2.3-cp37-cp37m-macosx_10_12_x86_64.whl/cryptography/hazmat/bindings/_openssl.abi3.so
Reason: image not found
2018-09-05 10:58:08 96329 INFO main - ========== End Run (User Sync version: 2.3) (Total time: 0:00:00)
Dica: Esse erro foi registrado em um macOS High Sierra, ao usar o UST v2.3, usando o Python 3.7.0. A execução de brew install openssl dentro do Terminal corrigiu esse problema nessa situação específica.
Não foi possível criar uma pessoa para o tipo 2 ou 3 [...]
Exemplo de entrada de registro (modo de depuração):
2019-07-28 07:17:51 2220 ERROR umapi.action - Error in requestID: action_1 (User: {'user': 'user@claimed-domain.com', 'requestID': 'action_1'}, Command: {'createFederatedID': {'email': 'user@claimed-domain.com', 'option': 'updateIfAlreadyExists', 'firstname': 'First', 'lastname': 'Last', 'country': 'US'}}): code: "error.internal.create_failed" message: "Could not create person for type 2 or 3. Renga result is NOT_ALLOWED, Resource is externally managed and token is missing the GROUP_SOURCE_UPDATE purpose."
Às vezes, o @claimed-domain.com é de propriedade de uma organização diferente que configurou um conector do Azure ou do Google para gerenciar a sincronização de contas com o Admin Console. Esse mesmo domínio é então atribuído a uma organização diferente que usa a ferramenta User Sync para sincronizar contas do formato @claimed-domain.com
Causa: A mensagem registrada é exibida quando a ferramenta Sincronizar extrai a conta
user@claimed-domain.com de um servidor LDAP para criá-la na organização secundária. No entanto, a conta ainda não foi criada/sincronizada na organização principal por meio do conector do Azure ou do Google.
Dica: Tente criar/sincronizar a conta user@claimed-domain.com na Organização usando o conector do Azure ou do Google e tente sincronizar novamente com o UST na Organização fiduciária.
Falha de LDAP inesperada ao ler [...]
Exemplo de entrada de registro (modo de depuração):
2018-09-05 10:58:08 96329 6348 CRITICAL main - Unexpected LDAP failure reading group info: {'desc': 'Referral', 'info': 'Referral:\nldap://domain.local/DC=sub,DC=domain,DC=local'}
Causa possível: Os grupos de interesse estão localizados em um subdomínio, mas o valor do host é um dos domínios raiz.
Dica: Altere o valor do host para um dos subdomínios em que os grupos de usuários podem ser encontrados. Se os usuários ou grupos de interesse estiverem localizados no domínio raiz e em seus subdomínios, use a porta de catálogo global no domínio raiz. Modifique os grupos no(s) subdomínio(s) para que sejam Universal em vez de Global. Exemplo de valor de host usando o catálogo global:: ldap://domain.local:3268 ou ldaps://domain.local:3269
Neste último cenário, se a porta de catálogo global for usada, certifique-se de que o valor base_dn não use nenhum valor:
base_dn: ""