Microsoft Azure 證明疑難排解指南

Azure 證明中的錯誤處理會遵循 Microsoft REST API 指導方針來實作 。 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 並透過 「連線-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