Azure Key Vault セキュリティーで保護されたキー リリース ポリシーの文法
この記事では、セキュリティで保護されたキー リリース ポリシー用の簡略化された EBNF 文法について取り上げ、それ自体は Azure Policy をモデルとしています。 セキュリティで保護されたキーのリリース ポリシーの完全な例については、機密 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 Web Token の iss 要求と同じ方法で機能します。 [環境アサーション] に署名するキーを間接的に参照します。
- allOf: リリース ポリシーが成功するために環境アサーションで満たす必要がある要求と値を識別する 1 つ以上の要求条件。 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 Web トークン 形式) です。 環境アサーションには、少なくともキー暗号化キーと、キー リリース ポリシーと一致するターゲット環境に関する 1 つ以上の要求 (TEE の型、発行元、バージョンなど) が含まれます。 キー暗号化キーは、キーのエクスポートに使用されるターゲット実行環境によって所有および保護されている公開 RSA キーです。 TEE キー要求 (x-ms-runtime/keys) に表示する必要があります。 この要求は、JSON Web Key Set を表す JSON オブジェクトです。 JWKS 内では、キーの 1 つが暗号化キーとして使用する要件を満たしている必要があります (key_use は "enc"である、またはkey_ops には "encrypt" が含まれている)。 最初の適切なキーが選択されます。
Key Vault とマネージド HSM 構成証明トークンの要件
Azure Key Vault Premium およびマネージド HSM で保護されたキー リリースは、Microsoft Azure Attestation サービスに合わせて設計されています。ただ、想定されるトークン構造に準拠し、OpenID Connect をサポートし、想定される要求がある場合は、任意の構成証明サーバーのトークンで動作させることができます。 DigiCert は現在、構成証明トークン署名証明書に関して Azure Key Vault Premium とマネージド HSM が信頼する唯一のパブリック CA です。
すべての要件は以下のとおりです。
発行者を識別する iss 要求は必須で、要求されているキーの SKR ポリシーに対して照合されます。
発行者は、DigiCert CA をルートとする証明書を使用して OpenID Connect メタデータをサポートする必要があります。
OpenID Connect メタデータに jwks_uri 要求が必要で、JSON Web Key セット (JWKS) に解決される必要があります。ここで、セット内の各 JWK に kid、kty、署名証明書の X5c 配列が含まれている必要があります。
x-ms-runtime 要求は、以下を含む JSON オブジェクトとして必要です。
構成証明された環境によって保持されるキーを表す、keys という名前の JSON Web Key の配列。 キーは、プレーン JWK 形式または x5c 配列である必要があります (最初のキーは署名キーとして取得され、その kid は OpenId Connect メタデータの署名キーと一致する必要があります)。
kid は必須です。
これらのキーの 1 つは RSA である必要があります。
暗号化の key_use または Encrypt 操作を含む key_ops 配列でマークされます。
サンプル トークンについては、「Azure Attestation トークンの例」を参照してください。