Guía de solución de problemas de Microsoft Azure Attestation

El control de errores en Azure Attestation se implementa conforme a las Directrices para API de REST de Microsoft. La respuesta de error devuelta por las API de Azure Attestation contiene el código de estado HTTP y los pares de nombre y valor con los nombres "code" y "message". El valor de "code" es legible y es un indicador del tipo de error. El valor de "message" pretende ayudar al usuario y proporciona detalles del error.

Si el problema no se soluciona en este artículo, también puede enviar una solicitud de Soporte técnico de Azure en la página de Soporte técnico de Azure.

HTTP–401: Excepción no autorizada

Código de estado HTTP

401

Código de error Unauthorized

Ejemplos de escenarios

  • No se pueden administrar las directivas de atestación, ya que el usuario no está asignado con los roles adecuados
  • No se pueden administrar los firmantes de directivas de atestación, ya que el usuario no está asignado con los roles adecuados

Usuario con el rol Lector que intenta editar una directiva de atestación en 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

Pasos para solucionar problemas

Para administrar directivas, el usuario de Microsoft Entra necesita los siguientes permisos para "Acciones":

  • Microsoft.Attestation/attestationProviders/attestation/read

  • Microsoft.Attestation/attestationProviders/attestation/write

  • Microsoft.Attestation/attestationProviders/attestation/delete

    Para realizar estas acciones, un usuario de Microsoft Entra debe tener el rol "Colaborador de atestación" en el proveedor de atestación. Estos permisos también se pueden heredar con roles como "Propietario" (permisos comodín), "Colaborador" (permisos comodín) en el grupo de recursos o suscripción.

Para leer directivas, el usuario de Microsoft Entra necesita el siguiente permiso para "Acciones":

  • Microsoft.Attestation/attestationProviders/attestation/read

    Para realizar esta acción, un usuario de Microsoft Entra debe tener el rol "Lector de atestación" en el proveedor de atestación. Los permisos de lectura también forman parte de roles como "Lector" (permisos comodín) en el grupo de recursos o suscripción.

Para comprobar los roles en PowerShell, realice los siguientes pasos:

a. Inicie PowerShell e inicie sesión en Azure mediante el cmdlet "Connect-AzAccount"

b. Consulte las instrucciones aquí para comprobar la asignación de roles de Azure en el proveedor de atestación.

c. Si no encuentra ninguna asignación de roles adecuada, siga las instrucciones que se indican aquí.

HTTP: errores 400

Código de estado HTTP

400

Hay varios motivos por los que una solicitud puede devolver 400. Estos son algunos ejemplos de errores devueltos por las API de Azure Attestation.

Error de atestación debido a errores de evaluación de directiva

La directiva de atestación incluye reglas de autorización y reglas de emisión. La evidencia de enclave se evalúa en función de las reglas de autorización. Las reglas de emisión definen las notificaciones que se van a incluir en el token de atestación. Si las notificaciones de la evidencia del enclave no cumplen las reglas de autorización, las llamadas de atestación devolverán el error de evaluación de directivas.

Código de error PolicyEvaluationError

Ejemplos de escenarios Cuando las notificaciones de la cita de enclave no coinciden con las reglas de autorización de la directiva de atestación

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

Pasos para solucionar problemas Los usuarios pueden evaluar la evidencia de enclave con una directiva de atestación de SGX antes de configurar esta.

Envíe una solicitud a la API de atestación mediante la especificación del texto de directiva del parámetro "draftPolicyForAttestation". La API AttestSgxEnclave usa este documento de directiva durante la llamada de atestación y, además, se puede usar para probar las directivas de atestación antes de que se consuman. El token de atestación generado cuando este campo está presente no está protegido.

Vea Ejemplos de una directiva de atestación

Error de atestación debido a una entrada no válida

Código de error InvalidParameter

Ejemplos de escenarios Error de atestación de SGX debido a una entrada no válida. Estos son algunos ejemplos de mensajes de error:

  • La oferta especificada no era válida debido a un error en el material adjunto de la oferta
  • La oferta especificada no era válida porque el dispositivo en el que se generó la oferta no cumple los requisitos de base de referencia de Azure
  • La oferta especificada no era válida porque el elemento TCBInfo o QEID proporcionado por el servicio de caché de PCK no era válido

Pasos para solucionar problemas

Microsoft Azure Attestation admite la atestación de ofertas de SGX generadas mediante el SDK de Intel y de Open Enclave.

Vea ejemplos de código para realizar la atestación con el SDK de Open Enclave o Intel

Error de cadena de certificados no válida al cargar directiva o firmante de directivas

Código de error InvalidParameter

