Sgroup to CIDR (Ingress/Egress)
Ресурс Security Group to CIDR
представляет собой введенную нами абстракцию, ко торая обеспечивает гибкое управление и контроль за
сетевым трафиком между различными группами безопасности и подсетями, используя TCP, UDP и ICMP протоколы. Этот ресурс
дает возможность детально настроить, какой трафик разрешен к передаче между группами безопасности и определенными
подсетями, тем самым гарантируя высокий уровень защиты и управления сетевой инфраструктурой.
- Terraform module
- Terraform resource
- API
- nftables
Terraform module представляет собой высокоуровневую абстракцию над terraform resources, которая упрощает работу с ресурсами Terraform, скрывая сложность их непосредственного использования. Он предлагает простой и понятный интерфейс для взаимодействия, позволяя пользователям легко интегрироваться и управлять компонентами инфраструктуры без необходимости глубоко погружаться в детали каждого ресурс а.
Далее везде в документе подразумевается что все места, содержащие переменную $traffic
, могут принять одно из двух
значений: Ingress
Egress
. Аналогчично для $transport
подразумевается одно из четырех значений: tcp
, udp
,
icmpIPv4
, icmpIPv6
rules
- Структура, содержащая описание создаваемых правил.rules.$traffic[]
- Поле описывающий направление трафика.rules.$traffic[].cidrSet[]
- Список, содержащий подсети типа IP.rules.$traffic[].access.$transport
- Протокол L3/L4 уровня модели OSI.rules.$traffic[].access.$transport.action
- Действие для пакетов в сформированных правил в цепочке.rules.$traffic[].access.$transport.priority
- Поле определяющее порядок применения правил в цепочке.rules.$traffic[].access.$transport.logs
- Включить/отключить логирование.rules.$traffic[].access.$transport.trace
- Включить/отключить трассировку.rules.$traffic[].access.$transport.ports[].description
- Формальное текстовое описание.rules.$traffic[].access.$transport.ports[].ports_to[]
- Набор открытых портов получателяrules.$traffic[].access.$transport.ports[].ports_from[]
- Набор открытых портов отправителя.rules.$traffic[].access.$transport.types[].description
- Формальное текстовое описание.rules.$traffic[].access.$transport.types[].type[]
- Список, определяющий допустимые типы ICMP запросов.
название параметра | тип данных | значение по умолчанию | transport* | ||
---|---|---|---|---|---|
TCP | UDP | ICMP | |||
rules | Object[] | [] | ✔ | ✔ | ✔ |
rules.$traffic[] | Object[] | ✔ | ✔ | ✔ | |
rules.$traffic[].cidrSet[] | String[] | ✔ | ✔ | ✔ | |
rules.$traffic[].access.$transport | Object | ✔ | ✔ | ✔ | |
rules.$traffic[].access.$transport.action | ✔ | ✔ | ✔ | ||
rules.$traffic[].access.$transport.priority | String | ✔ | ✔ | ✔ | |
rules.$traffic[].access.$transport.log | Boolean | false | ✔ | ✔ | ✔ |
rules.$traffic[].access.$transport.trace | Boolean | false | ✔ | ✔ | ✔ |
rules.$traffic[].access.$transport.ports[] | Object[] | ✔ | ✔ | ✔ | |
rules.$traffic[].access.$transport.ports[].description | String | "" | ✔ | ✔ | |
rules.$traffic[].access.$transport.ports[].ports_to[] | Integer[] | null | ✔ | ✔ | |
rules.$traffic[].access.$transport.ports[].ports_from[] | Integer[] | null | ✔ | ✔ | |
rules.$traffic[].access.$transport.types[] | Object[] | ✔ | |||
rules.$traffic[].access.$transport.types[].description | String | "" | ✔ | ||
rules.$traffic[].access.$transport.types[].type[] | Integer[] | null | ✔ |
Ограничения
name
:- Длина значения поля не должна превышать 256 си мволов.
- Значение поля должно начинаться и заканчиваться символами без пробелов.
- Значение должно быть уникальным в рамках типа ресурса.
rules.$traffic[].cidrSet
:- Значение элемента должно начинаться и заканчиваться символами без пробелов.
- Повторения значений в списке не допускаются.
- Необходимо указать минимум одно значение.
- В пределах одной Security Group и направления трафика (I/E), необходимо обеспечить, непересекаемость диапазонов адресов подсетей.
- Подсеть должна соответствовать формату записи, определенному в RFC 4632.
rules.$traffic[].access.$transport.priority
:- Значения должны находиться в интервале от -32768 до 32767
rules.$traffic[].access.$transport.ports[].ports_to[]
:- Значения портов должно находиться в интервале от 1 до 65535.
- Если значение не будет указано то будет использоваться весь диапазон портов.
- Значения портов прописываются по одному или интервально используя '-'.
rules.$traffic[].access.$transport.ports[].ports_from[]
:- Значения портов должно находиться в интервале от 1 до 65535.
- Если значение не будет указано то будет использоваться весь диапазон портов.
- Значения портов прописываются по одному или интервально используя '-'.
- Не допускаются пересечения портов в правилах в рамках одной пары Security Group.</li>
rules.$traffic[].access.$transport.types[].type[]
:- Значение должно быть числом в диапазоне от 0 до 255.
- Повторения значений в списке не допускаются.
Пример использования
- TCP
- UDP
- ICMP4
- ICMP6
Ingress
name: sg-local-example
rules:
ingress:
- cidrSet:
- "10.0.0.0/8"
access:
tcp:
action: ACCEPT
priority: 300
logs: true
trace: true
ports:
- description: "example"
ports_from:
- 64231
ports_to:
- 443
- 80
Egress
name: sg-local-example
rules:
egress:
- cidrSet:
- "10.0.0.0/8"
access:
tcp:
action: ACCEPT
priority: 300
logs: true
trace: true
ports:
- description: "example"
ports_from:
- 64231
ports_to:
- 443
- 80
Ingress
name: sg-local-example
rules:
ingress:
- cidrSet:
- "10.0.0.0/8"
access:
udp:
action: ACCEPT
priority: 300
logs: true
trace: true
ports:
- description: "example"
ports_from:
- 64231
ports_to:
- 443
- 80
Egress
name: sg-local-example
rules:
egress:
- cidrSet:
- "10.0.0.0/8"
access:
udp:
action: ACCEPT
priority: 300
logs: true
trace: true
ports:
- description: "example"
ports_from:
- 64231
ports_to:
- 443
- 80
Ingress
name: sg-local-example
rules:
ingress:
- cidrSet:
- "10.0.0.0/8"
access:
icmpIPv4:
action: ACCEPT
priority: 200
logs: true
trace: true
types:
- description: "example"
type:
- 0
- 8
Egress
name: sg-local-example
rules:
egress:
- cidrSet:
- "10.0.0.0/8"
access:
icmpIPv4:
action: ACCEPT
priority: 200
logs: true
trace: true
types:
- description: "example"
type:
- 0
- 8
Ingress
name: sg-local-example
rules:
ingress:
- cidrSet:
- "::ffff:a00:0/104"
access:
icmpIPv6:
action: ACCEPT
priority: 200
logs: true
trace: true
types:
- description: "example"
type:
- 0
- 8
Egress
name: sg-local-example
rules:
egress:
- cidrSet:
- "::ffff:a00:0/104"
access:
icmpIPv6:
action: ACCEPT
priority: 200
logs: true
trace: true
types:
- description: "example"
type:
- 0
- 8
Terraform resource является ключевым элементом в Terraform, предназначенным для управления различными аспектами инфраструктуры через код. Он позволяет задавать, настраивать и управлять инфраструктурными компонентами без привязки к их конкретным типам, обеспечивая автоматизацию развертывания и поддержки инфраструктуры согласно подходу Infrastructure as Code (IaC).
items
- список ресурсов создаваемые terraform ресурсом.items.$ruleName
- уникальное имя создаваемого ресурса.items.$ruleName.traffic
- Поле описывающий направление трафика.items.$ruleName.transport
- Протокол L3/L4 уровня модели OSI.items.$ruleName.cidr
- Список, содержащий подсети типа IP.items.$ruleName.sg_name
- Security Group относительно которой рассматриваются правила.items.$ruleName.ports
- Бл ок описывающий набор пар портов (src-dst).items.$ruleName.ports[].d
- Набор открытых портов получателяitems.$ruleName.ports[].s
- Набор открытых портов отправителя.items.$ruleName.logs
- Включить/отключить логирование.items.$ruleName.trace
- Включить/отключить трассировку.items.$ruleName.ip_v
- Версия IP для ICMP (IPv4 или IPv6).items.$ruleName.type
- Список, определяющий допустимые типы ICMP запросов.items.$ruleName.action
- Действие для пакетов в сформированных правил в цепочке.items.$ruleName.priority
- Поле определяющее порядок применения правил в цепочке.
название | обязательность | тип данных | значение по умолчанию | transport* | ||
---|---|---|---|---|---|---|
TCP | UDP | ICMP | ||||
items | да | Object | ✔ | ✔ | ✔ | |
items.$ruleName | да | Object | ✔ | ✔ | ✔ | |
items.$ruleName.traffic | да |