Share via


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 código de status HTTP e pares 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, também pode submeter um pedido de suporte do Azure na página de suporte do Azure.

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

Código de estado de HTTP

401

Código de erro não autorizado

Exemplos de cenários

  • Não é possível gerenciar políticas de atestado, pois o usuário não recebe 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 a função 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

Passos de resolução de 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 a 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 faça logon no Azure por meio do cmdlet "Connect-AzAccount"

b. Consulte as orientações 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 as instruções aqui

HTTP – 400 erros

Código de estado de HTTP

400

Existem diferentes razões pelas quais um pedido pode devolver 400. Aqui estão alguns exemplos de erros retornados pelas APIs de Atestado do Azure.

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

A política de certificação inclui regras de autorização e regras de emissão. As provas do enclave são avaliadas 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 em provas de 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ário: 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 as evidências do enclave em relação a uma política de atestado SGX antes de configurar a mesma.

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

Ver exemplos de políticas de certificação

Falha no atestado devido a entrada inválida

Código de erro InvalidParameter

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

  • A cotação especificada era inválida devido a um erro na garantia da 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 QEID fornecido pelo Serviço de Cache PCK era inválido

Passos de resolução de problemas

O Atestado do Microsoft Azure oferece suporte ao atestado de cotações SGX geradas pelo SDK Intel e pelo SDK do Open Enclave.

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

Erro de cadeia de certificados inválido ao carregar o signatário da política/política

Código de erro InvalidParameter

Exemplos de cenário Configurar política assinada ou adicionar/excluir signatário de política, que é assinado com uma cadeia de certificados inválida (por exemplo, quando a extensão Restrições Básicas do certificado raiz não está definida como Tipo de Assunto = 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 emitido por uma autoridade de certificação (as restrições básicas X.509), caso contrário, não será considerado como um certificado válido.

Certifique-se de que a extensão Restrições Básicas do certificado raiz esteja definida para indicar que Tipo de Assunto = AC

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

Ver signatário de políticas e exemplos de políticas

Adicionar/Excluir falha do signatário da política

Código de erro InvalidOperation

Exemplos de cenários

Quando o usuário carrega 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 RFC7519 JSON Web Token (JWT) com uma declaração chamada "x-ms-policyCertificate". O valor da declaração é uma chave da Web JSON RFC7517, que contém o certificado a ser adicionado. O JWT deve ser assinado com a chave privada de qualquer um dos certificados de signatário de política válidos associados ao provedor. Veja exemplos de signatários de políticas.

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ários 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 Texto está 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 (JSON Web Token RFC7519 JSON). Se a assinatura da política não for necessária, a política poderá ser configurada no formato texto ou JWT.

Para configurar uma política no formato JWT, use 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 chave privada de qualquer um dos certificados de signatário de política válidos associados ao provedor.

Para configurar uma política em 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.

Veja exemplos de política de atestado 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 nome do módulo

Passos de resolução de problemas

A Galeria do PowerShell desativou as versões 1.0 e 1.1 do Transport Layer Security (TLS).

TLS 1.2 ou uma versão posterior é recomendado.

Para continuar a interagir com a Galeria do PowerShell, execute o seguinte comando 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 funções apropriadas. Mas enfrentando problemas de autorização ao gerenciar políticas de atestado por meio do PowerShell.

Erro

O cliente com ID do objeto ID <> não tem autorização para executar a ação Microsoft.Authorization/roleassignments/write over scope 'subcriptions/subscriptionId resourcegroups/secure_enclave_poc/providers/Microsoft.Authorization/roleassignments/<<role assignmentId>>' ou o escopo é inválido. Se o acesso tiver sido concedido recentemente, atualize suas credenciais

Passos de resolução de 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 verificar 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