Ejemplos de escenarios Configuración de directiva firmada o incorporación o eliminación de firmante de directivas, que se ha firmado con una cadena de certificados no válida (por ejemplo, cuando la extensión Restricciones básicas del certificado raíz no está establecida en Tipo de asunto = 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

Pasos para solucionar problemas El certificado raíz debe marcarse como emitido por una CA (las restricciones básicas X.509), de lo contrario, no se considera un certificado válido.

Asegúrese de que la extensión Restricciones básicas del certificado raíz esté establecida para indicar que Tipo de asunto = CA

De lo contrario, se considera que la cadena de certificados no es válida.

Vea ejemplos de firmante de directivas y directiva

Error de incorporación o eliminación de firmante de directivas

Código de error InvalidOperation

Ejemplos de escenarios

Cuando el usuario carga JWS sin la notificación "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

Cuando el usuario no carga un certificado en 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

Pasos para solucionar problemas Para agregar o eliminar un nuevo certificado de firmante de directivas, use RFC7519 JSON Web Token (JWT) con una notificación denominada "x-ms-policyCertificate". El valor de la notificación es RFC7517 JSON Web Key, que contiene el certificado que se va a agregar. JWT se debe firmar con una clave privada de cualquiera de los certificados de firmante de directivas válidos asociados al proveedor. Vea Ejemplos de firmante de directivas.

Error de configuración de directiva de atestación

Código de error PolicyParsingError

Ejemplos de escenarios Directiva proporcionada con sintaxis incorrecta (por ejemplo, falta punto y coma/directiva 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 error InvalidOperation

Ejemplos de escenarios Contenido no válido proporcionado (por ejemplo, carga de directiva o directiva sin firmar cuando se requiere la firma de la directiva)


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

Pasos para solucionar problemas Asegúrese de que la directiva en formato de texto está codificada con UTF-8.

Si se requiere la firma de la directiva, la directiva de atestación debe configurarse solo en formato RFC7519 JSON Web Token (JWT). Si no se requiere la firma de la directiva, esta se puede configurar en formato de texto o JWT.

Para configurar una directiva en formato JWT, use JWT con una notificación denominada "AttestationPolicy". El valor de la notificación es la versión codificada Base64URL del texto de la directiva. Si el proveedor de atestación se configura con certificados de firmante de directivas, JWT debe estar firmado con clave privada de cualquiera de los certificados de firmante de directivas válidos asociados al proveedor.

Para configurar una directiva en formato de texto, especifique el texto de la directiva directamente.

En PowerShell, especifique PolicyFormat como JWT para configurar la directiva en formato JWT. El formato de directiva predeterminado es Texto.

Vea ejemplos de directivas de atestación y Procedimiento para crear y firmar una directiva de atestación

Problemas de instalación de Az.Attestation en PowerShell

No se puede instalar el módulo Az de PowerShell o el módulo de PowerShell Az.Attestation en PowerShell.

Error

ADVERTENCIA: No se puede resolver el origen del paquete 'https://www.powershellgallery.com/api/v2' PackageManagement\Install-Package: no se encontró ninguna coincidencia para los criterios de búsqueda y el nombre del módulo especificados.

Pasos para solucionar problemas

La Galería de PowerShell ha dejado de usar las versiones 1.0 y 1.1 de Seguridad de la capa de transporte (TLS).

Se recomienda usar TLS 1.2 o una versión posterior.

Para seguir interactuando con la Galería de PowerShell, ejecute el siguiente comando antes que los comandos Install-Module:

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

Problemas de acceso y configuración de directivas en PowerShell

Usuario asignado con roles adecuados pero que se enfrenta a problemas de autorización al administrar directivas de atestación mediante PowerShell.

Error

El cliente con el identificador de objeto <id. de objeto> no tiene autorización para realizar la acción Microsoft.Authorization/roleassignments/write en el ámbito "subscriptions/<identificadorDeSuscripción>/resourcegroups/secure_enclave_poc/providers/Microsoft.Authorization/roleassignments/<identificadorDeAsignaciónDeRoles>" o el ámbito no es válido. Si se concedió el acceso recientemente, actualice las credenciales.

Pasos para solucionar problemas

La versión mínima de los módulos de Az PowerShell necesarios para admitir operaciones de atestación son:

  • Az 4.5.0
  • Az.Accounts 1.9.2
  • Az.Attestation 0.1.8

Ejecute el siguiente comando para comprobar la versión instalada de todos los módulos Az:

Get-InstalledModule 

Si las versiones no cumplen el requisito mínimo, ejecute el cmdlet update-module de PowerShell.

Update-Module -Name Az.Attestation