Grammatica dei criteri di Secure Key Release di Azure Key Vault
Questo articolo illustra una grammatica EBNF semplificata per i criteri di rilascio delle chiavi sicure, modellati su Criteri di Azure. Per un esempio completo dei criteri di rilascio delle chiavi sicure, vedere i criteri di rilascio della chiave di macchina virtuale riservata.
(* 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 "]" "}";
Condizione attestazione
Una condizione attestazione è un oggetto JSON che identifica un nome di attestazione, una condizione per la corrispondenza e un valore, ad esempio:
{
"claim": "<claim name>",
"equals": <value to match>
}
Nella prima iterazione, l'unica condizione consentita è "uguale", ma le iterazioni future possono consentire altri operatori simili a Criteri di Azure (vedere la sezione condizioni). Se non è presente un'attestazione specificata, la condizione viene considerata non soddisfatta.
I nomi delle attestazioni consentono la "notazione punto" per abilitare la navigazione degli oggetti JSON, ad esempio:
{
"claim": "object.object.claim",
"equals": <value to match>
}
Le specifiche della matrice non sono attualmente supportate. In base alla grammatica, gli oggetti non sono consentiti come valori per la corrispondenza.
Condizioni AnyOf, AllOf
Gli oggetti condizione AnOf e AllOf consentono la modellazione di OR e AND. Per AnyOf, se una delle condizioni specificate è true, la condizione viene soddisfatta. Per AllOf, tutte le condizioni devono essere vere.
Di seguito sono riportati alcuni esempi. Nel primo, allOf richiede che tutte le condizioni siano soddisfatte:
{
"allOf":
[
{
"claim": "<claim_1>",
"equals": <value_1>
},
{
"claim": "<claim_2>",
"equals": <value_2>
}
]
}
Significato (claim_1 == value_1) && (claim_2 == value_2).
In questo esempio anyOf richiede che qualsiasi condizione corrisponda:
{
"anyOf":
[
{
"claim": "<claim_1>",
"equals": <value_1>
},
{
"claim": "<claim_2>",
"equals": <value_2>
}
]
}
Significato (claim_1 == value_2) || (claim_2 == value_2)
Gli oggetti condizione anyOf e allOf possono essere annidati:
"allOf":
[
{
"claim": "<claim_1>",
"equals": <value_1>
},
{
"anyOf":
[
{
"claim": "<claim_2>",
"equals": <value_2>
},
{
"claim": "<claim_3>",
"equals": <value_3>
}
]
}
]
Oppure:
{
"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>
}
]
}
]
}
]
}
Autorità di rilascio chiave
Le condizioni vengono raccolte nelle istruzioni dell'autorità e combinate:
{
"authority": "<issuer>",
"allOf":
[
{
"claim": "<claim_1>",
"equals": <value_1>
}
]
}
Dove:
- authority: identificatore dell'autorità che effettua le attestazioni. Questo identificatore funziona nello stesso modo dell'attestazione iss in un token Web JSON. Fa riferimento indirettamente a una chiave che firma l'asserzione dell'ambiente.
- allOf: una o più condizioni attestazioni che identificano attestazioni e valori che devono essere soddisfatti nell'asserzione dell'ambiente affinché i criteri di versione abbiano esito positivo. anyOf è consentito anche. Tuttavia, entrambi non sono consentiti insieme.
Criteri di rilascio chiave
I criteri di rilascio sono una condizione anyOf contenente una matrice di autorità chiave:
{
"anyOf":
[
{
"authority": "my.attestation.com",
"allOf":
[
{
"claim": "mr-signer",
"equals": "0123456789"
}
]
}
]
}
Criteri di rilascio della chiave di codifica
Poiché i criteri di rilascio chiave sono un documento JSON, vengono codificati quando vengono eseguiti in richieste e risposte ad AKV per evitare la necessità di descrivere il linguaggio completo nelle definizioni di Swagger.
La codifica è la seguente:
{
"contentType": "application/json; charset=utf-8",
"data": "<BASE64URL(JSON serialization of policy)>"
}
Asserzione dell'ambiente
Un'asserzione environment è un'asserzione firmata, nel formato JSON Web Token, da un'autorità attendibile. Un'asserzione dell'ambiente contiene almeno una chiave di crittografia della chiave e una o più attestazioni relative all'ambiente di destinazione (ad esempio, tipo TEE, editore, versione) corrispondenti ai criteri di rilascio della chiave. La chiave di crittografia della chiave è una chiave RSA pubblica di proprietà e protetta dall'ambiente di esecuzione di destinazione usato per l'esportazione delle chiavi. Deve essere visualizzata nell'attestazione delle chiavi TEE (x-ms-runtime/keys). Questa attestazione è un oggetto JSON che rappresenta un set di JSON Web Key. In JWKS, una delle chiavi deve soddisfare i requisiti per l'uso come chiave di crittografia (key_use è "enc" o key_ops contiene "encrypt"). Viene scelta la prima chiave appropriata.
Requisiti del token di attestazione del modulo di protezione hardware gestito e dell'insieme di credenziali delle chiavi
Il rilascio della chiave sicura di Azure Key Vault Premium e del modulo di protezione HSM gestito è stato progettato insieme a Microsoft attestazione di Azure Service, ma può funzionare con qualsiasi token del server di attestazione se è conforme alla struttura di token prevista, supporta OpenID connect e ha le attestazioni previste. DigiCert è attualmente l'unica CA pubblica attendibile di Azure Key Vault Premium e del modulo di protezione hardware gestito per i certificati di firma del token di attestazione.
Il set completo di requisiti è:
attestazione iss che identifica l'autorità emittente è obbligatoria e viene confrontata con i criteri SKR sulla chiave richiesta.
L'autorità emittente deve supportare i metadati openID Connect usando un certificato rooted nella CA DigiCert.
Nei metadati OpenID Connect è necessaria l'attestazione jwks_uri e deve essere risolta in un set di chiavi Web JSON (JWKS), in cui ogni JWK nel set deve contenere elementi figlio, kty e una matrice X5c di certificati di firma.
L'attestazione x-ms-runtime è necessaria come oggetto JSON contenente:
Matrice di chiavi Web JSON denominate chiavi che rappresentano le chiavi contenute nell'ambiente di attestazione. Le chiavi devono essere in formato JWK normale o matrice x5c (la prima chiave viene presa come chiave di firma e il figlio deve corrispondere a una chiave di firma nei metadati OpenId Connect).
Il bambino è obbligatorio.
Una di queste chiavi deve essere rsa.
Contrassegnato con key_use di crittografia o una matrice di key_ops contenente l'operazione Encrypt.
Per un token di esempio, vedere Esempi di un token attestazione di Azure.