Security Groups
Ресурс SGroups представляет собой введенную нами абстракцию, которая позволят объединить подсети в логические группы
и применять к ним единые правила сетевого взаимодействия.
- API
- nftables
Более подробную документацию по API можно посмотреть здесь.
Более подробно по организации БД можно посмотреть здесь и здесь.
Входные параметры
groups.groups[]- Структура, содержащая описание создаваемых Security Group.groups.groups[].name- Название Security Group.groups.groups[].networks- Список имен подсетей.groups.groups[].hosts- Список имен хостов.groups.groups[].services- Список имен сервисов.groups.groups[].defaultAction- представляет действие по умолчанию в конце цепочек для SGgroups.groups[].logs- Включить/отключить логирование.groups.groups[].trace- Включить/отключить трассировку.syncOp- Поле определяющее действие с данными из запроса.
| название | обязательность | тип данных | Значение по умолчанию |
|---|---|---|---|
| groups.groups[] | да | Object[] | |
| groups.groups[].name | да | String | |
| groups.groups[].networks | нет | String[] | [] |
| groups.groups[].hosts | нет | String[] | [] |
| groups.groups[].services | нет | String[] | [] |
| groups.groups[].defaultAction | да | ||
| groups.groups[].logs | нет | Boolean | false |
| groups.groups[].trace | нет | Boolean | false |
| syncOp | да | Enum("Upsert", "Delete", "FullSync") |
Ограничения
groups.groups[].name:- Значение не может быть пустым.
- Длина значения поля не должна превышать 256 символов.
- Значение поля должно начинаться и заканчиваться символами без пробелов.
- Значение должно быть уникальным в рамках типа ресурса.
groups.groups[].networks[]:- Значения имен подсетей не должны начинаться или заканчиваться пробелами
- Значение не может быть пустой строкой
- Можно добавить только существующие networks к Security Group
- В пределах одной Security Group и направления трафика (I/E) диапазоны адресов network могут пересекаться, присутствует auto-merge.
groups.groups[].hosts[]:- Значения имен хостов не должны начинаться или заканчиват ься пробелами
- Значение не может быть пустой строкой
- Можно добавить только существующие хосты к Security Group
- Один хост может принадлежать только к одной Security Group
groups.groups[].services[]:- Значения имен подсетей не должны начинаться или заканчиваться пробелами
- Значение не может быть пустой строкой
- Можно добавить только существующие сервисы к Security Group
- Один сервис может принадлежать разным Security Group
Пример использования
curl '127.0.0.1:9007/v2/list-security-groups' \
--header 'Content-Type: application/json' \
--data '{
"groups": {
"groups": [
{
"name": "sg-example",
"networks": [
"nw-example-0",
"nw-example-1"
],
"defaultAction": "DROP",
"trace": true,
"logs": true,
"hosts": [
"host-emample-0",
"host-example-1"
],
"services": [
"svc-example-0",
"svc-example-1"
]
}
]
},
"syncOp": "Upsert"
}'
Выходные параметры
| название | тип данных | описание |
|---|---|---|
| - | Object | в случае успеха возвращается пустое тело |
Возможные ошибки API
Пользователь указал некорректные значения агрументов
- HTTP code: 400
- gRPC code: INVALID_ARGUMENT
- gRPC number: 3
Не найден метод
- HTTP code: 404
- gRPC code: NOT_FOUND
- gRPC number: 5
Ошибка в указанных данных
- HTTP code: 500
- gRPC code: INTERNAL
- gRPC number: 13
Диаграмма последовательности
В этом разделе мы покажем, как ресурс groups, созданный с помощью Terraform/API, внедряется в настройки nftables. В
контексте HBF мы интерпретируем ресурс groups как проекцию на ресурсы IPSet и Chains которые функционируют в
рамках инструмента nftables, обеспечивая более широкие возможности для управления подсетями и правилами.
$Trace- Включить/отключить трассировку.$Transport- Протокол L3/L4 уровня модели OSI.$TypeList- Список, определяющий допустимые типы ICMP запросов.$Log- Включить/отключить логирование.$Counter- Счетчик количества байтов и пакетов.$Verdict- Результат применения правила, определяющий действие, которое будет применено к пакету.
| шаблон параметра | структура параметра | значение | общие | icmp |
|---|---|---|---|---|
| $Trace | nftrace set |
| ✔ | ✔ |
| $Transport | icmp | ✔ | ||
| $TypeList | type {} | Набор целочисленных значений от 0 до 255 | ✔ | |
| $Log | log | level debug flags ip options | ✔ | ✔ |
| $Counter | counter | packets 0 bytes 0 | ✔ | ✔ |
| $Verdict | accept | $Verdict определяет действие, которое будет применено к пакету в соответсвии с правилом. Это поле может принимать значение | ✔ | ✔ |
Шаблон
chain INGRESS-INPUT-sgName {
# **********
$Trace $Transport $TypeList $Counter $Log $Verdict //ICMP
# **********
$Trace $Counter $Log $Verdict //Общие
}
chain EGRESS-POSTROUTING-sgName {
# **********
$Trace $Transport $TypeList $Counter $Log $Verdict //ICMP
# **********
$Trace $Counter $Log $Verdict //Общие
}
Пример использования
chain INGRESS-INPUT-sg-example {
# **********
nftrace set 1 icmp type { 0, 8 } counter packets 0 bytes 0 log level debug flags ip options drop //ICMP
nftrace set 1 icmpv6 type { 0, 8 } counter packets 0 bytes 0 log level debug flags ip options drop //ICMP
# **********
nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options accept //Общие
}
chain EGRESS-POSTROUTING-sg-example {
# **********
nftrace set 1 icmp type { 0, 8 } counter packets 0 bytes 0 log level debug flags ip options drop //ICMP
nftrace set 1 icmpv6 type { 0, 8 } counter packets 0 bytes 0 log level debug flags ip options drop //ICMP
# **********
nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options accept //Общие
}