Политика Azure — установить срок действия для ключей / секретов

#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 и придумал сценарий для уменьшения существующих ресурсов, это лучшее, что я могу придумать.