Lista niektórych często spotykanych błędów przy korzystaniu z narzędzia UST i sposoby ich rozwiązywania
FileNotFoundError: [Errno 2]
Przykładowe dane wyjściowe błędu konsoli:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\USER\\.pex\\install\\pycryptodome [...]'
Może pojawić się w systemie Windows z powodu przekroczenia 256 znaków w ścieżce.
Wskazówka: utwórz zmienną środowiskową o nazwie PEX_ROOT z wartością C:\pex (jeżeli skrypt jest uruchamiany z dysku C:, w innym wypadku zmień odpowiednio literę). Czasami należy ponownie uruchomić komputer, aby rozwiązanie zadziałało.
can't open file 'user-sync.pex': [Errno 2]
Przykładowe dane wyjściowe błędu konsoli:
python: can't open file 'user-sync.pex': [Errno 2] No such file or directory
Wskazówka: Upewnij się, że uruchomiono wiersz poleceń python wewnątrz folderu, gdzie znajduje się plik user-sync.pex.
Przykładowe dane wyjściowe błędu konsoli:
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...
Wskazówka: Te komunikaty ostrzegawcze są normalne. Gdy serwer jest zajęty, odpowiada za pomocą kodu HTTP 429, więc ponowna próba może rozwiązać błąd. Narzędzie UST jest wyposażone we wzrastający mechanizm próby ponowienia połączenia, który zwiększa czas między próbami. Skrypt zatrzymuje się po trzech nieudanych próbach.
error.user.belongs_to_another_org
Przykładowy wpis dziennika (tryb debugowania):
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"
Wskazówka: Domena użyta do utworzenia konta może nie być domeną zastrzeżoną/zaufaną wewnątrz organizacji. Obok aktywnych domen w menu Admin Console -> Ustawienia powinna pojawić się zielona flaga lub kropka. Jeśli ich nie ma, ukończenie procesu zastrzeżenia domeny może rozwiązać problem.
Przykładowy wpis dziennika (tryb debugowania):
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"
Wskazówka: zostanie podjęta próba utworzenia konta typu federatedID, ale katalog jest tworzony dla użytkownika typu Enterprise lub odwrotnie. Znajdź atrybut user_identity_type w pliku user-sync-config.yml. Zmodyfikuj wartość zgodnie z typem katalogu pokazanym w konsoli Admin Console (Ustawienia > Tożsamość > Domeny > wartość typu katalogu dla danej domeny).
Przykładowy wpis dziennika (tryb debugowania):
Missing dependencies (Brak zależności)
Przykładowe dane wyjściowe błędu konsoli:
Failed to execute PEX file, missing compatible dependencies for:
pyyaml
cryptography
cffi
umapi-client
pycryptodome
pyldap
psutil
user-sync
Wskazówki:
a) Sprawdź czy zainstalowana w systemie wersja języka Python to wersja 32-bitowa. Odinstaluj wersję 32-bitową i zainstaluj 64-bitową, aby rozwiązać problem.
b) Sprawdź, czy wersja pliku user-sync.pex pobrana z serwisu GitHub jest zgodna z wersją języka Python i typem systemu operacyjnego. Plik user-sync-v2.3-win64-py365.zip należy na przykład pobrać dla systemu Windows 64-bitowego i języka Python 3.
Korzystanie z najnowszej wersji języka Python nie zawsze jest dobrym pomysłem. Lepiej jest skorzystać z wersji języka Python, w której powstał plik .pex. Sprawdź sufiks pobranego pliku .zip, aby zobaczyć, która wersja języka Python zadziała. W powyższych przykładzie (user-sync-v2.3-win64-py365.zip) można rozpoznać wersję Python 3.6.5.
Error decrypting private key (Błąd podczas odszyfrowywania klucza prywatnego)
Przykładowy wpis dziennika (tryb debugowania):
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
Wskazówki:
a) Klucz prywatny może czasem zawierać umieszczone nieumyślnie znaki bez dat lub puste wiersze. Spróbuj usunąć puste wiesze lub ponownie utworzyć klucz prywatny i publiczny.
b) Nie używaj atrybutu umapi_private_key_data, jeśli uruchamiasz skrypt w systemie Windows. Zamiast tego, zaszyfruj klucz i przechowuj go w Menedżerze poświadczeń.
c) Wypróbuj klucz prywatny RSA256 /2048-bitowy, jeśli używasz innego formatu.
d) Możliwe, że skonfigurowano klucz secure_priv_key_pass_key: umapi_private_key_passphrase wewnątrz pliku connector-umapi.yml. W tym przypadku należy upewnić się, że wpisy w Magazynie poświadczeń dla tej wartości i powiązanych wartości zgadzają się (patrz poniżej).
No value in secure storage for user... (Brak wartości dla użytkownika w bezpiecznym magazynie...)
Przykładowy wpis dziennika (tryb debugowania):
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"
Wskazówki:
a) Może brakować wpisu Magazynu poświadczeń dla umapi_api_key. Utwórz wpis w Magazynie poświadczeń. Dokumenty pomocy można znaleźć tutaj.
b) Wartość mogła zostać dodana do Magazynu poświadczeń za pomocą innego konta użytkownika. Obecnie podłączony użytkownik nie widzi jednak wpisu. Dodaj go, jeśli to konieczne, lub zmień konto użytkownika.
error.internal.exceptionflys / error.unauthorized
Przykładowe dane wyjściowe błędu konsoli:
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"}"
Wskazówka: Możliwe, że w menu Admin Console -> Ustawienia -> Ustawienia uwierzytelniania wybrano opcję inną niż Najłatwiej dla użytkowników (Hasło nigdy nie wygasa). Jeśli włączono opcję Bezpieczniej lub Najbezpieczniej, hasło Konta technicznego powiązane z integracją może wygasnąć.
Aby rozwiązać problem, należy utworzyć nową integrację. Upewnij się, że odnowiono również metadane w pliku connector-umapi.yml.
Wprowadzono poprawkę problemu, ale może on wciąż pojawić się w przypadku integracji utworzonych przez październikiem 2018 r.
Failed to establish a new connection [Errno 10061] (Nie udało się nawiązać nowego połączenia)
Przykładowe dane wyjściowe błędu konsoli:
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',))
Wskazówka:
Błąd jest związany z niemożnością nawiązania przez program UST połączenia z publicznymi punktami końcowymi API. Ustawienia lokalne mogą uniemożliwić dostęp ze względu na reguły zapory sieciowej, blokowanie ruchu przez serwer proxy, ustawienia konta dostępu do Internetu i nie tylko.
Czasami może pomóc dodanie dwóch zmiennych środowiskowych:
http_proxy i powiązana wartość formatu http://<host proxy>:<port>
https_proxy i powiązana wartość formatu https://<host proxy>:<port>
W innych przypadkach może pomóc zezwolenie na dostęp do tych punktów końcowych:
ims-na1.adobelogin.com:443
usermanagement.adobe.io:443
Problem można rozwiązać tylko lokalnie, odblokowując dostęp do powyższych punktów końcowych dla uruchomionego konta.
The metascopes in the JWT are not a subset of the metascopes in the binding (Parametry w JWT nie są podzbiorem parametrów w powiązaniu)
Przykładowy wpis dziennika (tryb debugowania):
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"}
Wskazówka: Uzyskaj dostęp do stworzonej integracji na stronie https://console.adobe.io/projects i sprawdź menu po lewej stronie zawierające listę interfejsów API. Upewnij się, że interfejs User Management API został dodany jako usługa (pojawia się na liście).
No valid bindings were found for organization and technical account combination (Nie znaleziono prawidłowych powiązań dla zestawienia organizacji i konta technicznego)
Przykładowy wpis dziennika (tryb debugowania):
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"}
Wskazówki:
a) Powodem może być, to, że wartość tech_acct wewnątrz pliku connector-umapi.yml odpowiada innej wartości niż identyfikator konta technicznego w integracji https://console.adobe.io. Sprawdź wartość ID konta technicznego z bieżącej integracji i skopiuj ją do tego pliku.
b) Może to być również spowodowane wygaśnięciem publicznego certyfikatu integracji. Odnów klucz prywatny i publiczny. Następnie prześlij klucz publiczny i zastąp stary klucz prywatny nowym. Sprawdź ścieżkę w pliku connector-umapi.yml, aby znaleźć odpowiedni plik.
c) Sprawdź, czy integrację wykonano dla właściwej organizacji. Wybierz organizację z listy rozwijanej znajdującej się w lewym górnym rogu na stronie https://console.adobe.io/integrations. Następnie zweryfikuj wartość identyfikatora konta technicznego dla aktywnej organizacji oraz inne metadane (identyfikator organizacji, sekretny i klienta).
SSL: CERTIFICATE_VERIFY_FAILED
Przykładowy wpis dziennika (tryb debugowania):
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)
Wskazówka: Powodem jest włączona inspekcja SSL na serwerze proxy (lokalne ustawienie środowiska)
Rozwiązanie 1: Uzyskaj certyfikat CA zapory w formacie PEM (załóż, że nazwa to thecert.crt). Jeśli używany jest format DER, zmień go na format PEM za pomocą polecenia openssl:
openssl x509 -inform DER -in thecert.crt -out thecert.pem -outform PEM
Uwaga: Jeśli nie masz pewności, czy plik .crt jest już w formacie PEM, uruchom najpierw te wiersze poleceń i zobacz, który z nich nie zadziała.
openssl x509 -text -inform DER -in thecert.crt
openssl x509 -text -inform PEM -in thecert.crt
Jeśli pierwszy plik DER nie zadziała, plik ma już format PEM, więc zmień nazwę thecert.crt na thecert.pem, lub zmień format na PEM za pomocą powyższego wiersza polecenia openssl.
Następnie utwórz zmienną środowiskową o nazwie REQUESTS_CA_BUNDLE i ustaw jej wartość jako ścieżkę do pliku thecert.pem.
Rozwiązanie 2: W systemie Windows, jeśli narzędzie jest uruchamiane z dysku innego niż ten, na którym zainstalowano system operacyjny i język Python. W tym przypadku nie może on dotrzeć do pakietu zaufanych certyfikatów głównych CA. Rozwiązaniem może być przeniesienie całego skryptu na dysk, na którym znajduje się system operacyjny. Jeśli to niemożliwe, plik cacert zawierający zaufane certyfikaty źródłowe CA należy skonfigurować jako plik docelowy zmiennej REQUESTS_CA_BUNDLE env. Jeżeli serwer proxy sprawdza ruch SSL, zawartość głównego certyfikatu CA należy skopiować do pliku cacert.pem w celu weryfikacji certyfikatów.
Uwaga: Domyślna instalacja języka Python ma pakiet certyfikatów na stronie C:\Python36\Lib\site-packages\certifi\cacert.pem.
Rozwiązanie 3: wyłącz inspekcję protokołu po stronie serwera proxy dla punktów końcowych API ims-na1.adobelogin.com i usermanagement.adobe.io
No group found [...] (Nie znaleziono grupy)
Przykładowy wpis dziennika (tryb debugowania):
2018-01-01 09:01:37 4916 WARNING ldap - No group found for: Name_Of_The_Group
Wskazówki:
a) Ta grupa nie występuje w protokole LDAP pod tą nazwą; napraw problem, podając poprawną nazwę LDAP grupy.
b) Grupy nie można odnaleźć pod zadeklarowaną wartością base_dn (patrz plik connector-ldap.yml). Zmień wartość base_dn, aby zawierała wspomnianą grupę (błąd występuje głównie, gdy wartość base_dn wskazuje na jednostkę organizacyjną).
Przykładowy wpis dziennika (tryb debugowania):
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"
Wskazówka: Nazwa grupy użytkowników group_name w powyższych danych wyjściowych nie występuje w systemach Adobe, więc należy ją utworzyć. Jeśli zaplanowano konfigurację nazwy PLC a nie grupy użytkowników, zwizualizowane wyjaśnienie można znaleźć na tej stronie dokumentacji.
image not found (nie znaleziono obrazu)
Przykładowy wpis dziennika (tryb debugowania):
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)
Wskazówka: błąd zarejestrowano w systemie macOS High Sierra podczas korzystania z programu UST v2.3 i języka Python 3.7.0. Zastosowanie polecenia brew install openssl w programie Terminal naprawiło błąd w tej sytuacji.
Could not create person for type 2 or 3 [...] (Nie udało się utworzyć użytkownika dla typu 2 lub 3)
Przykładowy wpis dziennika (tryb debugowania):
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."
Domena @claimed-domain.com może czasem należeć do innej organizacji, która skonfigurowała łącznik Azure lub Google w celu zarządzania synchronizacją kont w konsoli Admin Console. Ta sama domena jest następnie powierzona innej organizacji, korzystającej z narzędzia User Sync Tool do synchronizacji kont o formacie @claimed-domain.com
Przyczyna: Zarejestrowany komunikat pojawia się, gdy narzędzie synchronizacji wyodrębni konto
user@claimed-domain.com z serwera LDAP, aby utworzyć je w drugiej organizacji. Konta jednak nie utworzono/zsynchronizowano jeszcze z główną organizacją za pomocą łącznika Azure lub Google.
Wskazówka: spróbuj utworzyć/zsynchronizować konto user@claimed-domain.com w organizacji za pomocą łącznika Azure lub Google, a następnie spróbuj ponownie zsynchronizować z programem UST w organizacji, której powierzono domenę.
Unexpected LDAP failure reading [...] (Nieoczekiwana awaria protokołu LDAP podczas odczytu)
Przykładowy wpis dziennika (tryb debugowania):
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'}
Możliwa przyczyna: wymagana grupa znajduje się w domenie podrzędnej, ale wartość hosta jest jedną z domen głównych.
Wskazówka: Zmień wartość host na jedną z domen podrzędnych, w której znajdują się grupy użytkowników. Jeżeli wymagani użytkownicy lub grupy znajdują się zarówno w domenie głównej, jak i w jej domenach podrzędnych, należy skorzystać z portu wykazu globalnego w domenie głównej. Zmodyfikuj grupy w domenach podrzędnych, aby były uniwersalne a nie globalne. Przykład wartości hosta przy użyciu katalogu globalnego: ldap://domain.local:3268 lub ldaps://domain.local:3269
W ostatnim przykładzie, jeśli używany jest port wykazu globalnego, upewnij się, że wartość base_dn nie pobiera wartości:
base_dn: ""