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 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 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 dá 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 a política assinada ou adicionar/excluir o signatário da 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 sendo 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 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 da política for necessária, a política de atestado deverá ser configurada somente no formato JWT (JSON Web Token) RFC7519. 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