Spec-Zone.ru › Chef 18

Ресурс aws_security_group

[править на GitHub]

Используйте ресурс проверки 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_port 1001, оно не соответствует.
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_port 1999, оно не соответствует.
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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API