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 problema não for abordado 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 de HTTP
401
Código de erro Não autorizado
Exemplos de cenário
- Não é possível gerenciar políticas de atestado, pois o usuário não recebeu as funções apropriadas
- Não é possível gerenciar signatários da política de atestado, pois o usuário não está atribuído às 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) na assinatura/grupo de 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) na assinatura/grupo de 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 de 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 na evidência de enclave não estiverem em conformidade com as regras de autorização, as chamadas de atestado retornarão um erro de avaliação de política.
Código de erro PolicyEvaluationError
Exemplos de cenário Quando as declarações na aspa 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
- Contas Az 1.9.2
- Az.Attestation 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 do PowerShell.
Update-Module -Name Az.Attestation