Группа безопасности aws_security_group
Используйте ресурс аудита InSpec aws_security_group для проверки подробных свойств отдельной группы безопасности (SG).
Группы безопасности (SG) — это сетевая конструкция, содержащая правила входящего и исходящего трафика для сетевого взаимодействия. Группы безопасности могут быть подключены к экземплярам EC2, а также к некоторым другим ресурсам AWS. Наряду со списками управления доступом на уровне сети (ACL), SG являются одним из двух основных механизмов обеспечения безопасности на сетевом уровне.
Ограничения
Хотя этот ресурс предоставляет средства для поиска правил входящего и исходящего трафика по различным критериям, в настоящее время нет поддержки соответствия по:
- Ссылкам на виртуальные частные облака (VPC) или другие службы AWS (то есть нет поддержки поиска по «спискам префиксов»).
Синтаксис
describe aws_security_group('sg-12345678') do
it { should exist }
end
# May also use hash syntax
describe aws_security_group(group_id: 'sg-12345678') do
it { should exist }
end
# Ensure you have a Security Group with a specific name. Names are
# unique within a VPC but not across VPCs.
# Using only Group returns an error if multiple SGs match.
describe aws_security_group(group_name: 'my-group') do
it { should exist }
end
# Add vpc_id to ensure uniqueness.
describe aws_security_group(group_name: 'my-group', vpc_id: 'vpc-12345678') do
it { should exist }
end
Параметры
Вы должны указать как минимум один параметр; group_id, group_name или vpc_id
group_id (обязательно, если не указаны другие параметры)
Идентификатор группы безопасности, который однозначно идентифицирует SG. Он может быть передан как строка или как group_id: 'value' элемент в хеше.
group_name (обязательно, если не указаны другие параметры)
Имя группы безопасности. Оно может быть передано как строка или как group_name: 'value' элемент в хеше.
vpc_id (обязательно, если не указаны другие параметры)
Идентификатор VPC, связанный с SG. Он может быть передан как строка или как vpc_id: 'value' элемент в хеше.
См. также документацию AWS по группам безопасности.
Свойства
| Свойство | Описание |
|---|---|
| description | Строка, отражающая понятное для человека описание, данное SG при создании. |
| group_id | Предоставляет идентификатор группы безопасности. |
| group_name | Строка, отражающая имя, данное SG при создании. |
| inbound_rules | Список правил, которые группа безопасности применяет к входящему сетевому трафику. |
| inbound_rules_count | Число, суммирующее количество отдельных правил — это сумма комбинаций порта, протокола, правил IPv4, правил IPv6 и правил группы безопасности. |
| outbound_rules | Список правил, которые группа безопасности применяет к исходящему сетевому трафику, инициированному ресурсом AWS в группе безопасности. |
| outbound_rules_count | Число, суммирующее количество отдельных правил — это сумма комбинаций порта, протокола, правил IPv4, правил IPv6 и правил группы безопасности. |
| vpc_id | Строка в формате vpc- с последующими 8 шестнадцатеричными символами, отражающая VPC, содержащую группу безопасности. |
| tags | Теги группы безопасности. |
Примеры
Проверка правил исходящего трафика
describe aws_security_group(group_name: isolated_servers) do
its('outbound_rules.last') { should_not include(ip_ranges:['0.0.0.0/0']) }
end
Проверка правила, разрешающего весь трафик
describe aws_security_group(group_name: my_group) do
it { should allow_in(ipv4_range: ["10.1.2.0/24", "10.3.2.0/24"], protocol: 'all') }
end
Убедиться, что SG разрешает SSH только из определенного диапазона
describe aws_security_group(group_name: linux_servers) do
it { should allow_in(port: 22, ipv4_range: '10.5.0.0/16') }
it { should_not allow_in(port: 22, ipv4_range: '0.0.0.0/0') }
end
Убедиться, что группа безопасности careful_updates может инициировать контакт только с определенными IP-адресами.
describe aws_security_group(group_name: 'careful_updates') do
# If you have two rules, with one CIDR each:
[ '10.7.23.12/32', '10.8.23.12/32' ].each do |allowed_destination|
# This doesn't care about which ports are enabled
it { should allow_out(ipv4_range: allowed_destination) }
end
# If you have one rule with two CIDRs:
it { should allow_out(ipv4_range: [ '10.7.23.12/32', '10.8.23.12/32' ]) }
# Expect exactly three rules.
its('outbound_rules.count') { should cmp 3 }
end
Убедиться, что группа безопасности canary_deployments разрешает доступ только из одного определенного идентификатора группы безопасности по порту 443.
describe aws_security_group(group_name: 'canary_deployments') do
it { should allow_in_only(port: 443, security_group: "sg-33334444") }
end
Матчи
Этот ресурс аудита InSpec имеет следующие специальные матчи. Полный список дополнительных доступных матчей см. на странице Универсальные матчи.
разрешить
Серия матчей allow включает:
- allow_in
- allow_out
- allow_in_only
- allow_out_only
Серия матчей allow позволяет выполнять запросы о том, какой сетевой трафик будет разрешен набором правил группы безопасности.
allow_in и allow_in_exactly проверяют правила входящего трафика, а allow_out и allow_out_exactly проверяют правила исходящего трафика.
allow_in и allow_out проверяют, существует ли хотя бы одно правило, соответствующее критериям. allow_in и allow_out также выполняют неточные (т.е., основанные на диапазонах или подмножествах) соответствия портам и IP-адресам, позволяя указать кандидатный порт или IP-адрес и определить, покрывается ли он правилом.
allow_in_only и allow_out_only проверяют, существует ли ровно одно правило (но см. position, ниже), и соответствует ли оно критериям (это полезно для обеспечения отсутствия неожиданных правил). Кроме того, allow_in_only и allow_out_only не выполняют неточное соответствие; вы должны точно указать диапазон портов или IP-адрес(ы), которые вы хотите сопоставить.
Критерии поиска матчей
Матчи принимают список критериев «ключ-значение». Для соответствия правила должно соответствовать всем указанным критериям.
from_port- Определяет, существует ли правило, диапазон портов которого начинается со значения. Слово
from_не относится к направленности входящего/исходящего трафика; оно относится к диапазону портов («счет с»).from_port— это точный критерий; поэтому, если правило разрешает 1000-2000, и вы укажетеfrom_port1001, оно не соответствует. ipv4_range- Указывает IPv4-адрес или подсеть в формате CIDR или список из них для проверки допустимого источника (для
allow_in) или места назначения (дляallow_out) для трафика. Каждое правило группы безопасности AWS может иметь несколько разрешенных диапазонов IP-адресов источника. ipv6_range- Указывает IPv6-адрес или подсеть в формате CIDR или список из них для проверки допустимого источника (для
allow_in) или места назначения (дляallow_out) для трафика. Каждое правило группы безопасности AWS может иметь несколько разрешенных диапазонов IP-адресов источника. port- Определяет, доступен ли определенный TCP/IP-порт.
allow_inиallow_outпроверяют, включен ли указанный порт в диапазон портов правила, в то время какallow_in. Вы можете указать порт как строку ('22') или как число. position- Индекс с индексом 1 в списке правил. Если указан, это ограничивает оценку правилом в этой позиции. Вы также можете использовать специальные значения
:firstи:last.positionтакже может быть использован для включенияallow_in_onlyиallow_out_onlyв работе с группами безопасности с несколькими правилами. protocol- Указывает IP-протокол.
tcp,udp, иicmp— некоторые типичные значения. Строка"-1"илиanyиспользуется для указания любого протокола. to_port- Определяет, существует ли правило, диапазон портов которого заканчивается на указанном значении. Слово
to_не относится к направленности входящего/исходящего трафика; оно относится к диапазону портов («счет до»).to_port— это точный критерий; поэтому, если правило разрешает 1000-2000, и вы укажетеto_port1999, оно не соответствует. security_group- Указывает идентификатор группы безопасности для проверки допустимого источника (для
allow_in) или места назначения (дляallow_out) для трафика. Каждое правило группы безопасности AWS может иметь несколько разрешенных групп безопасности источника или места назначения.
describe aws_security_group(group_name: 'mixed-functionality-group') do
# Allow RDP from defined range
it { should allow_in(port: 3389, ipv4_range: '10.5.0.0/16') }
it { should allow_in(port: 3389, ipv6_range: '2001:db8::/122') }
# Allow SSH from two ranges
it { should allow_in(port: 22, ipv4_range: ['10.5.0.0/16', '10.2.3.0/24']) }
# Check Bacula port range
it { should allow_in(from_port: 9101, to_port: 9103, ipv4_range: '10.6.7.0/24') }
# Assuming the AWS SG allows 9001-9003, use inexact matching to check 9002
it { should allow_in(port: 9002) }
# Assuming the AWS SG allows 10.2.1.0/24, use inexact matching to check 10.2.1.33/32
it { should allow_in(ipv4_range: '10.2.1.33/32') }
# Ensure the 3rd outbound rule is TCP-based
it { should allow_in(protocol: 'tcp', position: 3') }
# Do not allow unrestricted IPv4 access.
it { should_not allow_in(ipv4_range: '0.0.0.0/0') }
# Allow unrestricted access from security-group.
it { should allow_in(security_group: 'sg-11112222') }
end
Предположим, у вас есть группа, которая должна разрешать SSH и RDP из сети администратора, 10.5.0.0/16. У ресурса есть 2 правила для этого, и вы хотите убедиться, что другие не были добавлены.
describe aws_security_group(group_name: 'admin-group') do
# Allow RDP from a defined range and nothing else
# The SG must have this rule in position 1 and it must match this exactly
it { should allow_in_only(port: 3389, ipv4_range: '10.5.0.0/16', position: 1) }
# Specify position 2 for the SSH rule. Without `position`,
# allow_in_only only allows one rule, total.
it { should allow_in_only(port: 22, ipv4_range: '10.5.0.0/16', position: 2) }
# Because this is an _only matcher, this fails - _only matchers
# use exact IP matching.
it { should allow_in_only(port: 3389, ipv4_range: '10.5.1.34/32', position: 1) }
end
существовать
Управление передается, если описание возвращает как минимум один результат.
Используйте should_not для проверки того, что сущность не должна существовать.
it { should exist }
it { should_not exist }
Разрешения AWS
Ваш субъект потребует действие ec2:DescribeSecurityGroups с эффектом «Разрешить».
Подробную документацию можно найти по адресу Действия, ресурсы и ключи условий для Amazon EC2.
© 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/aws_security_group/