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 "Połączenie-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