你当前正在访问 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)
};

策略文件包含三个段:

  • 版本:版本是所遵循语法的版本号。
    version=MajorVersion.MinorVersion	
    
    目前唯一支持的版本是版本 1.0。
  • authorizationrules:将要受限检查的声明规则集合,用于确定 Azure 证明是否应继续执行 issuancerules。 声明规则将按其定义的顺序应用。
  • issuancerules:将会进行计算,以将其他信息添加到策略中所定义证明结果的生命规则集合。 声明规则按其定义顺序应用,它们也是可选的。

有关详细信息,请参阅声明和声明规则

起草策略文件

  1. 创建新的文件。
  2. 向文件添加版本。
  3. 添加 authorizationrules 和 issuancerules 部分 。
    version=1.0;
    authorizationrules
    {
    =>deny();
    };
    
    issuancerules
    {
    };
    
    授权规则包含没有任何条件的 deny() 操作,以确保不处理任何颁发规则。 或者,授权规则也可以包含 permit() 操作,以允许处理颁发规则。
  4. 向授权规则添加声明规则
    version=1.0;
    authorizationrules
    {
        [type=="secureBootEnabled", value==true, issuer=="AttestationService"]=>permit();
    };
    
    issuancerules
    {
    };
    
    如果传入声明集包含与类型、值和证书颁发者匹配的声明,则 permit() 操作会通知策略引擎处理 issuancerules
  5. 将声明规则添加到 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"]
    
    可以用类似方式制定复杂的策略。 有关详细信息,请参阅证明策略示例
  6. 保存文件。

以 JSON Web 签名格式创建策略文件

创建策略文件后,如果要以 JSON Web 签名 (JWS) 格式上传策略,请执行以下步骤。

  1. 生成 JWS,RFC7515,其中以策略(utf-8 编码)作为有效负载。 Base64Url 编码策略的有效负载标识符应为“AttestationPolicy”。

    示例 JWT:

    Header: {"alg":"none"}
    Payload: {"AttestationPolicy":" Base64Url (policy)"}
    Signature: {}
    
    JWS format: eyJhbGciOiJub25lIn0.XXXXXXXXX.
    
  2. 对策略进行签名(可选)。 Azure 证明支持以下算法:

    • :不要对策略有效负载进行签名。
    • RS256:受支持的对策略有效负载进行签名的算法。
  3. 上传 JWS 并验证策略。

    • 如果策略文件没有语法错误,则服务将接受该策略文件。
    • 如果策略文件包含语法错误,则服务将拒绝该策略文件。

后续步骤