Ресурс docker
Используйте ресурс аудита Chef InSpec docker для проверки данных конфигурации демона Docker. Это очень подробный ресурс. Также см.: docker_container и docker_image.
Доступность
Установка
Этот ресурс распространяется вместе с самим Chef InSpec. Вы можете использовать его автоматически.
Версия
Этот ресурс впервые стал доступен в версии v1.21.0 InSpec.
Синтаксис
Блок ресурса docker позволяет записывать тесты для многих контейнеров:
describe docker.containers do
its('images') { should_not include 'u12:latest' }
end
или:
describe docker.containers.where { names == 'flamboyant_colden' } do
it { should be_running }
end
где
-
.where()может указать конкретный элемент и значение, с которыми сравниваются параметры ресурса -
commands,ids,images,labels,local_volumes,mounts,names,networks,ports,sizesиstatusявляются допустимыми параметрами дляcontainers
Блок ресурса docker также позволяет записывать тесты для многих образов:
describe docker.images do
its('repositories') { should_not include 'inssecure_image' }
end
или, если вы хотите запросить определённые образы:
describe docker.images.where { repository == 'ubuntu' && tag == '12.04' } do
it { should_not exist }
end
где
-
.where()может указать конкретный фильтр и ожидаемое значение, с которыми сравниваются параметры
Примеры
Следующие примеры показывают, как использовать этот ресурс аудита Chef InSpec.
Возвращение всех запущенных контейнеров
docker.containers.running?.ids.each do |id|
describe docker.object(id) do
its('State.Health.Status') { should eq 'healthy' }
end
end
Проверка версии сервера и клиента Docker
describe docker.version do
its('Server.Version') { should cmp >= '1.12'}
its('Client.Version') { should cmp >= '1.12'}
end
Итерация по всем контейнерам для проверки конфигурации хоста
docker.containers.ids.each do |id|
# call Docker inspect for a specific container id
describe docker.object(id) do
its(%w(HostConfig Privileged)) { should cmp false }
its(%w(HostConfig Privileged)) { should_not cmp true }
end
end
Итерация по всем образам для проверки того, что контейнер был собран без инструкции ADD
docker.images.ids.each do |id|
describe command("docker history #{id}| grep 'ADD'") do
its('stdout') { should eq '' }
end
end
Проверка того, что для контейнера включены проверки работоспособности
describe docker.object('71b5df59442b') do
its(%w(Config Healthcheck)) { should_not eq nil }
end
Как запустить профиль DevSec Docker Baseline
Существует два способа запуска профиля docker-baseline для проверки Docker с помощью ресурса docker.
Клонировать профиль:
git clone https://github.com/dev-sec/cis-docker-benchmark.git
и затем запустить:
inspec exec cis-docker-benchmark
Или выполнить профиль напрямую по URL:
inspec exec https://github.com/dev-sec/cis-docker-benchmark
Параметры ресурса
-
commands,ids,images,labels,local_volumes,mounts,names,networks,ports,sizesиstatusявляются допустимыми параметрами дляcontainers
Примеры параметров ресурса
containers
containers возвращает информацию о контейнерах, как возвращает docker ps -a.
describe docker.containers do
its('ids') { should include 'sha:71b5df59...442b' }
its('commands') { should_not include '/bin/sh' }
its('images') { should_not include 'u12:latest' }
its('ports') { should include '0.0.0.0:1234->1234/tcp' }
its('labels') { should include 'License=GPLv2' }
end
object(‘id’)
object возвращает низкоуровневую информацию об объектах Docker. Он вызывает docker inspect под капотом.
describe docker.object(id) do
its('Configuration.Path') { should eq 'value' }
end
images
images возвращает информацию об образе Docker, как возвращает docker images.
describe docker.images do
its('ids') { should include 'sha:12b5df59...442b' }
its('repositories') { should_not include 'my_image' }
its('tags') { should_not include 'unwanted_tag' }
its('sizes') { should_not include '1.41 GB' }
end
plugins
plugins возвращает информацию о плагинах Docker, как возвращает docker plugin ls.
describe docker.plugins do
its('names') { should include ['store/weaveworks/net-plugin', 'docker4x/cloudstor'] }
its('ids') { should cmp ['6ea8176de74b', '771d3ee7c7ea'] }
its('versions') { should cmp ['2.3.0', '18.03.1-ce-aws1'] }
its('enabled') { should cmp [true, false] }
end
info
info возвращает обработанный результат docker info
describe docker.info do
its('Configuration.Path') { should eq 'value' }
end
version
info возвращает обработанный результат docker version
describe docker.version do
its('Server.Version') { should cmp >= '1.12'}
its('Client.Version') { should cmp >= '1.12'}
end
Свойства
idimagerepotagportscommand
Примеры свойств
id
describe docker_container(name: 'an-echo-server') do
its('id') { should_not eq '' }
end
image
describe docker_container(name: 'an-echo-server') do
its('image') { should eq 'busybox:latest' }
end
repo
describe docker_container(name: 'an-echo-server') do
its('repo') { should eq 'busybox' }
end
tag
describe docker_container(name: 'an-echo-server') do
its('tag') { should eq 'latest' }
end
ports
describe docker_container(name: 'an-echo-server') do
its('ports') { should eq '0.0.0.0:1234->1234/tcp' }
end
command
describe docker_container(name: 'an-echo-server') do
its('command') { should eq 'nc -ll -p 1234 -e /bin/cat' }
end
Сопоставители
Полный список доступных сопоставителей см. на нашей странице сопоставителей.
© 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/docker/