Networks
Ресурс Networks представляет собой введенную нами абстракцию, которая позволяет определять группы IP-адресов или
подсетей, доступных для управления Host Based NGFW. Эти подсети затем могут быть связаны с конкретными группами
безопасности для логического разделения и использоваться в правилах для разрешения или блокирования доступа к
определенным ресурсам в вашей сети.
- Terraform module
- Terraform resource
- API
- nftables
Terraform module представляет собой высокоуровневую абстракцию над terraform resources, которая упрощает работу с ресурсами Terraform, скрывая сложность их непосредственного использования. Он предлагает простой и понятный интерфейс для взаимодействия, позволяя пользователям легко интегрироваться и управлять компонентами инфраструктуры без необходимости глубоко погружаться в детали каждого ресурса.
| название параметра | описание | тип данных | значение по умолчанию |
|---|---|---|---|
| name | Имя Security Group | String | |
| cidrs[] | Список CIDR, связанных с Security Group | String[] | [] |
Ограничения
name:- Длина значения поля не должна превышать 256 символов.
- Значение поля должно начинаться и заканчиваться символами без пробелов.
- Значение должно быть уникальным в рамках типа ресурса.
cidrs[]:- Значение элемента должно начинаться и заканчиваться символами без пробелов.
- Повторения значений в списке не допускаются.
- Необходимо указать минимум одно значение.
- В пределах одной Security Group и направления трафика (I/E), необходимо обеспечить, непересекаемость диапазонов адресов подсетей.
- Подсеть должна соответствовать формату записи, определенному в RFC 4632.
Пример использования
name: sg-example
cidrs:
- 10.0.0.0/24
Terraform resource является ключевым элементом в Terraform, предназначенным для управления различными аспектами инфраструктуры через код. Он позволяет задавать, настраивать и управлять инфраструктурными компонентами без привязки к их конкретным типам, обеспечивая автоматизацию развертывания и поддержки инфраструктуры согласно подходу Infrastructure as Code (IaC).
| название | обязательность | тип данных | доп. описание |
|---|---|---|---|
| items | да | Object | Cписок ресурсов создаваемые terraform. |
| items.key | да | String | Уникальный ключ блока items. |
| items.key.name | да | string | Имя подсети. |
| items.key.cidr | да | string | Подсеть типа IP. |
Ограничения
items:- Каждое правило должно обладать уникальным ключом для предотвращения конфликтов.
items.key:- Имя ключа должно совпадать с значением из поля name.
items.key.name:- Длина значения поля не должн а превышать 256 символов.
- Значение поля должно начинаться и заканчиваться символами без пробелов.
- Значение должно быть уникальным в рамках типа ресурса.
items.key.cidr:- Значение поля должно начинаться и заканчиваться символами без пробелов.
- В пределах одной Security Group и направления трафика (I/E), необходимо обеспечить, непересекаемость диапазонов адресов подсетей.
- Подсеть должна соответствовать формату записи, определенному в RFC 4632.
Пример использования
resource "sgroups_networks" "networks" {
items = {
key = {
name = "nw-1"
cidr = "10.0.0.0/24"
}
}
}
Более подробную документацию по API можно посмотреть здесь.
Более подробно по организации БД можно посмотреть здесь.
Входные параметры
networks.networks[]- Массив/Список подсетей типа IP.networks.networks[].name- название подсети.networks.networks[].network- объект содержащий CIDR подсетиnetworks.networks[].network.CIDR- Подсеть типа IP.syncOp- Поле определяющее действие с данными из запроса.
| название | обязательность | тип данных | значение по умолчанию |
|---|---|---|---|
| networks[] | да | Object[] | |
| networks[].name | да | String | |
| networks[].network | да | Object | |
| networks[].network.CIDR | да | String | |
| syncOp | да | Enum("Delete", "Upsert", "FullSync") |
Ограничения
networks.networks[].name:- Длина значения поля не должна превышать 256 символов.
- Значение поля должно начинаться и заканчиваться символами без пробелов.
- Значение должно быть уникальным в рамках типа ресурса.
networks.networks[].network.CIDR:- Значение поля должно начинаться и заканчиваться символами без пробелов.
- В пределах одной Security Group и направления трафика (I/E), необходимо обеспечить, непересекаемость диапазонов адресов подсетей.
- Подсеть должна соответствовать формату записи, определенному в RFC 4632.
Пример использования
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"networks": {
"networks": [{
"name": "nw-1",
"network": {
"CIDR": "10.0.0.0/24"
}
}]
},
"syncOp": "Upsert"
}'
Выходные параметры
| название | тип данных | описание |
|---|---|---|
| - | Object | в случае успеха возвращается пустое тело |
Возможные ошибки API
Пользователь указал некорректные значения агрументов
- HTTP code: 400
- gRPC code: INVALID_ARGUMENT
- gRPC number: 3
Не найден метод
- HTTP code: 404
- gRPC code: NOT_FOUND
- gRPC number: 5
Диаграмма последовательности
В этом разделе мы покажем, как ресурс networks, созданный с помощью Terraform/API, внедряется в настройки nftables. В
контексте HBF мы интерпретируем ресурс networks как проекцию на поле elements ресурса IPSet, который функционирует
в рамках инструмента nftables, обеспечивая более широкие возможности для управления подсетями.
$IPSet_Name- Наименование IPSet$type- Описывает тип данных$flags- Описывает свойства IPSet.$elements- Указывает массив содержащихся в IPSet элементов подсетей (CIDR)
| шаблон параметра | структура параметра | значения |
|---|---|---|
| $IPSet_Name | ^NetIPv[4|6]-.* | Примеры значений:
|
| $type | type | Могут быть установлены следующие значения:
|
| $flags | flags | Установлены следующие значения:
|
| $elements | elements = {} | Значения CIDR, в случае нескольких значений перечисляются через запятую |
Ш аблон
set $IPSet_Name {
$type
$flags
$elements
}
Пример использования
set NetIPv4-sg-example {
type ipv4_addr
flags constant,interval
elements = { 10.0.0.0/24 } <- networks
}