你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
如何创作证明策略
证明策略是上传到 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)
};
策略文件包含三个段:
- 版本:版本是所遵循语法的版本号。
目前唯一支持的版本是版本 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) 格式上传策略,请执行以下步骤。
生成 JWS,RFC7515,其中以策略(utf-8 编码)作为有效负载。 Base64Url 编码策略的有效负载标识符应为“AttestationPolicy”。
示例 JWT:
Header: {"alg":"none"} Payload: {"AttestationPolicy":" Base64Url (policy)"} Signature: {} JWS format: eyJhbGciOiJub25lIn0.XXXXXXXXX.
对策略进行签名(可选)。 Azure 证明支持以下算法:
- 无:不要对策略有效负载进行签名。
- RS256:受支持的对策略有效负载进行签名的算法。
上传 JWS 并验证策略。
- 如果策略文件没有语法错误,则服务将接受该策略文件。
- 如果策略文件包含语法错误,则服务将拒绝该策略文件。