Spec-Zone.ru › Chef 16

Группа безопасности aws_security_group

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

Используйте ресурс аудита 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_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
Индекс с индексом 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_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

существовать

Управление передается, если описание возвращает как минимум один результат.

Используйте 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