如何撰寫證明原則
證明原則是上傳至 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:版本是後續文法的版本號碼。
version=MajorVersion.MinorVersion
目前唯一支援的版本為 1.0。
authorizationrules:將要先檢查的宣告規則集合,以判斷 Azure 證明是否應該繼續處理 issuancerules。 宣告規則會依照其定義的順序套用。
issuancerules:將要評估的宣告規則集合,以將其他資訊新增至原則中定義的證明結果。 宣告規則會依照其定義的順序套用,而且也是選擇性的。
如需詳細資訊,請參閱宣告和宣告規則。
草擬原則檔案
- 建立新檔案。
- 新增檔案的版本。
- 新增 authorizationrules 和 issuancerules 的區段。
version=1.0;
authorizationrules
{
=>deny();
};
issuancerules
{
};
授權規則包含 deny() 動作,但不含任何條件,以確保不會處理任何發行規則。 或者,授權規則也可以包含 permit() 動作,以允許處理發行規則。
- 將宣告規則新增至授權規則
version=1.0;
authorizationrules
{
[type=="secureBootEnabled", value==true, issuer=="AttestationService"]=>permit();
};
issuancerules
{
};
如果傳入宣告集包含符合類型、值和簽發者的宣告,則 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 簽章格式建立原則檔案
建立原則檔案之後,若要上傳 JWS 格式的原則,請遵循下列步驟。
使用原則 (utf-8 編碼) 產生 JWS、RFC 7515 作為承載
- Base64Url 編碼原則的承載識別碼應為 "AttestationPolicy"。
範例 JWT:
Header: {"alg":"none"} Payload: {"AttestationPolicy":" Base64Url (policy)"} Signature: {} JWS format: eyJhbGciOiJub25lIn0.XXXXXXXXX.
(選擇性) 簽署原則。 Azure 證明支援下列演算法:
- 無:請勿簽署原則承載。
- RS256:支援用來簽署原則承載的演算法
上傳 JWS 並驗證原則。
- 如果原則檔案沒有語法錯誤,服務就會接受原則檔案。
- 如果原則檔案包含語法錯誤,服務就會拒絕原則檔案。