Przewodnik rozwiązywania problemów z zaświadczaniami na platformie Microsoft Azure
Obsługa błędów w zaświadczaniach platformy Azure jest implementowana zgodnie z wytycznymi interfejsu API REST firmy Microsoft. Odpowiedź o błędzie zwrócona przez interfejsy API zaświadczania platformy Azure zawiera kod stanu HTTP i pary name/value z nazwami "code" i "message". Wartość "code" jest czytelna dla człowieka i jest wskaźnikiem typu błędu. Wartość "message" ma na celu pomoc użytkownikowi i zawiera szczegóły błędu.
Jeśli problem nie został rozwiązany w tym artykule, możesz również przesłać żądanie pomoc techniczna platformy Azure na stronie pomoc techniczna platformy Azure.
HTTP–401: Wyjątek nieautoryzowany
Kod stanu HTTP
401
Kod błędu Brak autoryzacji
Przykłady scenariuszy
- Nie można zarządzać zasadami zaświadczania, ponieważ użytkownik nie jest przypisany do odpowiednich ról
- Nie można zarządzać sygnatariuszami zasad zaświadczania, ponieważ użytkownik nie jest przypisany do odpowiednich ról
Użytkownik z rolą Czytelnik próbuje edytować zasady zaświadczania w programie PowerShell
Set-AzAttestationPolicy : Operation returned HTTP Status Code 401
At line:1 char:1
+ Set-AzAttestationPolicy -Name $attestationProvider -ResourceGroupName ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Set-AzAttestationPolicy], RestException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.Attestation.SetAzureAttestationPolicy
Kroki rozwiązywania problemów
Aby zarządzać zasadami, użytkownik firmy Microsoft Entra wymaga następujących uprawnień dla "Actions":
Microsoft.Attestation/attestationProviders/zaświadczenie/odczyt
Microsoft.Attestation/attestationProviders/zaświadczenie/zapis
Microsoft.Attestation/attestationProviders/zaświadczenie/usuwanie
Aby wykonać te akcje, użytkownik firmy Microsoft Entra musi mieć rolę "Współautor zaświadczania" u dostawcy zaświadczania. Te uprawnienia można również dziedziczyć za pomocą ról, takich jak "Właściciel" (uprawnienia z symbolami wieloznacznymi), "Współautor" (uprawnienia z symbolami wieloznacznymi) w subskrypcji/grupie zasobów.
Aby odczytać zasady, użytkownik firmy Microsoft Entra wymaga następującego uprawnienia dla "Actions":
Microsoft.Attestation/attestationProviders/zaświadczenie/odczyt
Aby wykonać tę akcję, użytkownik firmy Microsoft Entra musi mieć rolę "Czytelnik zaświadczania" u dostawcy zaświadczania. Uprawnienia do odczytu są również częścią ról, takich jak "Czytelnik" (uprawnienia z symbolami wieloznacznymi) w subskrypcji/grupie zasobów.
Aby zweryfikować role w programie PowerShell, uruchom poniższe kroki:
a. Uruchom program PowerShell i zaloguj się do platformy Azure za pomocą polecenia cmdlet "Connect-AzAccount"
b. Zapoznaj się z wskazówkami tutaj , aby zweryfikować przypisanie roli platformy Azure u dostawcy zaświadczania
c. Jeśli nie znajdziesz odpowiedniego przypisania roli, postępuj zgodnie z instrukcjami podanymi tutaj
HTTP — 400 błędów
Kod stanu HTTP
400
Istnieją różne powody, dla których żądanie może zwrócić 400. Poniżej przedstawiono kilka przykładów błędów zwracanych przez interfejsy API zaświadczania platformy Azure.
Niepowodzenie zaświadczania z powodu błędów oceny zasad
Zasady zaświadczania obejmują reguły autoryzacji i reguły wystawiania. Dowody enklawy są oceniane na podstawie reguł autoryzacji. Reguły wystawiania definiują oświadczenia, które mają być uwzględnione w tokenie zaświadczania. Jeśli oświadczenia w dowodach enklawy nie są zgodne z regułami autoryzacji, wywołania zaświadcza o błędzie oceny zasad.
Kod błędu PolicyEvaluationError
Przykłady scenariuszy, gdy oświadczenia w cudzysłowie enklawy nie są zgodne z regułami autoryzacji zasad zaświadczania
Native operation failed with 65518: G:\Az\security\Attestation\src\AttestationServices\Instance\NativePolicyWrapper\NativePolicyEngine.cpp(168)\(null)!00007FF801762308: (caller: 00007FF80143DCC8) Exception(0) 83FFFFEE Policy Evaluation Error has occurred Msg:[Policy Engine Exception: A Deny claim was issued, authorization failed.]
G:\Az\security\Attestation\src\AttestationServices\Instance\Enclave\api.cpp(840)\(null)!00007FF801739FF3: (caller: 00007FF801232801) LogHr(0) 83FFFFEE Policy Evaluation Error has occurred Msg:[Unhandled Enclave Exception: "Policy Evaluation Error has occurred"]
Kroki rozwiązywania problemów Użytkownicy mogą oceniać dowody enklawy względem zasad zaświadczania SGX przed skonfigurowaniem tego samego.
Wyślij żądanie do zaświadczania interfejsu API, podając tekst zasad w parametrze "draftPolicyForAttestation". Interfejs API attestSgxEnclave będzie używać tego dokumentu zasad podczas wywołania zaświadczania i może służyć do testowania zasad zaświadczania przed ich użyciem. Token zaświadczania wygenerowany, gdy to pole jest obecne, będzie niezabezpieczone.
Zobacz przykłady zasad zaświadczania
Niepowodzenie zaświadczania z powodu nieprawidłowych danych wejściowych
Kod błędu InvalidParameter
Przykłady scenariuszy niepowodzenia zaświadczania SGX z powodu nieprawidłowych danych wejściowych. Oto kilka przykładów komunikatów o błędach:
- Określony cudzysłów był nieprawidłowy z powodu błędu w cudzysłowie zabezpieczającym
- Określony cudzysłów był nieprawidłowy, ponieważ urządzenie, na którym został wygenerowany cudzysłów, nie spełnia wymagań punktu odniesienia platformy Azure
- Określony cudzysłów był nieprawidłowy, ponieważ identyfikator QEID lub TCBInfo dostarczony przez usługę pamięci podręcznej PCK był nieprawidłowy
Kroki rozwiązywania problemów
Zaświadczenie platformy Microsoft Azure obsługuje zaświadczenie cudzysłowów SGX generowanych przez zestaw Intel SDK i zestaw SDK open enklawy.
Zapoznaj się z przykładami kodu dotyczącymi przeprowadzania zaświadczania przy użyciu zestawu Open Enlave SDK/ zestawu Intel SDK
Błąd nieprawidłowego łańcucha certyfikatów podczas przekazywania zasad/podpisywania zasad
Kod błędu InvalidParameter
Przykłady scenariuszy Konfigurowanie podpisanych zasad lub dodawanie/usuwanie podpisywania zasad, który jest podpisany przy użyciu nieprawidłowego łańcucha certyfikatów (na przykład gdy rozszerzenie Podstawowe ograniczenia certyfikatu głównego nie jest ustawione na Typ podmiotu = CA)
Native operation failed with 65529: C:\source\src\AttestationServices\Instance\SgxPal\sgxcert.cpp(1074)\(null)!00007FFA285CDAED: (caller: 00007FFA285C36E8) Exception(0) 83FFFFF9 The requested item is not found Msg:[Unable to find issuer certificate CN=attestationsigningcert]
C:\source\src\AttestationServices\Instance\Enclave\api.cpp(618)\(null)!00007FFA286DCBF8: (caller: 00007FFA285860D3) LogHr(0) 83FFFFF9 The requested item is not found Msg:[Unhandled Enclave Exception: "The requested item is not found"]
At line:1 char:1
+ Set-AzAttestationPolicy -Name "testpolicy1" -ResourceGroupName "BugBa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Set-AzAttestationPolicy], RestException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.Attestation.SetAzureAttestationPolicy
Kroki rozwiązywania problemów Certyfikat główny musi być oflagowany jako wystawiony przez urząd certyfikacji (podstawowe ograniczenia X.509), a nie będzie traktowany jako prawidłowy certyfikat.
Upewnij się, że rozszerzenie podstawowe ograniczenia certyfikatu głównego jest ustawione tak, aby wskazywało, że typ podmiotu = urząd certyfikacji
W przeciwnym razie łańcuch certyfikatów jest uznawany za nieprawidłowy.
Zobacz przykłady zasad i podpisywania zasad
Niepowodzenie dodawania/usuwania logowania zasad
Kod błędu InvalidOperation
Przykłady scenariuszy
Gdy użytkownik przekazuje JWS bez oświadczenia "maa-policyCertificate"
Add-AzAttestationPolicySigner : Operation returned HTTP Status Code 400
Code: InvalidOperation
Message: Native operation failed with 74: ..\Enclave\enclave.cpp(2213)\(null)!: (caller: ) Exception(0) 83FF004A Bad
message Msg:[Could not find "maa-policyCertificate" claim in policy token]
..\Enclave\api.cpp(496)\(null)!: (caller: ) LogHr(0) 83FF004A Bad message Msg:[Unhandled Enclave Exception: "Bad
message"]
At line:1 char:1
+ Add-AzAttestationPolicySigner -Name $attestationProvider -ResourceGro ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Add-AzAttestationPolicySigner], RestException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.Attestation.AddAzureAttestationPolicySigner
Gdy użytkownik nie przekazuje certyfikatu w formacie JWS
Add-AzAttestationPolicySigner : Operation returned HTTP Status Code 400
Code: InvalidOperation
Message: Native operation failed with 74: ..\JsonWebToken\jsonwebtoken.cpp(375)\(null)!: (caller: ) LogHr(0) 83FF004A
Bad message Msg:[RETURN_IF_TRUE('(firstPeriod == std::string::npos)') failed with 0x4a: Malformed JWT: Could not
find first period in the token.]
..\Enclave\enclave.cpp(2106)\(null)!: (caller: ) LogHr(0) 83FF004A Bad message
Msg:[THROW_IF_ERROR('DecomposeJsonWebSignature(&policyJws, encodedJoseHeader, encodedJwsBody, jwsSignature)') failed
with 0x4a: 'Bad message']
..\Enclave\enclave.cpp(2106)\(null)!: (caller: ) Exception(0) 83FF004A Bad message
..\Enclave\api.cpp(496)\(null)!: (caller: ) LogHr(0) 83FF004A Bad message Msg:[Unhandled Enclave Exception: "Bad
message"]
At line:1 char:1
+ Add-AzAttestationPolicySigner -Name $attestationProvider -ResourceGro ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Add-AzAttestationPolicySigner], RestException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.Attestation.AddAzureAttestationPolicySigner
Kroki rozwiązywania problemów Aby dodać/usunąć nowy certyfikat narzędzia podpisywania zasad, użyj RFC7519 tokenu internetowego JSON (JWT) z oświadczeniem o nazwie "x-ms-policyCertificate". Wartość oświadczenia to RFC7517 klucz internetowy JSON, który zawiera certyfikat do dodania. Zestaw JWT musi być podpisany przy użyciu klucza prywatnego dowolnego z prawidłowych certyfikatów podmiotu podpisywającego zasady skojarzonych z dostawcą. Zobacz przykłady osób podpisającego zasady.
Niepowodzenie konfiguracji zasad zaświadczania
Kod błędu PolicyParsingError
Przykłady scenariuszy Zasady dostarczane z nieprawidłową składnią (na przykład brak średnika)/prawidłowymi zasadami JWT)
Native operation failed with 65526: ..\NativePolicyWrapper\NativePolicyEngine.cpp(31)\(null)!: (caller: ) Exception(0) 83FFFFF6 Invalid policy was specified Msg:[Policy Parser Exception Thrown: Offending
symbol: '['
Line: '2', Column: '1'
Failure message: 'mismatched input '[' expecting ';''
Failing rule: 'policy > versionInfo']
..\Enclave\api.cpp(618)\(null)!: (caller: ) LogHr(0) 83FFFFF6 Invalid policy was specified Msg:[Unhandled Enclave Exception: "Invalid policy was specified"]
At line:1 char:1
+ set-AzAttestationPolicy -Name $attestationProvider -ResourceGroupName ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Set-AzAttestationPolicy], RestException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.Attestation.SetAzureAttestationPolicy
Kod błędu InvalidOperation
Przykłady scenariuszy Podano nieprawidłową zawartość (na przykład zasady przekazywania/ niepodpisane zasady, gdy jest wymagane podpisywanie zasad)
Native operation failed with 74: ..\Shared\base64url.h(226)\(null)!: (caller: ) Exception(0) 83FF004A Bad message Msg:[Unknown base64 character: 41 (')')]
..\Enclave\api.cpp(618)\(null)!: (caller: ) LogHr(0) 83FF004A Bad message Msg:[Unhandled Enclave Exception: "Bad message"]
At line:1 char:1
+ set-AzAttestationPolicy -Name $attestationProvider -ResourceGroupName ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Set-AzAttestationPolicy], RestException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.Attestation.SetAzureAttestationPolicy
Kroki rozwiązywania problemów Upewnij się, że zasady w formacie tekstowym są zakodowane w formacie UTF-8.
Jeśli wymagane jest podpisywanie zasad, zasady zaświadczania muszą być skonfigurowane tylko w formacie RFC7519 tokenu internetowego JSON (JWT). Jeśli podpisywanie zasad nie jest wymagane, zasady można skonfigurować w formacie tekstowym lub JWT.
Aby skonfigurować zasady w formacie JWT, użyj JWT z oświadczeniem o nazwie "AttestationPolicy". Wartość oświadczenia to zakodowana w formacie Base64URL wersja tekstu zasad. Jeśli dostawca zaświadczania jest skonfigurowany przy użyciu certyfikatów osoby podpisającego zasady, zestaw JWT musi być podpisany przy użyciu klucza prywatnego dowolnego z prawidłowych certyfikatów osoby podpisającego zasady skojarzonych z dostawcą.
Aby skonfigurować zasady w formacie tekstowym, określ tekst zasad bezpośrednio.
W programie PowerShell określ wartość PolicyFormat jako JWT, aby skonfigurować zasady w formacie JWT. Domyślny format zasad to Tekst.
Zobacz przykłady zasad zaświadczania i sposób tworzenia zasad zaświadczania
Problemy z instalacją narzędzia Az.Attestation w programie PowerShell
Nie można zainstalować modułu Az programu PowerShell lub modułu Az.Attestation programu PowerShell w programie PowerShell.
Błąd
OSTRZEŻENIE: Nie można rozpoznać źródła pakietu "https://www.powershellgallery.com/api/v2" PackageManagement\Install-Package: Nie znaleziono dopasowania dla określonych kryteriów wyszukiwania i nazwy modułu
Kroki rozwiązywania problemów
Galeria programu PowerShell ma przestarzałe protokoły Transport Layer Security (TLS) w wersji 1.0 i 1.1.
Zalecane jest użycie protokołu TLS 1.2 lub nowszej.
Aby kontynuować interakcję z Galeria programu PowerShell, uruchom następujące polecenie przed poleceniami Install-Module
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Problemy z dostępem/konfiguracją zasad w programie PowerShell
Użytkownik przypisany do odpowiednich ról. Występują jednak problemy z autoryzacją podczas zarządzania zasadami zaświadczania za pomocą programu PowerShell.
Błąd
Klient o identyfikatorze obiektu o identyfikatorze <> obiektu nie ma autoryzacji do wykonania akcji Microsoft.Authorization/roleassignments/write w zakresie "subcriptions/<subscriptionId>resourcegroups/secure_enclave_poc/providers/Microsoft.Authorization/roleassignments/roleassignments/<roleas assignmentId>" lub zakres jest nieprawidłowy. Jeśli dostęp został niedawno udzielony, odśwież poświadczenia
Kroki rozwiązywania problemów
Minimalna wersja modułów Az programu PowerShell wymaganych do obsługi operacji zaświadczania to:
- Az 4.5.0
- Az.Accounts 1.9.2
- Az.Attestation 0.1.8
Uruchom poniższe polecenie, aby sprawdzić zainstalowaną wersję wszystkich modułów Az
Get-InstalledModule
Jeśli wersje nie spełniają wymagań minimalnych, uruchom polecenie cmdlet programu PowerShell Update-Module.
Update-Module -Name Az.Attestation