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 角色指派
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