Hadolint

Линтер Dockerfile, валидатор встроенного bash, написанный на Haskell

Название импортера в Security Center: Hadolint, Hadolint Dockerfile check Образ в Auditor: registry.gitlab.com/whitespots-public/security-images/hadolint:2.12.0

Hadolint - это специализированный линтер Dockerfile, предназначенный для проверки правильности синтаксиса Dockerfile, соблюдения лучших практик и выявления потенциальных проблем, связанных с созданием Docker-образов. Он фокусируется на качестве кода и соответствии стандартам Dockerfile, помогая создавать безопасные и хорошо структурированные образы Docker.

Hadolint анализирует Docker-файлы, проверяя их на наличие типичных ошибок, соответствие рекомендациям Dockerfile и потенциальные проблемы безопасности. Этот инструмент может помочь разработчикам и командам DevOps поддерживать высокое качество Docker-файлов, гарантируя, что получаемые образы безопасны, эффективны и не содержат ошибок.

Одной из примечательных особенностей Hadolint является способность предоставлять отзывы о Dockerfile еще до создания образов, что позволяет разработчикам выявлять потенциальные проблемы на ранних этапах процесса разработки.

Пример команды Curl

curl -X POST localhost/api/v1/scan/import/ -H "Authorization: Token a75bb26171cf391671e67b128bfc8ae1c779ff7b" -H "Content-Type: multipart/form-data" -F "file=@./" -F "product_name=Product1" -F "product_type=Application" -F "scanner_name=Hadolint Dockerfile check" -F "branch=dev"

В этой команде используются следующие параметры:

  1. -X POST: задает используемый метод HTTP (в данном случае POST).

  2. -H "Authorization: Token <authorization_token>": задает токен авторизации, полученный от Security Center.

  3. -H "Content-Type: multipart/form-data": задает тип содержимого запроса.

  4. -F "file=@<report_file_path>": задает путь к файлу отчета, создаваемого сканером.

  5. -F "product_name=<product_name>": задает название сканируемого продукта.

  6. -F "product_type=<product_type>": задает тип сканируемого продукта.

  7. -F "scanner_name=<scanner_name>": задает имя сканера, используемого для создания отчета (Bandit Scan или GitLab Bandit)

  8. -F "branch=<branch_name>": (необязательно) указывает имя ветки в репозитории исходного кода (если применимо). Этот параметр особенно полезен, когда вы хотите связать результаты сканирования с определенной веткой в вашем репозитории. Если параметр не указан, сканирование будет связано с веткой по умолчанию

Пример отчета:

[{"line":1,"code":"DL3006","message":"Always tag the version of an image explicitly","column":1,"file":"./test/smoke/Dockerfile","level":"warning"},{"line":3,"code":"DL3018","message":"Pin versions in apk add. Instead of apk add <package> use apk add <package>=<version>","column":1,"file":"./test/smoke/Dockerfile","level":"warning"},{"line":3,"code":"DL3019","message":"Use the --no-cache switch to avoid the need to use --update and remove /var/cache/apk/* when done installing packages","column":1,"file":"./test/smoke/Dockerfile","level":"info"}]

[
    {
   "line":1,"code":"DL3006","message":"Always tag the version of an image explicitly",
       "column":1,"file":"./test/smoke/Dockerfile","level":"warning"
    },
    {
    "line":3,"code":"DL3018","message":"Pin versions in apk add. Instead of `apk add <package>` use `apk add <package>=<version>`",
        "column":1,"file":"./test/smoke/Dockerfile","level":"warning"
    },
    {
    "line":3,"code":"DL3019","message":"Use the `--no-cache` switch to avoid the need to use `--update` and remove `/var/cache/apk/*` when done installing packages",
        "column":1,"file":"./test/smoke/Dockerfile","level":"info"
    }
]

Last updated