azurerm_virtual_machine ресурс
Используйте ресурс аудита azurerm_virtual_machine InSpec, чтобы проверить свойства, относящиеся к виртуальной машине.
Версия Azure REST API
Этот ресурс взаимодействует с версией 2017-12-01 API Azure Management. Дополнительную информацию см. в официальной документации Azure.
В настоящее время, похоже, нет способа выбрать версию документации Azure API. Если вы заметите упоминание более новой версии в официальной документации, пожалуйста, откройте вопрос или отправьте запрос на включение с обновленной версией.
Доступность
Установка
Этот ресурс доступен в inspec-azure пакете ресурсов. Для его использования добавьте следующее в свой inspec.yml в вашем профиле верхнего уровня:
depends:
- name: inspec-azure
git: https://github.com/inspec/inspec-azure.git
Вам также потребуется настроить свои учетные данные Azure; см. в файле README пакета ресурсов.
Версия
Этот ресурс впервые стал доступен в версии 1.0.0 пакета ресурсов inspec-azure.
Синтаксис
Необходимо указать resource_group и name виртуальной машины в качестве параметров.
describe azurerm_virtual_machine(resource_group: 'MyResourceGroup', name: 'MyVmName') do
...
end
Примеры
Убедитесь, что виртуальная машина имеет ожидаемые данные дисков
describe azurerm_virtual_machine(resource_group: 'MyResourceGroup', name: 'MyVmName') do
its('data_disks') { should include 'DataDisk1' }
its('data_disks') { should include 'DataDisk2' }
end
Убедитесь, что на виртуальной машине установлен ожидаемый агент мониторинга
describe azurerm_virtual_machine(resource_group: 'MyResourceGroup', name: 'MyVmName') do
it { should have_monitoring_agent_installed }
end
Параметры
resource_groupname
Примеры параметров
resource_group (обязательно)
Определяет группу ресурсов, в которой находится виртуальная машина, которую вы хотите проверить.
describe azurerm_virtual_machine(resource_group: 'MyResourceGroup', name: 'MyVmName') do
...
end
name (обязательно)
Определяет имя виртуальной машины, которую вы хотите проверить.
describe azurerm_virtual_machine(resource_group: 'MyResourceGroup', name: 'MyVmName') do
...
end
Атрибуты
idnamelocationpropertiesresourcestagstypezonesinstalled_extensions_typesinstalled_extensions_namesmonitoring_agent_installedos_disk_namedata_disk_names
id
Идентификатор виртуальной машины.
its('id') { should eq(id) }
Идентификатор будет в формате:
'/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/MyVirtualMachine'
name
Имя виртуальной машины.
its('name') { should eq('MyVmName') }
location
Расположение виртуальной машины.
its('location') { should eq('East US') }
метки
Метки виртуальной машины.
its('tags') { should eq({ 'key' => 'value' }) }
тип
Тип ресурса виртуальной машины.
its('type') { should eq('Microsoft.Compute/virtualMachines') }
зоны
Зоны доступности виртуальной машины.
its('zones') should include('zone1', 'zone2')
имя_диска_ОС
Имя операционной системы диска виртуальной машины.
its('os_disk_name') { should eq('OsDiskName') }
имена_дисков_данных
Имена дисков данных виртуальной машины.
its('data_disk_names') { should include('DataDisk1') }
типы_установленных_расширений
Список всех типов установленных расширений для виртуальной машины.
its('installed_extensions_types') { should eq(['ExtensionType']) }
имена_установленных_расширений
Список всех имен установленных расширений для виртуальной машины.
its('installed_extensions_names') { should eq(['ExtensionName']) }
Другие атрибуты
Существуют дополнительные атрибуты, к которым можно получить доступ, но которые мы не задокументировали. Пожалуйста, обратитесь к документации Azure. Любой атрибут в ответе можно получить, используя ключи, разделенные точками (.).
API может не всегда возвращать ключи, у которых нет связанных данных. Возможны случаи, когда глубоко вложенное свойство может не иметь нужного атрибута в вашей цепочке вызовов. Если вы обнаруживаете, что пишете тесты для свойств, которые могут быть nil, создайте fork этого пакета ресурсов и добавьте метод доступа к ресурсу. В этом методе доступа вы сможете защититься от нулевых ключей. Запросы на включение всегда приветствуются.
Сопоставители
В этом ресурсе InSpec аудита есть следующие специальные сопоставители. Полный список доступных сопоставителей можно найти на странице Универсальные сопоставители.
exists
# If a virtual machine is found it will exist
describe azurerm_virtual_machine(resource_group: 'MyResourceGroup', name: 'MyVmName') do
it { should exist }
end
# virtual machines that aren't found will not exist
describe azurerm_virtual_machine(resource_group: 'MyResourceGroup', name: 'DoesNotExist') do
it { should_not exist }
end
иметь_только_утвержденные_расширения
# Check if a virtual machine has only approved extensions. If an extension
# is used that's not in the list then the check will fail.
describe azurerm_virtual_machine(resource_group: 'MyResourceGroup', name: 'MyVmName') do
it { should have_only_approved_extensions(['ApprovedExtension', 'OtherApprovedExtensions']) }
end
иметь_установленный_агент_мониторинга
# Will be true if the MicrosoftMonitoringAgent is installed (Windows only)
describe azurerm_virtual_machine(resource_group: 'MyResourceGroup', name: 'MyVmName') do
it { should have_monitoring_agent_installed }
end
иметь_установленную_защиту_от_уязвимостей
# Will be true if any of the given extensions are installed.
describe azurerm_virtual_machine(resource_group: 'MyResourceGroup', name: 'MyVmName') do
it { should have_endpoint_protection_installed(['Extension1', 'Extension2']) }
end
Разрешения Azure
Ваш сервис-принципал должен быть настроен с ролью contributor на подписке, которую вы хотите проверить.
© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/inspec/resources/azurerm_virtual_machine/