#azure #azure-policy
Вопрос:
Я пытаюсь написать политику Azure, которая проверяет, имеет ли ключ Azure дату истечения срока действия, если это не так, я хочу выполнить эффект DeployIfNotExists, чтобы установить его. Однако я получаю ошибку «ResourceNotFound».
Примечание: инструкция «if» без инструкции «then» работает нормально, когда я запускаю эту политику, она показывает мне, у каких ключей нет даты истечения срока действия. Возникает проблема при добавлении эффекта deployifnotexist.
{
"mode": "All",
"policyRule": {
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.KeyVault/vaults/keys"
},
{
"field": "Microsoft.KeyVault/vaults/keys/attributes.exp",
"exists": false
}
]
},
"then": {
"effect": "deployIfNotExists",
"details": {
"type": "Microsoft.KeyVault/vaults/keys",
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635"
],
"deployment": {
"properties": {
"mode": "incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.KeyVault/vaults/keys",
"apiVersion": "2021-06-01-preview",
"properties": {
"exp": "10000"
}
}
]
}
}
}
}
}
},
"parameters": {}
}
Ответ №1:
Здесь вы работаете на уровне данных хранилища ключей, что находится внутри него (ключи, секреты, сертификаты).
В том случае, когда речь идет не об инфраструктуре как таковой (конфигурации самого хранилища ключей), вы должны использовать Microsoft.KeyVault.Data
режим для своей пользовательской политики вместо All
.
Тем не менее, DeployIfNotExist
политики еще не поддерживаются — см. Официальную документацию о политике Azure для хранилища ключей. Вы можете только Audit
или Deny
.
Комментарии:
1. Если это так, то почему условие «если» работает должным образом с использованием поля «Microsoft.KeyVault / vaults / keys / attributes.exp»? При оценке этой политики он правильно определяет, какие ключи имеют дату истечения срока действия, если он может это сделать, почему я не могу изменить дату истечения срока действия, используя то же поле?
2. Насколько я понимаю, блок «если» проверяет наличие автономного ресурса без каких-либо предположений. При вводе блока «сведения» механизм политики предполагает, что между тем, что вы хотите развернуть, и тем, что сканируется, существует родительско-дочерняя связь, чего здесь нет, поскольку это один и тот же ресурс. Вместо этого вы можете рассмотреть возможность использования эффекта изменения, но, учитывая, что доступные псевдонимы являются «изменяемыми» для KeyVault, это тоже не то, что вы можете сделать. Возвращаясь к вашей первоначальной потребности, я бы выбрал Deny и придумал сценарий для уменьшения существующих ресурсов, это лучшее, что я могу придумать.