Ресурс aws_ec2_instances
Используйте ресурс аудита InSpec aws_ec2_instances для проверки свойств некоторых или всех экземпляров AWS EC2. Для аудита одного экземпляра EC2 используйте aws_ec2_instance (единственное число).
Синтаксис
Блок ресурса aws_ec2_instances собирает группу экземпляров EC2 и затем проверяет эту группу.
describe aws_ec2_instances
it { should exist }
end
Параметры
Этот ресурс не ожидает никаких параметров.
Свойства
| Свойство | Описание |
|---|---|
| instance_ids | ID экземпляра EC2. Имя поля instance_id. |
| names | Значение тега Name , если он применён к экземпляру. Имя поля name. |
| vpc_ids | ВPC, с которым связан экземпляр EC2. Имя поля vpc_id. |
| subnet_ids | Подсеть, с которой связан экземпляр EC2. Имя поля subnet_id. |
| instance_types | Тип экземпляра, например m5.large. Имя поля instance_type. |
| entries | Предоставляет доступ к исходным результатам запроса, которые могут обрабатываться как массив хэшей. |
| tags | Хэш, где каждая пара ключ-значение соответствует тегу экземпляра EC2, например, {"Name"=>"Testing Box", "Environment"=>"Dev"}. Это свойство доступно в пакете ресурсов InSpec AWS версии 1.12.0 и выше. Имя поля tags. |
| iam_profiles | Профиль IAM, связанный с экземпляром. Свойство role ресурса aws_ec2_instance (единственное число) может использоваться для проверки прикреплённой роли IAM в профиле. Имя поля iam_profile. |
Примеры
Убедитесь, что у вас ровно 3 экземпляра
describe aws_ec2_instances do
its('instance_ids.count') { should cmp 3 }
end
Используйте этот ресурс InSpec для запроса ID всех экземпляров EC2, а затем проведите углублённую проверку с помощью aws_ec2_instance.
aws_ec2_instances.instance_ids.each do |instance_id|
describe aws_ec2_instance(instance_id) do
it { should_not have_roles }
its('key_name') { should cmp 'admin-ssh-key' }
its('image_id') { should eq 'ami-27a58d5c' }
end
end
Отфильтруйте экземпляры EC2 с их тегами Environment * равными Dev, а затем проведите углублённую проверку с помощью aws_ec2_instance.
aws_ec2_instances.where(tags: {"Environment" => "Dev"}).instance_ids.each do |id|
describe aws_ec2_instance(id) do
it { should be_stopped }
end
end
/{"Environment"=>"Dev"}/
Отфильтруйте экземпляры EC2 с тегом stop-at-10-pm независимо от его значения, а затем проведите углублённую проверку с помощью aws_ec2_instance.
aws_ec2_instances.where(tags: /"stop-at-10-pm"=>/).instance_ids.each do |id|
describe aws_ec2_instance(id) do
it { should be_stopped }
end
end
Отфильтруйте экземпляры EC2 с их name равными Test Box, а затем проверьте их роль, используя aws_ec2_instance.
aws_ec2_instances.where(name: "Test Box").instance_ids.each do |id|
describe aws_ec2_instance(id) do
its('role) { should eq "test-role" }
end
end
Сопоставители
Полный список доступных сопоставителей см. на нашей странице Универсальные сопоставители.
exist
Контроль пройдёт, если описание вернёт по крайней мере один результат. Имена полей, описанные в таблице свойств, должны использоваться для <property> в where фразе.
Используйте should_not для проверки того, что сущность не должна существовать.
describe aws_ec2_instances.where( <property>: <value>) do
it { should exist }
end
describe aws_ec2_instances.where( <property>: <value>) do
it { should_not exist }
end
Разрешения AWS
У вашего Принципала должны быть разрешены ec2:DescribeInstances, а также iam:GetInstanceProfile действия.
Подробную документацию можно найти по адресам Действия, ресурсы и ключи условий для 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_ec2_instances/