aws_ec2_instances ресурс
Используйте ресурс аудита aws_ec2_instances InSpec для проверки свойств некоторых или всех экземпляров 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
Контроль пройдет, если describe вернёт по крайней мере один результат. Имена полей, описанные в таблице свойств, должны использоваться для <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/