Spec-Zone.ru › Chef 16

ресурс docker

[редактировать на GitHub]

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

Свойства

  • id
  • image
  • repo
  • tag
  • ports
  • command

Примеры свойств

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/

Spec-Zone.ru

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