你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Microsoft Azure 证明故障排除指南

Azure 证明中的错误处理是按照 Microsoft REST API 准则实施的。 Azure 证明 API 返回的错误响应包含 HTTP 状态代码,以及名称为“code”和“message”的名称/值对。 “code”的值是用户可读的,指示错误的类型。 “message”的值旨在辅助用户并提供错误详细信息。

如果本文中未解决你的问题,还可以在Azure 支持页上提交Azure 支持请求。

HTTP–401:未经授权的异常

HTTP 状态代码

401

错误代码:未授权

场景示例

  • 无法管理证明策略,因为未为用户分配适当的角色
  • 无法管理证明策略签名者,因为未为用户分配适当的角色

具有“读取者”角色的用户尝试在 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

故障排除步骤

为了管理策略,Microsoft Entra 用户需要对“操作”具有以下权限:

  • Microsoft.Attestation/attestationProviders/attestation/read

  • Microsoft.Attestation/attestationProviders/attestation/write

  • Microsoft.Attestation/attestationProviders/attestation/delete

    若要执行这些操作,Microsoft Entra 用户必须在证明提供程序上具有“证明参与者”角色。 还可以使用订阅/资源组上的“所有者”(通配符权限)、“参与者”(通配符权限)等角色继承这些权限。

为了读取策略,Microsoft Entra 用户需要对“操作”具有以下权限:

  • Microsoft.Attestation/attestationProviders/attestation/read

    若要执行此操作,Microsoft Entra 用户必须在证明提供程序上具有“证明读取者”角色。 读取权限也是订阅/资源组上“读取者”(通配符权限)等角色的一部分。

若要在 PowerShell 中验证角色,请执行以下步骤:

a. 启动 PowerShell 并通过“Connect-AzAccount”cmdlet 登录到 Azure

b. 请参阅此处的指南,验证证明提供程序上的 Azure 角色分配

c. 如果未找到相应的角色分配,请按照此处的说明进行操作

HTTP – 400 错误

HTTP 状态代码

400

请求可能出于不同的原因返回 400。 下面是Azure 证明 API 返回的错误的一些示例。

证明因策略评估错误而失败

证明策略包含授权规则和颁发规则。 enclave 证据是基于授权规则评估的。 颁发规则定义了要包含在证明令牌中的声明。 如果 enclave 证据中的声明不符合授权规则,则证明调用将返回策略评估错误。

错误代码:PolicyEvaluationError

当 enclave 引号中的声明与证明策略的授权规则不匹配时的方案示例

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

故障排除步骤:用户可以在配置 enclave 证据之前根据 SGX 证明策略评估该证据

通过在“draftPolicyForAttestation”参数中提供策略文本,将请求发送到证明 API。 AttestSgxEnclave API 在证明调用期间将使用此策略文档,在使用证明策略之前,此文档可用于测试这些策略。 此字段存在时生成的证明令牌将不受保护。

请参阅证明策略示例

证明因输入无效而失败

错误代码:InvalidParameter

场景示例:SGX 证明因输入无效而失败。 下面是错误消息的一些示例:

  • 由于 quote 附件中存在错误,指定的 quote 无效
  • 由于在其上生成 quote 的设备不符合 Azure 基线要求,指定的 quote 无效
  • 由于 PCK 缓存服务提供的 TCBInfo 或 QEID 无效,指定的 quote 无效

故障排除步骤

Microsoft Azure 证明支持对 Intel SDK 和 Open Enclave SDK 生成的 SGX quote 进行证明。

请参阅有关使用 Open Enclave SDK/Intel SDK 执行证明的代码示例

上传策略/策略签名者时发生证书链无效错误

错误代码:InvalidParameter

场景示例:配置已签名的策略,或者添加/删除已使用无效证书链签名的策略签名者(例如,当根证书的“基本约束”扩展未设置为“使用者类型 = 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

故障排除步骤:根证书必须标记为由 CA 颁发(X.509 基本约束),否则不会将其视为有效证书

确保根证书的“基本约束”扩展设置为“使用者类型 = CA”

否则,证书链将被视为无效。

请参阅策略签名者策略示例

添加/删除策略签名者失败

错误代码:InvalidOperation

场景示例

用户上传不包含“maa-policyCertificate”声明的 JWS

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

用户未上传采用 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

故障排除步骤:若要添加/删除新的策略签名者证书,请使用包含名为“x-ms-policyCertificate”的声明的 RFC7519 JSON Web 令牌 (JWT)。 该声明的值是一个 RFC7517 JSON Web 密钥,其中包含要添加的证书。 必须使用与提供程序关联的任何有效策略签名者证书的私钥对 JWT 进行签名。 请参阅策略签名者示例

证明策略配置失败

错误代码:PolicyParsingError

场景示例:提供的策略采用了错误的语法(例如,缺少分号/有效的 JWT 策略)

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

错误代码:InvalidOperation

场景示例:提供的内容无效(例如,需要策略签名时,上传了策略/未签名的策略)


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

故障排除步骤:确保文本格式的策略采用 UTF-8 编码

如果需要策略签名,则只能以 RFC7519 JSON Web 令牌 (JWT) 格式配置证明策略。 如果不需要策略签名,则可以采用文本或 JWT 格式配置策略。

若要以 JWT 格式配置策略,请使用包含名为“AttestationPolicy”的声明的 JWT。 该声明的值是策略文本的 Base64URL 编码版本。 如果为证明提供程序配置了策略签名者证书,则必须使用与该提供程序关联的任何有效策略签名者证书的私钥对 JWT 进行签名。

若要以文本格式配置策略,请直接指定策略文本。

在 PowerShell 中,指定 JWT 作为 PolicyFormat,以便以 JWT 格式配置策略。 默认策略格式为 Text。

请参阅证明策略示例以及如何创作证明策略

PowerShell 中的 Az.Attestation 安装问题

无法在 PowerShell 中安装 Az PowerShell 模块或 Az.Attestation PowerShell 模块。

错误

警告:无法解析包源“https://www.powershellgallery.com/api/v2” PackageManagement\Install-Package:找不到指定搜索条件和模块名称的匹配项

疑难解答步骤

PowerShell 库已弃用传输层安全性 (TLS) 版本 1.0 和 1.1。

建议使用 TLS 1.2 或更高版本。

若要继续与 PowerShell 库进行交互,请在 Install-Module 命令之前运行以下命令

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

PowerShell 中的策略访问/配置问题

为用户分配了适当的角色。 但在通过 PowerShell 管理证明策略时遇到授权问题。

错误

对象 ID 为 <object Id> 的客户端未获授权,无权在“subcriptions/<subscriptionId>resourcegroups/secure_enclave_poc/providers/Microsoft.Authorization/roleassignments/<assignmentId>role assignmentId”范围执行 Microsoft.Authorization/roleassignments/write 操作,或者范围无效。 如果最近授予了访问权限,请刷新凭据

疑难解答步骤

支持证明操作所需的 Az PowerShell 模块的最低版本为:

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

运行以下命令,验证所有 Az 模块的已安装版本

Get-InstalledModule 

如果版本不符合最低要求,请运行 Update-Module PowerShell cmdlet。

Update-Module -Name Az.Attestation