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[]
- Массив/Список подсетей типа IP.networks[].name
- название подсети.networks[].network
- объект содержащий CIDR подсети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/v1/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
}