共用方式為


Microsoft Azure 證明疑難解答指南

Azure 證明 中的錯誤處理會遵循 REST API 指導方針Microsoft實作。 Azure 證明 API 傳回的錯誤回應包含 HTTP 狀態代碼和名稱/值組,名稱為 「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 所傳回的一些錯誤範例。

由於原則評估錯誤而導致證明失敗

證明原則包含授權規則和發行規則。 記憶體保護區辨識項會根據授權規則進行評估。 發行規則會定義要包含在證明令牌中的宣告。 如果記憶體保護區辨識項中的宣告不符合授權規則,證明呼叫會傳回原則評估錯誤。

錯誤碼 PolicyEvaluationError

案例範例 當記憶體保護區引號中的宣告與證明原則的授權規則不符時

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

疑難解答步驟 :用戶可以在設定相同之前,針對 SGX 證明原則評估記憶體保護區辨識項。

在 「draftPolicyForAttestation」 參數中提供原則文字,以傳送要求給證明 API。 AttestSgxEnclave API 會在證明呼叫期間使用此原則檔,這可用來在取用證明原則之前測試證明原則。 當此欄位存在時所產生的證明令牌將不安全。

請參閱 證明原則範例

證明失敗,因為輸入無效

錯誤碼 InvalidParameter

案例範例 SGX 證明失敗,因為輸入無效。 以下是一些錯誤訊息的範例:

  • 由於報價附帶有錯誤,指定的引號無效
  • 指定的引號無效,因為產生報價的裝置不符合 Azure 基準需求
  • 指定的引號無效,因為 PCK 快取服務提供的 TCBInfo 或 QEID 無效

疑難排解步驟

Microsoft Azure 證明支援 Intel SDK 和 Open Enclave SDK 所產生的 SGX 引號證明。

請參閱程式代碼範例,以使用 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

疑難解答步驟 若要新增/刪除新的原則簽署者憑證,請使用 RFC7519 JSON Web 令牌 (JWT) 搭配名為 “x-ms-policyCertificate” 的宣告。 宣告的值是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 格式設定原則,請使用 JWT 搭配名為 “AttestationPolicy” 的宣告。 宣告的值是原則文字的Base64URL編碼版本。 如果證明提供者已設定原則簽署者憑證,則必須使用與提供者相關聯之任何有效原則簽署者憑證的私鑰簽署 JWT。

若要以文字格式設定原則,請直接指定原則文字。

在 PowerShell 中,將 PolicyFormat 指定為 JWT,以 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管理證明原則時,遇到授權問題。

錯誤

具有對象標識符 <物件標識符> 的用戶端沒有執行動作Microsoft.Authorization/roleassignments/write over scope 'subcriptions/<subscriptionId>resourcegroups/secure_enclave_poc/providers/Microsoft.Authorization/roleassignments/<role assignmentId>' 或範圍無效。 如果最近授與存取權,請重新整理您的認證

疑難排解步驟

支持證明作業所需的 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