Guia de solução de problemas do Atestado do Microsoft Azure

O tratamento de erros no Atestado do Azure é implementado seguindo as diretrizes da API REST da Microsoft. A resposta de erro retornada pelas APIs de Atestado do Azure contém o código de status HTTP e os pares de nome/valor com os nomes "código" e "mensagem". O valor de "código" é legível por humanos e um indicador do tipo de erro. O valor de "mensagem" pretende ajudar o usuário e fornece detalhes do erro.

Se o seu problema não for resolvido neste artigo, você também poderá enviar uma solicitação de suporte do Azure na página de suporte do Azure.

HTTP–401: Exceção não autorizada

Código de status HTTP

401

Código de erro Não autorizado

Exemplos de cenário

  • Não é possível gerenciar políticas de atestado porque o usuário não está atribuído com funções apropriadas
  • Não é possível gerenciar signatários de política de atestado, pois o usuário não está atribuído com funções apropriadas

Usuário com função de Leitor tentando editar uma política de atestado no 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

Etapas para solucionar problemas

Para gerenciar políticas, um usuário do Microsoft Entra requer as seguintes permissões para "Ações":

  • Microsoft.Attestation/attestationProviders/attestation/read

  • Microsoft.Attestation/attestationProviders/attestation/write

  • Microsoft.Attestation/attestationProviders/attestation/delete

    Para executar essas ações, um usuário do Microsoft Entra deve ter a função "Colaborador de atestado" no provedor de atestado. Essas permissões também podem ser herdadas com funções como "Proprietário" (permissões curinga), "Colaborador" (permissões curinga) no grupo de assinaturas/recursos.

Para ler políticas, um usuário do Microsoft Entra requer as seguinte permissão para "Ações":

  • Microsoft.Attestation/attestationProviders/attestation/read

    Para executar essa ação, um usuário do Microsoft Entra deve ter a função "Leitor de Atestado" no provedor de atestado. As permissões de leitura também fazem parte de funções como "Leitor" (permissões curinga) no grupo de assinaturas/recursos.

Para verificar as funções no PowerShell, execute as etapas abaixo:

a. Inicie o PowerShell e acesse no Azure por meio do cmdlet "Connect-AzAccount"

b. Consulte as diretrizes aqui para verificar sua atribuição de função do Azure no provedor de atestado

c. Se você não encontrar uma atribuição de função apropriada, siga estas instruções

HTTP – 400 erros

Código de status HTTP

400

Há diferentes motivos pelos quais uma solicitação pode retornar um 400. Aqui estão alguns exemplos de erros retornados pelas APIs de Atestado do Azure.

Falha de atestado devido a erros de avaliação de política

A política de atestado inclui regras de autorização e regras de emissão. A evidência de Enclave é avaliada com base nas regras de autorização. As regras de emissão definem as declarações a serem incluídas no token de atestado. Se as declarações nas evidências do enclave não estiverem em conformidade com as regras de autorização, as chamadas de atestado retornarão o erro de avaliação da política.

Código de erro PolicyEvaluationError

Exemplos de cenários Quando as declarações na cotação do enclave não correspondem às regras de autorização da política de atestado

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"]

Etapas de solução de problemas Os usuários podem avaliar a evidência de Enclave em relação a uma política de atestado de SGX antes de configurar o mesmo.

Envie uma solicitação para a API de atestado fornecendo o texto da política no parâmetro "draftPolicyForAttestation". A API AttestSgxEnclave usará esse documento de política durante a chamada de atestado e isso poderá ser usado para testar as políticas de atestado antes que elas sejam consumidas. O token de atestado gerado quando este campo está presente não será seguro.

Consulte os Exemplos de política de atestado

Falha de atestado devido a uma entrada inválida

Código de erro InvalidParameter

Exemplos de cenário Falha de atestado de SGX devido a uma entrada inválida. Aqui estão alguns exemplos de mensagens de erro:

  • A cotação especificada era inválida devido a um erro no material de cotação
  • A cotação especificada era inválida porque o dispositivo no qual a cotação foi gerada não atende aos requisitos de linha de base do Azure
  • A cotação especificada era inválida porque o TCBInfo ou o QEID fornecido pelo serviço de cache PCK era inválido

Etapas para solucionar problemas

O Atestado do Microsoft Azure dá suporte ao atestado de citações SGX geradas pelo SDK Intel e pelo Open enclave SDK.

Consulte os exemplos de código para executar o atestado usando o SDK do Open Enclave/SDK do Intel

