Azure Key Vault 보안 키 릴리스 정책 문법
이 문서에서는 자체적으로 Azure Policy를 모델링한 보안 키 릴리스 정책에 대해 간소화된 EBNF 문법을 설명합니다. 보안 키 릴리스 정책의 전체 예제는 기밀 VM 키 릴리스 정책을 참조하세요.
(* 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 "]" "}";
클레임 조건
클레임 조건은 클레임 이름, 일치 조건 및 값을 식별하는 JSON 개체입니다. 예를 들면 다음과 같습니다.
{
"claim": "<claim name>",
"equals": <value to match>
}
첫 번째 반복에서 허용되는 유일한 조건은 "같음"이지만 이후 반복에서는 Azure Policy와 유사한 다른 연산자를 허용할 수 있습니다(조건 섹션 참조). 지정된 클레임이 없으면 해당 조건이 충족되지 않은 것으로 간주됩니다.
클레임 이름은 JSON 개체 탐색이 가능하도록 "점 표기법"을 사용할 수 있습니다. 예를 들면 다음과 같습니다.
{
"claim": "object.object.claim",
"equals": <value to match>
}
배열 사양은 현재 지원되지 않습니다. 문법에 따라 개체는 일치 값으로 허용되지 않습니다.
AnyOf, AllOf 조건
AnOf 및 AllOf 조건 개체는 OR 및 AND의 모델링을 허용합니다. AnyOf의 경우 제공된 조건 중 true가 있으면 조건이 충족됩니다. AllOf의 경우 모든 조건이 true여야 합니다.
예제는 다음과 같습니다. 첫 번째에서 allOf는 모든 조건을 충족해야 합니다.
{
"allOf":
[
{
"claim": "<claim_1>",
"equals": <value_1>
},
{
"claim": "<claim_2>",
"equals": <value_2>
}
]
}
의미(claim_1 == value_1) &&(claim_2 == value_2).
이 예제에서 anyOf는 임의의 조건이 일치해야 합니다.
{
"anyOf":
[
{
"claim": "<claim_1>",
"equals": <value_1>
},
{
"claim": "<claim_2>",
"equals": <value_2>
}
]
}
즉, (claim_1 == value_2) || (claim_2 == value_2)여야 합니다.
anyOf 및 allOf 조건 개체는 중첩될 수 있습니다.
"allOf":
[
{
"claim": "<claim_1>",
"equals": <value_1>
},
{
"anyOf":
[
{
"claim": "<claim_2>",
"equals": <value_2>
},
{
"claim": "<claim_3>",
"equals": <value_3>
}
]
}
]
또는
{
"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>
}
]
}
]
}
]
}
키 릴리스 기관
조건은 Authority 문으로 수집되고 결합됩니다.
{
"authority": "<issuer>",
"allOf":
[
{
"claim": "<claim_1>",
"equals": <value_1>
}
]
}
여기서
- authority: 클레임을 하는 권한의 식별자입니다. 이 식별자는 JSON 웹 토큰의 iss 클레임과 동일한 방식으로 작동합니다. 환경 어설션에 서명하는 키를 간접적으로 참조합니다.
- allOf: 릴리스 정책이 성공하기 위해 환경 어설션에서 충족해야 하는 클레임 및 값을 식별하는 하나 이상의 클레임 조건입니다. anyOf도 허용됩니다. 그러나 둘 다 함께 사용할 수는 없습니다.
키 릴리스 정책
릴리스 정책은 키 기관 배열을 포함하는 anyOf 조건입니다.
{
"anyOf":
[
{
"authority": "my.attestation.com",
"allOf":
[
{
"claim": "mr-signer",
"equals": "0123456789"
}
]
}
]
}
키 릴리스 정책 인코딩
키 릴리스 정책은 JSON 문서이므로 Swagger 정의에서 전체 언어를 설명할 필요가 없도록 AKV에 대한 요청 및 응답으로 전달될 때 인코딩됩니다.
인코딩은 다음과 같습니다.
{
"contentType": "application/json; charset=utf-8",
"data": "<BASE64URL(JSON serialization of policy)>"
}
환경 어설션
환경 어설션은 신뢰할 수 있는 기관의 서명된 어설션(JSON 웹 토큰 형식)입니다. 환경 어설션은 키 릴리스 정책과 일치하는 대상 환경(예: TEE 유형, 게시자, 버전)에 대한 하나 이상의 클레임과 하나 이상의 키 암호화 키를 포함합니다. 키 암호화 키는 대상 실행 환경에서 소유하고 보호하는 공용 RSA 키로, 키 내보내기에 사용됩니다. TEE 키 클레임(x-ms-runtime/keys)에 표시되어야 합니다. 이 클레임은 JSON 웹 키 집합을 나타내는 JSON 개체입니다. JWKS 내에서 키 중 하나는 암호화 키로 사용하기 위한 요구 사항을 충족해야 합니다(key_use는 "enc"이거나 key_ops에 "encrypt"를 포함). 첫 번째 적합한 키가 선택됩니다.
Key Vault 및 관리형 HSM 증명 토큰 요구 사항
Azure Key Vault 프리미엄 및 관리형 HSM 보안 키 릴리스는 Microsoft Azure Attestation Service와 함께 설계되었지만 예상된 토큰 구조를 준수하고 OpenID 연결을 지원하며 예상 클레임이 있는 경우 증명 서버의 토큰과 함께 작동할 수 있습니다. DigiCert는 현재 Azure Key Vault 프리미엄 및 관리형 HSM이 증명 토큰 서명 인증서에 대해 신뢰하는 유일한 공용 CA입니다.
전체 요구 사항은 다음과 같습니다.
iss는 발급자를 식별하는 클레임이 필요하며 요청되는 키에 대한 SKR 정책과 일치합니다.
발급자는 DigiCert CA에 루트된 인증서를 사용하여 OpenID Connect 메타데이터를 지원해야 합니다.
OpenID Connect 메타데이터에서 jwks_uri 클레임이 필요하며 JWKS(JSON Web Key 집합)에 대해 확인해야 합니다. 여기서 집합의 각 JWK에는 서명 인증서의 kid, kty 및 X5c 배열이 포함되어야 합니다.
x-ms-runtime 클레임은 다음을 포함하는 JSON 개체로 필요합니다.
증명된 환경에서 보유하는 키를 나타내는 키라는 JSON 웹 키의 배열입니다. 키는 일반 JWK 형식 또는 x5c 배열이어야 합니다(첫 번째 키는 서명 키로 사용되며 해당 kid는 OpenId Connect 메타데이터의 서명 키와 일치해야 합니다).
kid가 필요합니다.
이러한 키 중 하나는 RSA여야 합니다.
암호화 key_use 또는 암호화 작업이 포함된 key_ops 배열로 표시됩니다.
샘플 토큰은 Azure Attestation 토큰의 예제를 참조하세요.