Ресурс aws_security_group
Используйте ресурс проверки InSpec для аудита, чтобы проверить подробные свойства отдельной группы безопасности (SG).
SG — это сетевой объект, содержащий правила входящего и исходящего трафика для сетевого взаимодействия. SG могут быть присоединены к экземплярам EC2, а также к некоторым другим ресурсам AWS. Наряду с списками управления сетевым доступом (Network Access Control Lists) 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 включает:
- 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- Индекс (с единицы) в списке правил. Если указано, оценка ограничивается правилом в этой позиции. Вы также можете использовать специальные значения
: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
exist
Управление будет выполнено, если описание вернет хотя бы один результат.
Используйте 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/