如何撰寫證明原則
證明原則是上傳至 Microsoft Azure 證明的檔案。 Azure 證明會提供以證明特定原則格式上傳原則的彈性。 或者,也可以上傳原則的編碼版本 (JSON Web 簽章格式)。 原則管理員負責撰寫證明原則。 在大部分的證明案例中,信賴憑證者扮演原則管理員。 進行證明呼叫的用戶端會傳送證明辨識項,服務會加以剖析並轉換成傳入宣告 (屬性集合,值)。 然後,服務會根據原則中定義的內容來處理宣告,並傳回計算的結果。
此原則包含的規則會決定授權準則、屬性及證明權杖的內容:
version=1.0;
authorizationrules
{
c:[type="secureBootEnabled", issuer=="AttestationService"]=> permit()
};
issuancerules
{
c:[type="secureBootEnabled", issuer=="AttestationService"]=> issue(claim=c)
c:[type="notSafeMode", issuer=="AttestationService"]=> issue(claim=c)
};
原則檔案有三個區段:
- version:版本是所遵循文法的版本號碼。
目前唯一支援的版本為 1.0。version=MajorVersion.MinorVersion
- authorizationrules:會先檢查的宣告規則集,以判斷 Azure 證明是否應該繼續處理 issuancerules。 宣告規則會依照其定義的順序套用。
- issuancerules:評估為會將其他資訊新增至原則中定義的證明結果的宣告規則集合。 宣告規則會依照其定義的順序套用,而且也是選擇性的。
如需詳細資訊,請參閱宣告和宣告規則。
草擬原則檔案
- 建立新檔案。
- 新增檔案的版本。
- 新增 authorizationrules 和 issuancerules 的區段。
授權規則包含 deny() 動作,但不含任何條件,以確保不會處理任何發行規則。 或者,授權規則也可以包含 permit() 動作,以允許處理發行規則。version=1.0; authorizationrules { =>deny(); }; issuancerules { };
- 將宣告規則新增至授權規則
如果傳入宣告集包含符合類型、值和簽發者的宣告,則 permit() 動作會告訴原則引擎處理 issuancerules。version=1.0; authorizationrules { [type=="secureBootEnabled", value==true, issuer=="AttestationService"]=>permit(); }; issuancerules { };
- 將宣告規則新增至 issuancerules。
傳出宣告集包含具有以下內容的宣告:version=1.0; authorizationrules { [type=="secureBootEnabled", value==true, issuer=="AttestationService"]=>permit(); }; issuancerules { => issue(type="SecurityLevelValue", value=100); };
複雜的原則可以用類似的方式製作。 如需詳細資訊,請參閱證明原則範例。[type="SecurityLevelValue", value=100, valueType="Integer", issuer="AttestationPolicy"]
- 儲存檔案。
以 JSON Web 簽章格式建立原則檔案
建立原則檔案之後,若要上傳 JSON Web 簽章 (JWS) 格式的原則,請遵循下列步驟。
使用原則 (utf-8 編碼) 產生 JWS、RFC7515 作為承載。 Base64Url 編碼原則的承載識別碼應為 "AttestationPolicy"。
範例 JWT:
Header: {"alg":"none"} Payload: {"AttestationPolicy":" Base64Url (policy)"} Signature: {} JWS format: eyJhbGciOiJub25lIn0.XXXXXXXXX.
簽署原則 (選擇性)。 Azure 證明支援下列演算法:
- None:請勿簽署原則承載。
- RS256:支援用來簽署原則承載的演算法。
上傳 JWS 並驗證原則。
- 如果原則檔案沒有語法錯誤,服務就會接受原則檔案。
- 如果原則檔案包含語法錯誤,服務就會拒絕原則檔案。