Azure Key Vault güvenli anahtar sürüm ilkesi dil bilgisi

Bu makalede, Azure İlkesi üzerinde modellenen güvenli anahtar yayın ilkesi için basitleştirilmiş bir EBNF dil bilgisi belgelenmiştir. Güvenli anahtar sürüm ilkesinin tam bir örneği için bkz . gizli VM anahtarı yayın ilkesi.

(* string and number from JSON *)
value =
  string |
  number |
  "true" |
  "false";

(* The operators supported for claim value comparison *)
operator =
  "equals:" |
  "notEquals:" |
  "less:" |
  "lessOrEquals:" |
  "greater:" |
  "greaterOrEquals:" |
  "exists:";

(* A JSON condition that evaluates the value of a claim *)
claim_condition =
  "{" "claim:", string "," operator, ":", value "}";

(* A JSON condition requiring any of the listed conditions to be true *)
anyof_condition =
  "{" "anyof:", condition_array "}";

(* A JSON condition requiring all of the listed conditions to be true *)
allof_condition =
  "{" "allof:", condition_array "}";

(* A condition is any of the allowed condition types *)
condition =
  claim_condition |
  anyof_condition |
  allof_condition;

(* A list of conditions, one is required *)
condition_list =
  condition { "," condition };

(* An JSON array of conditions *)
condition_array =
  "[" condition_list "]";

(* A JSON authority with its conditions *)
authority =
  "{" "authority:", string "," ( anyof_condition | allof_condition );

(* A list of authorities, one is required *)
authority_list =
  authority { "," authority_list };

(* A policy is an anyOf selector of authorities *)
policy = 
  "{" "version: \"1.0.0\"", "anyOf:", "[" authority_list "]" "}";

Talep koşulu

Talep Koşulu, bir talep adı, eşleştirme koşulu ve değer tanımlayan bir JSON nesnesidir, örneğin:

{ 
  "claim": "<claim name>", 
  "equals": <value to match>
} 

İlk yinelemede, izin verilen tek koşul "eşittir"dir, ancak gelecekteki yinelemeler Azure İlkesi benzer diğer işleçlere izin verebilir (Koşullar bölümüne bakın). Belirtilen bir talep yoksa koşulu karşılanmamış olarak kabul edilir.

Talep adları JSON nesne gezintisini etkinleştirmek için "nokta gösterimine" izin verir, örneğin:

{ 
  "claim": "object.object.claim", 
  "equals": <value to match>
}

Dizi belirtimleri şu anda desteklenmemektedir. Dil bilgisi başına, nesnelere eşleştirme için değer olarak izin verilmez.

AnyOf, AllOf koşulları

AnOf ve AllOf koşul nesneleri, OR ve AND modellenmesine olanak sağlar. AnyOf için, sağlanan koşullardan herhangi biri doğruysa, koşul karşılanır. AllOf için tüm koşullar doğru olmalıdır.

Örnekler aşağıda gösterilmiştir. İlkinde allOf için tüm koşulların karşılanması gerekir:

{
  "allOf":
  [
    { 
      "claim": "<claim_1>", 
      "equals": <value_1>
    },
    { 
      "claim": "<claim_2>", 
      "equals": <value_2>
    }
  ]
}

Anlamı (claim_1 == value_1) && (claim_2 == value_2).

Bu örnekte anyOf, herhangi bir koşulun eşleşmesini gerektirir:

{
  "anyOf":
  [
    { 
      "claim": "<claim_1>", 
      "equals": <value_1>
    },
    { 
      "claim": "<claim_2>", 
      "equals": <value_2>
    }
  ]
}

Anlamı (claim_1 == value_2) || (claim_2 == value_2)

anyOf ve allOf koşul nesneleri iç içe yerleştirilmiş olabilir:

  "allOf":
  [
    { 
      "claim": "<claim_1>", 
      "equals": <value_1>
    },
    {
      "anyOf":
      [
        { 
          "claim": "<claim_2>", 
          "equals": <value_2>
        },
        { 
          "claim": "<claim_3>", 
          "equals": <value_3>
        }
      ]
    }
  ]

Veya:

{
  "allOf":
  [
    { 
      "claim": "<claim_1>", 
      "equals": <value_1>
    },
    {
      "anyOf":
      [
        { 
          "claim": "<claim_2>", 
          "equals": <value_2>
        },
        {
          "allOf":
          [
            { 
              "claim": "<claim_3>", 
              "equals": <value_3>
            },
            { 
              "claim": "<claim_4>", 
              "equals": <value_4>
            }
          ]
        }
      ]
    }
  ]
}

Önemli sürüm yetkilisi