Erro de cadeia de certificados inválido ao carregar a política/signatários de política

Código de erro InvalidParameter

Exemplos de cenário Configure a política assinada ou adicione/exclua o signatário de política, que é assinado com uma cadeia de certificados inválida (por exemplo, quando a extensão de restrições básicas do certificado raiz não está definida para o tipo de entidade = 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

Etapas de solução de problemas O certificado raiz deve ser sinalizado como sendo emitido por uma AC (as restrições básicas X. 509). Caso contrário, ele não será considerado como um certificado válido.

Verifique se a extensão de restrições básicas do certificado raiz está definida para indicar que tipo de assunto = CA

Caso contrário, a cadeia de certificados será considerada inválida.

Consulte os exemplos de signatários e política

Adicionar/excluir falha de signatário de política

Código de erro InvalidOperation

Exemplos de cenário

Quando o usuário carrega o JWS sem a declaração "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

Quando o usuário não carrega um certificado no formato 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

Etapas de solução de problemas Para adicionar/excluir um novo certificado de signatário de política, use o token RFC7519 JSON Web (JWT) com uma declaração denominada "x-MS-policyCertificate". O valor da declaração é uma chave Web RFC7517 JSON, que contém o certificado a ser adicionado. O JWT deve ser assinado com uma chave privada de qualquer um dos certificados de signatário de política válidos associados ao provedor. Consulte exemplos de signatário de política.

Falha na configuração da política de atestado

Código de erro PolicyParsingError

Exemplos de cenário Política fornecida com sintaxe incorreta (por exemplo, ponto-e-vírgula ausente)/política JWT válida)

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

Código de erro InvalidOperation

Exemplos de cenário Conteúdo inválido fornecido (por exemplo, política de carregamento/política não assinada quando a assinatura de política é necessária)


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

Etapas de solução de problemas Verifique se a política no formato de texto é codificada em UTF-8.

Se a assinatura de política for necessária, a política de atestado deverá ser configurada somente no formato JWT (token Web JSON) RFC7519. Se a assinatura de política não for necessária, a política poderá ser configurada no formato de texto ou JWT.

Para configurar uma política no formato JWT, use o JWT com uma declaração chamada "AttestationPolicy". O valor da declaração é a versão codificada Base64URL do texto da política. Se o provedor de atestado estiver configurado com certificados de signatário de política, o JWT deverá ser assinado com a chave privada de qualquer um dos certificados de signatário de política válidos associados ao provedor.

Para configurar uma política no formato de texto, especifique o texto da política diretamente.

No PowerShell, especifique PolicyFormat como JWT para configurar a política no formato JWT. O formato de política padrão é texto.

Consulte exemplos de política e como criar uma política de atestado

Problemas de instalação do Az.Attestation no PowerShell

Não é possível instalar o módulo Az PowerShell ou o módulo Az.Attestation PowerShell no PowerShell.

Erro

AVISO: Não é possível resolver a origem do pacote ''https://www.powershellgallery.com/api/v2 PackageManagement\Install-Package: Nenhuma correspondência foi encontrada para os critérios de pesquisa especificados e o nome do módulo

Etapas para solucionar problemas

A Galeria do PowerShell preteriu as versões 1.0 e 1.1 do protocolo TLS.

Recomendamos usar o TLS 1.2 ou uma versão posterior.

Para continuar a interagir com a Galeria do PowerShell, execute o comando a seguir antes dos comandos Install-Module

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Problemas de acesso/configuração de política no PowerShell

Usuário atribuído com as funções apropriadas. Mas enfrentando problemas de autorização ao gerenciar políticas de atestado por meio do PowerShell.

Erro

O cliente com a ID de objeto <object Id> não tem autorização para executar a ação Microsoft.Authorization/RoleAssignments/Write no escopo 'subcriptions/<subscriptionId>resourcegroups/secure_enclave_poc/providers/Microsoft.Authorization/roleassignments/<role assignmentId>' ou o escopo é inválido. Se o acesso foi concedido recentemente, atualize suas credenciais

Etapas para solucionar problemas

A versão mínima dos módulos do Az PowerShell necessários para dar suporte a operações de atestado são:

  • Az 4.5.0
  • Az.Contas 1.9.2
  • Az.Atestado 0.1.8

Execute o comando abaixo para confirmar a versão instalada de todos os módulos Az

Get-InstalledModule 

Se as versões não atenderem ao requisito mínimo, execute o cmdlet Update-Module PowerShell.

Update-Module -Name Az.Attestation