Az Azure Key Vault biztonságos kulcskiadási szabályzatának nyelvtana
Ez a cikk a biztonságos kulcskiadási szabályzat egyszerűsített EBNF-nyelvtanát ismerteti, amelyet maga az Azure Policy modellez. A biztonságos kulcs kiadási szabályzatának teljes példáját a bizalmas virtuálisgép-kulcs kiadási szabályzatában talál.
(* 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 "]" "}";
Jogcímfeltétel
A jogcímfeltétel egy JSON-objektum, amely azonosítja a jogcím nevét, az egyeztetés feltételét és egy értéket, például:
{
"claim": "<claim name>",
"equals": <value to match>
}
Az első iterációban az egyetlen engedélyezett feltétel az "egyenlő", de a jövőbeli iterációk más, az Azure Policyhoz hasonló operátorokat is lehetővé tehetnek (lásd a feltételekről szóló szakaszt). Ha egy megadott jogcím nincs jelen, a feltétel nem teljesültnek minősül.
A jogcímnevek lehetővé teszik a "pontjelezést" a JSON-objektumok navigációjának engedélyezéséhez, például:
{
"claim": "object.object.claim",
"equals": <value to match>
}
A tömbspecifikációk jelenleg nem támogatottak. A nyelvhelyesség szerint az objektumok nem használhatók értékekként az egyezéshez.
AnyOf, AllOf feltételek
Az AnOf és az AllOf feltételobjektumok lehetővé teszik az OR és az AND modellezését. Az AnyOf esetében, ha a megadott feltételek bármelyike teljesül, a feltétel teljesül. Az AllOf esetében az összes feltételnek igaznak kell lennie.
Példák az alábbiakban láthatók. Az első esetben az allOf megköveteli az összes feltétel teljesítését:
{
"allOf":
[
{
"claim": "<claim_1>",
"equals": <value_1>
},
{
"claim": "<claim_2>",
"equals": <value_2>
}
]
}
Jelentése (claim_1 == value_1) &> (claim_2 == value_2).
Ebben a példában az anyOf megköveteli, hogy minden feltétel egyezzen:
{
"anyOf":
[
{
"claim": "<claim_1>",
"equals": <value_1>
},
{
"claim": "<claim_2>",
"equals": <value_2>
}
]
}
Jelentés (claim_1 == value_2) || (claim_2 == value_2)
Az anyOf és allOf feltételobjektumok beágyazottak lehetnek:
"allOf":
[
{
"claim": "<claim_1>",
"equals": <value_1>
},
{
"anyOf":
[
{
"claim": "<claim_2>",
"equals": <value_2>
},
{
"claim": "<claim_3>",
"equals": <value_3>
}
]
}
]
Vagy:
{
"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>
}
]
}
]
}
]
}
Kulcskiadási szolgáltató
A feltételek szolgáltatói utasításokba vannak gyűjtve és kombinálva:
{
"authority": "<issuer>",
"allOf":
[
{
"claim": "<claim_1>",
"equals": <value_1>
}
]
}
Ahol:
- szolgáltató: A jogcímeket beszolgáltató hatóság azonosítója. Ez az azonosító ugyanúgy működik, mint egy JSON-webjogkivonat iss-jogcíme. Közvetetten hivatkozik egy olyan kulcsra, amely aláírja a környezeti helyességi feltételt.
- allOf: Egy vagy több jogcímfeltétel, amely azonosítja azokat a jogcímeket és értékeket, amelyeknek teljesülniük kell a kiadási szabályzat sikerességéhez szükséges környezeti állításban. az anyOf is engedélyezett. Azonban mindkettő nem engedélyezett együtt.
Kulcskiadási szabályzat
A kiadási szabályzat bármely olyan feltétel, amely a főbb hatóságok tömbét tartalmazza:
{
"anyOf":
[
{
"authority": "my.attestation.com",
"allOf":
[
{
"claim": "mr-signer",
"equals": "0123456789"
}
]
}
]
}
Kódolási kulcs kiadási szabályzata
Mivel a kulcskiadási szabályzat egy JSON-dokumentum, a rendszer kódolja, amikor kéréseket és válaszokat küld az AKV-nak, hogy ne kelljen leírnia a teljes nyelvet a Swagger-definíciókban.
A kódolás a következő:
{
"contentType": "application/json; charset=utf-8",
"data": "<BASE64URL(JSON serialization of policy)>"
}
Környezeti helyesség
A környezeti helyesség egy JSON webes jogkivonat formájában aláírt, megbízható szolgáltatótól származó helyességi feltétel. A környezetérvényesítés legalább egy kulcstitkosítási kulcsot és egy vagy több jogcímet tartalmaz a célkörnyezetről (például TEE-típus, közzétevő, verzió), amelyek megfelelnek a kulcskiadási szabályzatnak. A kulcstitkosítási kulcs egy nyilvános RSA-kulcs, amelyet a kulcsexportáláshoz használt célvégrehajtási környezet véd. Meg kell jelennie a TEE-kulcsok jogcímében (x-ms-runtime/keys). Ez a jogcím egy JSON-objektum, amely egy JSON-webkulcskészletet jelöl. A JWKS-ben az egyik kulcsnak meg kell felelnie a titkosítási kulcsként való használatra vonatkozó követelményeknek (key_use "enc", vagy key_ops "titkosítást" tartalmaz). Az első megfelelő kulcs van kiválasztva.
A Key Vault és a felügyelt HSM-igazolási jogkivonat követelményei
Az Azure Key Vault prémium szintű és felügyelt HSM biztonságos kulcskiadása a Microsoft Azure Attestation Service mellett lett kialakítva, de bármely igazolási kiszolgáló jogkivonatával együttműködhet, ha megfelel a várt jogkivonat-struktúrának, támogatja az OpenID-csatlakozást, és rendelkezik a várt jogcímekkel. A DigiCert jelenleg az egyetlen nyilvános hitelesítésszolgáltató, amelyet az Azure Key Vault Premium és a felügyelt HSM megbízik az igazolási jogkivonat-aláíró tanúsítványokban.
A követelmények teljes készlete a következő:
Iss-jogcím , amely azonosítja a kiállítót, és megfelel a kért kulcs SKR-szabályzatának.
A kiállítónak támogatnia kell az OpenID Connect metaadatait a DigiCert CA-ban gyökerező tanúsítvány használatával.
Az OpenID Connect metaadataiban a jwks_uri jogcímre van szükség, és egy JSON-webkulcskészletre (JWKS) kell feloldani, ahol a készlet minden JWK-jának tartalmaznia kell az aláíró tanúsítványokat tartalmazó kid, kty és X5c tömböt.
Az x-ms-runtime jogcím olyan JSON-objektumként szükséges, amely a következőket tartalmazza:
JSON-webkulcsok tömbje, amely az igazolt környezet által tárolt kulcsokat jelöli. A kulcsok egyszerű JWK formátumúnak vagy x5c tömbnek kell lenniük (az első kulcs az aláíró kulcs, a gyermeknek pedig meg kell egyeznie egy aláíró kulccsal az OpenId Connect metaadataiban).
Gyerekre van szükség.
Az egyik kulcsnak RSA-nak kell lennie.
Titkosítási key_use vagy titkosítási műveletet tartalmazó key_ops tömb.
A mintajogkivonatokért tekintse meg az Azure-igazolási jogkivonatok példáit.