Koşullar, Yetkili deyimleri halinde toplanır ve birleştirilir:

{
  "authority": "<issuer>",
  "allOf":
  [
    { 
      "claim": "<claim_1>", 
      "equals": <value_1>
    }
  ]
}

Where:

  • authority: Talepleri yapan yetkilinin tanımlayıcısı. Bu tanımlayıcı, JSON Web Belirtecindeki iss talebiyle aynı şekilde çalışır. Dolaylı olarak Ortam Onayını imzalayan bir anahtara başvurur.
  • allOf: Yayın ilkesinin başarılı olması için ortam onayında karşılanması gereken talepleri ve değerleri tanımlayan bir veya daha fazla talep koşulu. anyOf'a da izin verilir. Ancak, her ikisinin birlikte kullanılmasına izin verilmez.

Anahtar Yayın İlkesi

Yayın ilkesi, bir dizi anahtar yetkiliyi içeren anyOf koşuludur:

{
  "anyOf":
  [
    {
      "authority": "my.attestation.com",
      "allOf":
      [
        { 
          "claim": "mr-signer", 
          "equals": "0123456789"
        }
      ]
    }
  ]
}

Kodlama anahtarı sürüm ilkesi

Anahtar sürüm ilkesi bir JSON belgesi olduğundan, Swagger tanımlarında tam dili açıklama gereğini önlemek için istekler ve AKV'ye yanıt olarak taşındığında kodlanır.

Kodlama aşağıdaki gibidir:

{
  "contentType": "application/json; charset=utf-8",
  "data": "<BASE64URL(JSON serialization of policy)>"
}

Ortam Onayı

Ortam Onaylama, JSON Web Belirteci formunda, güvenilir bir yetkiliden gelen imzalı bir onaydır. Ortam Onaylama en az bir anahtar şifreleme anahtarı ve Hedef ortam hakkında Anahtar Yayın İlkesi ile eşleşen bir veya daha fazla talep (örneğin, TEE türü, yayımcı, sürüm) içerir. Anahtar şifreleme anahtarı, anahtar dışarı aktarma için kullanılan hedef yürütme ortamı tarafından sahip olunan ve korunan bir ortak RSA anahtarıdır. TEE anahtarları talebinde (x-ms-runtime/keys) görünmelidir. Bu talep, JSON Web Anahtarı Kümesini temsil eden bir JSON nesnesidir. JWKS içinde anahtarlardan birinin şifreleme anahtarı olarak kullanım gereksinimlerini karşılaması gerekir (key_use "enc" veya key_ops "şifreleme" içerir). İlk uygun anahtar seçilir.

Key Vault ve Yönetilen HSM Kanıtlama Belirteci Gereksinimleri

Azure Key Vault Premium ve Yönetilen HSM Güvenli Anahtar Sürümü, Microsoft Azure Doğrulama Hizmeti ile birlikte tasarlanmıştır, ancak beklenen belirteç yapısına uygunsa, OpenID bağlantısını destekliyorsa ve beklenen taleplere sahipse kanıtlama sunucusunun belirteçleriyle çalışabilir. DigiCert şu anda kanıtlama belirteci imzalama sertifikaları için Azure Key Vault Premium ve Yönetilen HSM güveni olan tek genel CA'dır.

Gereksinimlerin tamamı şunlardır:

  • iss , verenin gerekli olduğunu tanımlayan ve istenen anahtardaki SKR ilkesiyle eşleştirilen taleptir.

    • Verenin, DigiCert CA'da kök kökenli bir sertifika kullanarak OpenID Bağlan Meta Verilerini desteklemesi gerekir.

    • OpenID Bağlan Meta Verilerinde jwks_uri talebi gereklidir ve kümedeki her JWK'nin kid, kty ve bir X5c imzalama sertifikası dizisi içermesi gereken bir JSON Web Anahtarı Kümesine (JWKS) çözümlenmesi gerekir.

  • x-ms-runtime talebi, aşağıdakini içeren bir JSON nesnesi olarak gereklidir:

    • Test edilen ortam tarafından tutulan anahtarları temsil eden anahtarlar adlı bir JSON Web Anahtarları dizisi. Anahtarlar düz JWK biçimi veya x5c dizisi olmalıdır (ilk anahtar imzalama anahtarı olarak alınır ve alt öğe OpenId Bağlan meta verilerindeki bir imzalama anahtarıyla eşleşmelidir).

    • Çocuk gerekli.

    • Bu anahtarlardan biri RSA olmalıdır.

    • Şifreleme key_use veya Şifreleme işlemini içeren bir key_ops dizisiyle işaretlenir.

Örnek belirteç için bkz. Azure Doğrulama belirteci örnekleri.