рдбрдХрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рд╡рд┐рдзрд┐рд╣рд░реВ рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ

рдбрдХрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рд╡рд┐рдзрд┐рд╣рд░реВ рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ
рд╣реЗ рд╣рд╛рдмрд░!

рдЖрдзреБрдирд┐рдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдорд╛, рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдорд╛ рдХрдиреНрдЯреЗрдирд░рд╛рдЗрдЬреЗрд╢рдирдХреЛ рдмрдвреНрджреЛ рднреВрдорд┐рдХрд╛рдХрд╛ рдХрд╛рд░рдг, рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╡рд┐рднрд┐рдиреНрди рдЪрд░рдгрд╣рд░реВ рд░ рд╕рдВрд╕реНрдерд╛рд╣рд░реВрдХреЛ рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреЗ рдореБрджреНрджрд╛ рдХрдо рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджрд╛ рд╣реЛрдЗрдиред рдореНрдпрд╛рдиреБрдЕрд▓ рдЬрд╛рдБрдЪрд╣рд░реВ рдЧрд░реНрди рд╕рдордп-рдЙрдкрднреЛрдЧ рдЧрд░реНрдиреЗ рд╣реЛ, рддреНрдпрд╕реИрд▓реЗ рдпреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдмрдирд╛рдЙрдиреЗ рджрд┐рд╢рд╛рдорд╛ рдХрдореНрддрд┐рдорд╛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдХрджрдорд╣рд░реВ рдЪрд╛рд▓реНрдиреБ рд░рд╛рдореНрд░реЛ рд╡рд┐рдЪрд╛рд░ рд╣реБрдиреЗрдЫред

рдпрд╕ рд▓реЗрдЦрдорд╛, рдо рдзреЗрд░реИ рдбрдХрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд░ рдпрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рд╛рдиреЛ рдбреЗрдореЛ рд╕реНрдЯреНрдпрд╛рдиреНрдб рдХрд╕рд░реА рдбрд┐рдкреНрд▓реЛрдп рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рддрдпрд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рд╕рд╛рдЭрд╛ рдЧрд░реНрдиреЗрдЫреБред рддрдкрд╛рдИрдВрд▓реЗ рдбрдХрд░рдлрд╛рдЗрд▓ рдЫрд╡рд┐рд╣рд░реВ рд░ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВрдХреЛ рд╕реБрд░рдХреНрд╖рд╛ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рдХрд╕рд░реА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпреЛ рд╕реНрдкрд╖реНрдЯ рдЫ рдХрд┐ рд╕рдмреИрдХреЛ рд╡рд┐рдХрд╛рд╕ рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдлрд░рдХ рдЫ, рддреНрдпрд╕реИрд▓реЗ рддрд▓ рдо рдзреЗрд░реИ рд╕рдореНрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреЗрдЫреБред

рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ

рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рд╕рдВрдЦреНрдпрд╛рдорд╛ рд╡рд┐рднрд┐рдиреНрди рд╕рд╣рд╛рдпрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рдЫрдиреН рдЬрд╕рд▓реЗ рдбрдХрд░ рдкреВрд░реНрд╡рд╛рдзрд╛рд░рдХрд╛ рд╡рд┐рднрд┐рдиреНрди рдкрдХреНрд╖рд╣рд░реВрдорд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫред рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ рдХреЗрд╣реА рдкрд╣рд┐рд▓реЗ рдиреИ рдЕрдШрд┐рд▓реНрд▓реЛ рд▓реЗрдЦрдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫ (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), рд░ рдпрд╕ рд╕рд╛рдордЧреНрд░реАрдорд╛ рдо рддреА рдордзреНрдпреЗ рддреАрдирдорд╛ рдлреЛрдХрд╕ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБ, рдЬрд╕рд▓реЗ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рдХреНрд░рдордорд╛ рдмрдирд╛рдЗрдПрдХреЛ рдбрдХрд░ рдЫрд╡рд┐рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕реБрд░рдХреНрд╖рд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВрдХреЛ рдареВрд▓реЛ рднрд╛рдЧрд▓рд╛рдИ рдХрднрд░ рдЧрд░реНрджрдЫред рдердк рд░реВрдкрдорд╛, рдо рдпреА рддреАрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рдХрд╕рд░реА рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪрд╣рд░реВ рдЧрд░реНрди рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдорд╛ рдЬрдбрд╛рди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рднрдиреНрдиреЗ рдЙрджрд╛рд╣рд░рдг рдкрдирд┐ рджреЗрдЦрд╛рдЙрдиреЗрдЫреБред

Hadolint
https://github.com/hadolint/hadolint

рдПрдХ рдПрдХрджрдо рд╕рд░рд▓ рдХрдиреНрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЬрд╕рд▓реЗ рдорджреНрджрдд рдЧрд░реНрджрдЫ, рдкрд╣рд┐рд▓реЛ рдЕрдиреБрдорд╛рдирдХреЛ рд░реВрдкрдорд╛, рдбрдХрд░рдлрд╛рдЗрд▓ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВрдХреЛ рд╢реБрджреНрдзрддрд╛ рд░ рд╕реБрд░рдХреНрд╖рд╛рдХреЛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдХреЗрд╡рд▓ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЫрд╡рд┐ рд░рдЬрд┐рд╕реНрдЯреНрд░реАрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡рд╛ sudo рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░)ред

рдбрдХрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рд╡рд┐рдзрд┐рд╣рд░реВ рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ

рдбрдХрд▓
https://github.com/goodwithtech/dockle

рдПрдЙрдЯрд╛ рдХрдиреНрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЬрд╕рд▓реЗ рдЫрд╡рд┐рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдЫ (рд╡рд╛ рдЫрд╡рд┐рдХреЛ рдмрдЪрдд рдЧрд░рд┐рдПрдХреЛ рдЯрд╛рд░ рд╕рдЩреНрдЧреНрд░рд╣рдХреЛ рд╕рд╛рде), рдЬрд╕рд▓реЗ рд╡рд┐рд╢реЗрд╖ рдЫрд╡рд┐рдХреЛ рд╢реБрджреНрдзрддрд╛ рд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫ, рдпрд╕рдХреЛ рддрд╣ рд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрджрдЫ - рдХреБрди рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН, рдХреБрди рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдЬреБрдиред рднреЛрд▓реНрдпреБрдорд╣рд░реВ рдорд╛рдЙрдиреНрдЯ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН, рдЦрд╛рд▓реА рдкрд╛рд╕рд╡рд░реНрдбрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐, рдЗрддреНрдпрд╛рджрд┐ред d. рдЕрд╣рд┐рд▓реЗрд╕рдореНрдо рдЪреЗрдХрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдзреЗрд░реИ рдареВрд▓реЛ рдЫреИрди рд░ рд╣рд╛рдореНрд░реЛ рдЖрдлреНрдиреИ рдЬрд╛рдБрдЪрд╣рд░реВ рд░ рд╕рд┐рдлрд╛рд░рд┐рд╕рд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЫред CIS (рдЗрдиреНрдЯрд░рдиреЗрдЯ рд╕реБрд░рдХреНрд╖рд╛рдХреЛ рд▓рд╛рдЧрд┐ рдХреЗрдиреНрджреНрд░) рдмреЗрдиреНрдЪрдорд╛рд░реНрдХ рдбрдХрд░рдХреЛ рд▓рд╛рдЧрд┐ред
рдбрдХрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рд╡рд┐рдзрд┐рд╣рд░реВ рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ

рддреНрд░рд┐рднрд┐
https://github.com/aquasecurity/trivy

рдпреЛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдХреЛ рдЙрджреНрджреЗрд╢реНрдп рджреБрдИ рдкреНрд░рдХрд╛рд░рдХрд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреЗ рд╣реЛ - OS рдмрд┐рд▓реНрдбрд╣рд░реВрд╕рдБрдЧ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ (Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд) рд░ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВрд╕рдБрдЧ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ (Gemfile.lock, Pipfile.lock, composer.lock, рдкреНрдпрд╛рдХреЗрдЬред -lock.json, yarn.lock, cargo.lock)ред Trivy рд▓реЗ рднрдгреНрдбрд╛рд░рдорд╛ рд░рд╣реЗрдХреЛ рдЫрд╡рд┐ рд░ рд╕реНрдерд╛рдиреАрдп рдЫрд╡рд┐ рджреБрд╡реИ рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрди рд╕рдХреНрдЫ, рд░ рдбрдХрд░ рдЫрд╡рд┐рд╕рдБрдЧ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░рд┐рдПрдХреЛ .tar рдлрд╛рдЗрд▓рдХреЛ рдЖрдзрд╛рд░рдорд╛ рдкрдирд┐ рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрди рд╕рдХреНрдЫред

рдбрдХрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рд╡рд┐рдзрд┐рд╣рд░реВ рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ

рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ

рдкреГрдердХ рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рд╡рд░реНрдгрд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдо рдХреЗрд╣реА рд╕рд░рд▓реАрдХреГрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рд╕рдмреИ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреЗрдЫреБред

рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рднрдиреЗрдХреЛ рд╡рд┐рдХрд╛рд╕рдХреЛ рдХреНрд░рдордорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХрд╛ рдбрдХрд░рдлрд╛рдЗрд▓рд╣рд░реВ рд░ рдбрдХрд░ рдЫрд╡рд┐рд╣рд░реВрдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдорд╛рдгрд┐рдХрд░рдг рдХрд╕рд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗрд░ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреБ рд╣реЛред

рдЪреЗрдХ рдЖрдлреИрд▓реЗ рдирд┐рдореНрди рдЪрд░рдгрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ:

  1. рд▓рд┐рдиреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдбрдХрд░рдлрд╛рдЗрд▓ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВрдХреЛ рд╢реБрджреНрдзрддрд╛ рд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ Hadolint
  2. рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдиреНрддрд┐рдо рд░ рдордзреНрдпрд╡рд░реНрддреА рдЫрд╡рд┐рд╣рд░реВрдХреЛ рд╢реБрджреНрдзрддрд╛ рд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ рдбрдХрд▓
  3. рдЖрдзрд╛рд░ рдЫрд╡рд┐рдорд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдкрдорд╛ рдЬреНрдЮрд╛рдд рдХрдордЬреЛрд░реАрд╣рд░реВ (CVE) рд░ рдзреЗрд░реИ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐рдХреЛ рд▓рд╛рдЧрд┐ рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ - рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ рддреНрд░рд┐рднрд┐

рд▓реЗрдЦрдорд╛ рдкрдЫрд┐ рдо рдпреА рдЪрд░рдгрд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рддреАрди рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рджрд┐рдиреЗрдЫреБ:
рдкрд╣рд┐рд▓реЛ рдЙрджрд╛рд╣рд░рдгрдХреЛ рд░реВрдкрдорд╛ GitLab рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реЗрд░ (рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рдЙрдард╛рдЙрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рд╡рд┐рд╡рд░рдгрдХреЛ рд╕рд╛рде)ред
рджреЛрд╕реНрд░реЛ рд╢реЗрд▓ рд▓рд┐рдкрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИрдЫред
рддреЗрд╕реНрд░реЛрдорд╛ рдбрдХрд░ рдЫрд╡рд┐рд╣рд░реВ рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрди рдбрдХрд░ рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рд╕рдорд╛рд╡реЗрд╢ рдЫред
рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреВрд▓рд╛рдИ рдЙрдкрдпреБрдХреНрдд рд╣реБрдиреЗ рд╡рд┐рдХрд▓реНрдк рд░реЛрдЬреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдпрд╕рд▓рд╛рдИ рдЖрдлреНрдиреЛ рдкреВрд░реНрд╡рд╛рдзрд╛рд░рдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рдпрд╕рд▓рд╛рдИ рдЖрдлреНрдиреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдЕрдиреБрд╕рд╛рд░ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рд╕рдмреИ рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓рд╣рд░реВ рд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдкрдирд┐ рднрдгреНрдбрд╛рд░рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫрдиреН: https://github.com/Swordfish-Security/docker_cicd

GitLab CI/CD рдорд╛ рдПрдХреАрдХрд░рдг

рдкрд╣рд┐рд▓реЛ рд╡рд┐рдХрд▓реНрдкрдорд╛, рд╣рд╛рдореА рдЙрджрд╛рд╣рд░рдгрдХреЛ рд░реВрдкрдорд╛ GitLab рднрдгреНрдбрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рддрдкрд╛рдЗрдБ рдХрд╕рд░реА рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪрд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗрд░ рд╣реЗрд░реНрдиреЗрдЫреМрдВред рдпрд╣рд╛рдБ рд╣рд╛рдореА рдЪрд░рдгрд╣рд░реВ рдорд╛рд░реНрдлрдд рдЬрд╛рдиреНрдЫреМрдВ рд░ рд╕реНрдХреНрд░реНрдпрд╛рдЪрдмрд╛рдЯ GitLab рдХреЛ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╕рд░реА рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗ, рд╕реНрдХреНрдпрд╛рдирд┐рдЩ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рд░ рдкрд░реАрдХреНрд╖рдг рдбрдХрд░рдлрд╛рдЗрд▓ рд░ рдЕрдирд┐рдпрдорд┐рдд рдЫрд╡рд┐ - JuiceShop рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд▓рдиреНрдЪ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреЗрдЫреМрдВред

GitLab рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ
1. рдбрдХрд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

sudo apt-get update && sudo apt-get install docker.io

реи. рд╣рд╛рд▓рдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓рд╛рдИ рдбрдХрд░ рд╕рдореВрд╣рдорд╛ рдердкреНрдиреБрд╣реЛрд╕реН рддрд╛рдХрд┐ рддрдкрд╛рдЗрдБ sudo рдкреНрд░рдпреЛрдЧ рдирдЧрд░реА рдбрдХрд░рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

sudo addgroup <username> docker

3. рдЖрдлреНрдиреЛ IP рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреБрд╣реЛрд╕реН:

ip addr

4. рдХрдиреНрдЯреЗрдирд░рдорд╛ GitLab рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд╣реЛрд╕реНрдЯрдирд╛рдордХреЛ IP рдареЗрдЧрд╛рдирд╛рд▓рд╛рдИ рддрдкрд╛рдИрдВрдХреЛ рдЖрдлреНрдиреИрд╕рдБрдЧ рдмрджрд▓реНрдиреБрд╣реЛрд╕реН:

docker run --detach 
--hostname 192.168.1.112 
--publish 443:443 --publish 80:80 
--name gitlab 
--restart always 
--volume /srv/gitlab/config:/etc/gitlab 
--volume /srv/gitlab/logs:/var/log/gitlab 
--volume /srv/gitlab/data:/var/opt/gitlab 
gitlab/gitlab-ce:latest

рд╣рд╛рдореА GitLab рд▓реЗ рд╕рдмреИ рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд╛рдкрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдкреВрд░рд╛ рдирдЧрд░реЗрд╕рдореНрдо рдкрд░реНрдЦрдиреНрдЫреМрдВ (рддрдкрд╛рдИрд▓реЗ рд▓рдЧ рдлрд╛рдЗрд▓ рдЖрдЙрдЯрдкреБрдЯ рдорд╛рд░реНрдлрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ: docker logs -f gitlab)ред

5. рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдЖрдлреНрдиреЛ рд╕реНрдерд╛рдиреАрдп рдЖрдИрдкреА рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реН рд░ рд░реВрдЯ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкрд╛рд╕рд╡рд░реНрдб рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╕реЛрдзреНрдиреЗ рдкреГрд╖реНрда рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН:
рдбрдХрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рд╡рд┐рдзрд┐рд╣рд░реВ рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ
рдирдпрд╛рдБ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ GitLab рдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реНред

6. рдирдпрд╛рдБ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ cicd-test рд░ рдпрд╕рд▓рд╛рдИ рд╕реНрдЯрд╛рд░реНрдЯ рдлрд╛рдЗрд▓рдХреЛ рд╕рд╛рде рдкреНрд░рд╛рд░рдореНрдн рдЧрд░реНрдиреБрд╣реЛрд╕реН README.md:
рдбрдХрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рд╡рд┐рдзрд┐рд╣рд░реВ рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ
7. рдЕрдм рд╣рд╛рдореАрд▓реЗ GitLab Runner рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ: рдПрдХ рдПрдЬреЗрдиреНрдЯ рдЬрд╕рд▓реЗ рдЕрдиреБрд░реЛрдзрдорд╛ рд╕рдмреИ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрд╣рд░реВ рдЪрд▓рд╛рдЙрдиреЗрдЫред
рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд▓рд┐рдирдХреНрд╕ 64-рдмрд┐рдЯрдХреЛ рд▓рд╛рдЧрд┐):

sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

8. рдпрд╕рд▓рд╛рдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН:

sudo chmod +x /usr/local/bin/gitlab-runner

9. рдзрд╛рд╡рдХрдХреЛ рд▓рд╛рдЧрд┐ OS рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдердкреНрдиреБрд╣реЛрд╕реН рд░ рд╕реЗрд╡рд╛ рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

рдпреЛ рдпрд╕реНрддреЛ рдХреЗрд╣рд┐ рджреЗрдЦрд┐рдиреБ рдкрд░реНрдЫ:

local@osboxes:~$ sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
Runtime platform arch=amd64 os=linux pid=8438 revision=0e5417a3 version=12.0.1
local@osboxes:~$ sudo gitlab-runner start
Runtime platform arch=amd64 os=linux pid=8518 revision=0e5417a3 version=12.0.1

10. рдЕрдм рд╣рд╛рдореА рд░рдирд░ рджрд░реНрддрд╛ рдЧрд░реНрдЫреМрдВ рддрд╛рдХрд┐ рдпрд╕рд▓реЗ рд╣рд╛рдореНрд░реЛ GitLab рдЙрджрд╛рд╣рд░рдгрд╕рдБрдЧ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди рд╕рдХреНрдЫред
рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, Settings-CI/CD рдкреГрд╖реНрда рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реН (http://OUR_IP_ADDRESS/root/cicd-test/-/settings/ci_cd) рд░ рд░рдирд░ рдЯреНрдпрд╛рдмрдорд╛ URL рд░ рджрд░реНрддрд╛ рдЯреЛрдХрди рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреБрд╣реЛрд╕реН:
рдбрдХрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рд╡рд┐рдзрд┐рд╣рд░реВ рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ
11. URL рд░ рджрд░реНрддрд╛ рдЯреЛрдХрди рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реЗрд░ рдзрд╛рд╡рдХ рджрд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

sudo gitlab-runner register 
--non-interactive 
--url "http://<URL>/" 
--registration-token "<Registration Token>" 
--executor "docker" 
--docker-privileged 
--docker-image alpine:latest 
--description "docker-runner" 
--tag-list "docker,privileged" 
--run-untagged="true" 
--locked="false" 
--access-level="not_protected"

рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рд╣рд╛рдореАрд▓реЗ рдПрдХ рддрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд рдХрд╛рдо рдЧрд░реНрдиреЗ GitLab рдкрд╛рдЙрдБрдЫреМрдВ, рдЬрд╕рдорд╛ рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░рд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд╕реБрд░реВ рдЧрд░реНрди рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдердкреНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпрд╕ рдбреЗрдореЛрдорд╛ рд╣рд╛рдореАрд╕рдБрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд░ рдпрд╕рд▓рд╛рдИ рдХрдиреНрдЯреЗрдирд░рд╛рдЗрдЬ рдЧрд░реНрдиреЗ рдЪрд░рдгрд╣рд░реВ рдЫреИрдирдиреН, рддрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдпрд╕рд▓реЗ рд╕реНрдХреНрдпрд╛рдирд┐рдЩ рдЪрд░рдгрд╣рд░реВ рдЕрдШрд┐ рдмрдврд╛рдЙрдиреЗрдЫ рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХреЛ рд▓рд╛рдЧрд┐ рдЫрд╡рд┐рд╣рд░реВ рд░ рдбрдХрд░рдлрд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреЗрдЫред

рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди

1. рднрдгреНрдбрд╛рд░рдорд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдердкреНрдиреБрд╣реЛрд╕реН mydockerfile.df (рдпреЛ рдкрд░реАрдХреНрд╖рдг рдбрдХрд░рдлрд╛рдЗрд▓ рд╣реЛ рдЬреБрди рд╣рд╛рдореАрд▓реЗ рдЬрд╛рдБрдЪ рдЧрд░реНрдиреЗрдЫреМрдВ) рд░ GitLab CI/CD рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓ gitlab-cicd.yml, рдЬрд╕рд▓реЗ рд╕реНрдХреНрдпрд╛рдирд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рд╕реВрдЪреАрдмрджреНрдз рдЧрд░реНрджрдЫ (рдлрд╛рдЗрд▓ рдирд╛рдордорд╛ рдбрдЯ рдиреЛрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН)ред

YAML рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рд▓реЗ рддреАрдирд╡рдЯрд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ (Hadolint, Dockle, рд░ Trivy) рдЪрд▓рд╛рдЙрди рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ рдЬрд╕рд▓реЗ рдЪрдпрди рдЧрд░рд┐рдПрдХреЛ рдбрдХрд░рдлрд╛рдЗрд▓ рд░ DOCKERFILE рдЪрд░рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫрд╡рд┐рдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрдиреЗрдЫред рд╕рдмреИ рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓рд╣рд░реВ рднрдгреНрдбрд╛рд░рдмрд╛рдЯ рд▓рд┐рди рд╕рдХрд┐рдиреНрдЫ: https://github.com/Swordfish-Security/docker_cicd/

рдмрд╛рдЯ рдЕрдВрд╢ mydockerfile.df (рдпреЛ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рди рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рдордирдорд╛рдиреА рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВрдХреЛ рд╕реЗрдЯрдХреЛ рд╕рд╛рде рдПрдЙрдЯрд╛ рд╕рд╛рд░ рдлрд╛рдЗрд▓ рд╣реЛ)ред рдлрд╛рдЗрд▓рдорд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рд▓рд┐рдЩреНрдХ: mydockerfile.df

mydockerfile.df рдХреЛ рд╕рд╛рдордЧреНрд░реА

FROM amd64/node:10.16.0-alpine@sha256:f59303fb3248e5d992586c76cc83e1d3700f641cbcd7c0067bc7ad5bb2e5b489 AS tsbuild
COPY package.json .
COPY yarn.lock .
RUN yarn install
COPY lib lib
COPY tsconfig.json tsconfig.json
COPY tsconfig.app.json tsconfig.app.json
RUN yarn build
FROM amd64/ubuntu:18.04@sha256:eb70667a801686f914408558660da753cde27192cd036148e58258819b927395
LABEL maintainer="Rhys Arkins <[email protected]>"
LABEL name="renovate"
...
COPY php.ini /usr/local/etc/php/php.ini
RUN cp -a /tmp/piik/* /var/www/html/
RUN rm -rf /tmp/piwik
RUN chown -R www-data /var/www/html
ADD piwik-cli-setup /piwik-cli-setup
ADD reset.php /var/www/html/
## ENTRYPOINT ##
ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
USER root

рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди YAML рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ (рдлрд╛рдЗрд▓ рдЖрдлреИрдВ рдпрд╣рд╛рдБ рдкреНрд░рддреНрдпрдХреНрд╖ рд▓рд┐рдЩреНрдХ рдорд╛рд░реНрдлрдд рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫ: gitlab-ci.yml):

gitlab-ci.yml рдХреЛ рд╕рд╛рдордЧреНрд░реА

variables:
    DOCKER_HOST: "tcp://docker:2375/"
    DOCKERFILE: "mydockerfile.df" # name of the Dockerfile to analyse   
    DOCKERIMAGE: "bkimminich/juice-shop" # name of the Docker image to analyse
    # DOCKERIMAGE: "knqyf263/cve-2018-11235" # test Docker image with several CRITICAL CVE
    SHOWSTOPPER_PRIORITY: "CRITICAL" # what level of criticality will fail Trivy job
    TRIVYCACHE: "$CI_PROJECT_DIR/.cache" # where to cache Trivy database of vulnerabilities for faster reuse
    ARTIFACT_FOLDER: "$CI_PROJECT_DIR"
 
services:
    - docker:dind # to be able to build docker images inside the Runner
 
stages:
    - scan
    - report
    - publish
 
HadoLint:
    # Basic lint analysis of Dockerfile instructions
    stage: scan
    image: docker:git
 
    after_script:
    - cat $ARTIFACT_FOLDER/hadolint_results.json
 
    script:
    - export VERSION=$(wget -q -O - https://api.github.com/repos/hadolint/hadolint/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/hadolint/hadolint/releases/download/v${VERSION}/hadolint-Linux-x86_64 && chmod +x hadolint-Linux-x86_64
     
    # NB: hadolint will always exit with 0 exit code
    - ./hadolint-Linux-x86_64 -f json $DOCKERFILE > $ARTIFACT_FOLDER/hadolint_results.json || exit 0
 
    artifacts:
        when: always # return artifacts even after job failure       
        paths:
        - $ARTIFACT_FOLDER/hadolint_results.json
 
Dockle:
    # Analysing best practices about docker image (users permissions, instructions followed when image was built, etc.)
    stage: scan   
    image: docker:git
 
    after_script:
    - cat $ARTIFACT_FOLDER/dockle_results.json
 
    script:
    - export VERSION=$(wget -q -O - https://api.github.com/repos/goodwithtech/dockle/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.tar.gz && tar zxf dockle_${VERSION}_Linux-64bit.tar.gz
    - ./dockle --exit-code 1 -f json --output $ARTIFACT_FOLDER/dockle_results.json $DOCKERIMAGE   
     
    artifacts:
        when: always # return artifacts even after job failure       
        paths:
        - $ARTIFACT_FOLDER/dockle_results.json
 
Trivy:
    # Analysing docker image and package dependencies against several CVE bases
    stage: scan   
    image: docker:git
 
    script:
    # getting the latest Trivy
    - apk add rpm
    - export VERSION=$(wget -q -O - https://api.github.com/repos/knqyf263/trivy/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/knqyf263/trivy/releases/download/v${VERSION}/trivy_${VERSION}_Linux-64bit.tar.gz && tar zxf trivy_${VERSION}_Linux-64bit.tar.gz
     
    # displaying all vulnerabilities w/o failing the build
    - ./trivy -d --cache-dir $TRIVYCACHE -f json -o $ARTIFACT_FOLDER/trivy_results.json --exit-code 0 $DOCKERIMAGE    
    
    # write vulnerabilities info to stdout in human readable format (reading pure json is not fun, eh?). You can remove this if you don't need this.
    - ./trivy -d --cache-dir $TRIVYCACHE --exit-code 0 $DOCKERIMAGE    
 
    # failing the build if the SHOWSTOPPER priority is found
    - ./trivy -d --cache-dir $TRIVYCACHE --exit-code 1 --severity $SHOWSTOPPER_PRIORITY --quiet $DOCKERIMAGE
         
    artifacts:
        when: always # return artifacts even after job failure
        paths:
        - $ARTIFACT_FOLDER/trivy_results.json
 
    cache:
        paths:
        - .cache
 
Report:
    # combining tools outputs into one HTML
    stage: report
    when: always
    image: python:3.5
     
    script:
    - mkdir json
    - cp $ARTIFACT_FOLDER/*.json ./json/
    - pip install json2html
    - wget https://raw.githubusercontent.com/shad0wrunner/docker_cicd/master/convert_json_results.py
    - python ./convert_json_results.py
     
    artifacts:
        paths:
        - results.html

рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рднрдПрдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рдмрдЪрдд рдЧрд░рд┐рдПрдХрд╛ рдЫрд╡рд┐рд╣рд░реВрд▓рд╛рдИ .tar рдЕрднрд┐рд▓реЗрдЦрдХреЛ рд░реВрдкрдорд╛ рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ (рдпрджреНрдпрдкрд┐, рддрдкрд╛рдИрдВрд▓реЗ YAML рдлрд╛рдЗрд▓рдорд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдЗрдирдкреБрдЯ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫ)ред

NB: Trivy рд╕реНрдерд╛рдкрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдЫ rPM ╨╕ рдЬрд╛рдиреБрд╣реЛрд╕реНред рдЕрдиреНрдпрдерд╛, рдпрд╕рд▓реЗ RedHat-рдЖрдзрд╛рд░рд┐рдд рдЫрд╡рд┐рд╣рд░реВ рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрджрд╛ рд░ рдХрдордЬреЛрд░реА рдбреЗрдЯрд╛рдмреЗрд╕рдорд╛ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреЗрдЫред

2. рднрдгреНрдбрд╛рд░рдорд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдердкреЗрдкрдЫрд┐, рд╣рд╛рдореНрд░реЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рдорд╛ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдЕрдиреБрд╕рд╛рд░, GitLab рд▓реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдирд┐рд░реНрдорд╛рдг рд░ рд╕реНрдХреНрдпрд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫред CI/CD тЖТ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЯреНрдпрд╛рдмрдорд╛ рддрдкрд╛рдИрд▓реЗ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВрдХреЛ рдкреНрд░рдЧрддрд┐ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рдлрд▓рд╕реНрд╡рд░реВрдк, рд╣рд╛рдореАрд╕рдБрдЧ рдЪрд╛рд░ рдХрд╛рд░реНрдпрд╣рд░реВ рдЫрдиреНред рддреА рдордзреНрдпреЗ рддреАрдирд▓реЗ рд╕реАрдзреИ рд╕реНрдХреНрдпрд╛рдирд┐рдЩрд╕рдБрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрдЫрдиреН, рд░ рдЕрдиреНрддрд┐рдо рдПрдЙрдЯрд╛ (рд░рд┐рдкреЛрд░реНрдЯ) рд╕реНрдХреНрдпрд╛рдирд┐рдЩ рдирддрд┐рдЬрд╛рд╣рд░реВрдХреЛ рд╕рд╛рде рдЫрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдмрд╛рдЯ рд╕рд╛рдзрд╛рд░рдг рд░рд┐рдкреЛрд░реНрдЯ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрджрдЫред
рдбрдХрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рд╡рд┐рдзрд┐рд╣рд░реВ рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ
рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рдЫрд╡рд┐ рд╡рд╛ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВрдорд╛ CRITICAL рдХрдордЬреЛрд░реАрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд░реЗрдорд╛ Trivy рдЪрд▓реНрди рд░реЛрдХреНрдЫред рдПрдХреИ рд╕рдордпрдорд╛, Hadolint рд▓реЗ рд╕рдзреИрдВ рдПрдХ рд╕рдлрд▓рддрд╛ рдХреЛрдб рдлрд░реНрдХрд╛рдЙрдБрдЫ рдХрд┐рдирднрдиреЗ рдпрд╕рд▓реЗ рд╕рдзреИрдВ рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВрдорд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рдирд┐рд░реНрдорд╛рдг рд░реЛрдХреНрдирдХреЛ рдХрд╛рд░рдг рдмрдирд╛рдЙрдБрдЫред

рддрдкрд╛рдЗрдБрдХреЛ рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реБ рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫ, рддрдкрд╛рдЗрдБ рдПрдХ рдирд┐рдХрд╛рд╕ рдХреЛрдб рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рддрд╛рдХрд┐ рдЬрдм рдпреА рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реБ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╣рддреНрд╡рдкреВрд░реНрдгрддрд╛ рдХреЛ рд╕рдорд╕реНрдпрд╛рд╣рд░реБ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдБрдЫрдиреН, рдЙрдиреАрд╣рд░реБ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрдирд┐ рд░реЛрдХреНрдЫрдиреНред рд╣рд╛рдореНрд░реЛ рдХреЗрд╕рдорд╛, рдирд┐рд░реНрдорд╛рдг рд░реЛрдХрд┐рдиреЗрдЫ рдпрджрд┐ Trivy рд▓реЗ рд╣рд╛рдореАрд▓реЗ SHOWSTOPPER рдЪрд░рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реЗрдХреЛ рдЖрд▓реЛрдЪрдирд╛рддреНрдордХрддрд╛рдХреЛ рд╕рд╛рде рдХрдордЬреЛрд░реА рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдБрдЫред gitlab-ci.yml.
рдбрдХрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рд╡рд┐рдзрд┐рд╣рд░реВ рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ

рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдХреЛ рдирддрд┐рдЬрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрдпрд╛рдирд┐рдЩ рдХрд╛рд░реНрдпрдХреЛ рд▓рдЧрдорд╛, рдХрд▓рд╛рдХреГрддрд┐ рдЦрдгреНрдбрдорд╛ рд╕реАрдзреИ json рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рд╡рд╛ рд╕рд╛рдзрд╛рд░рдг HTML рд░рд┐рдкреЛрд░реНрдЯрдорд╛ рд╣реЗрд░реНрди рд╕рдХрд┐рдиреНрдЫ (рддрд▓рдХреЛ рдмрд╛рд░реЗрдорд╛ рдердк):
рдбрдХрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рд╡рд┐рдзрд┐рд╣рд░реВ рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ

3. рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд░рд┐рдкреЛрд░реНрдЯрд╣рд░реВ рдЕрд▓рд┐ рдмрдвреА рдорд╛рдирд╡-рдкрдвреНрди рд╕рдХрд┐рдиреЗ рдлрд╛рд░рдордорд╛ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрди, рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рдкрд╛рдЗрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреАрдирд╡рдЯрд╛ JSON рдлрд╛рдЗрд▓рд╣рд░реВрд▓рд╛рдИ рддреНрд░реБрдЯрд┐рд╣рд░реВрдХреЛ рддрд╛рд▓рд┐рдХрд╛рдХреЛ рд╕рд╛рде рдПрдЙрдЯрд╛ HTML рдлрд╛рдЗрд▓рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред
рдпреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рдЕрд▓рдЧ рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛рд░реНрдп рджреНрд╡рд╛рд░рд╛ рд╕реБрд░реБ рдЧрд░рд┐рдПрдХреЛ рд╣реЛ, рд░ рдпрд╕рдХреЛ рдЕрдиреНрддрд┐рдо рдХрд▓рд╛рдХреГрддрд┐ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рд╕рдВрдЧ HTML рдлрд╛рдЗрд▓ рд╣реЛред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрдд рднрдгреНрдбрд╛рд░рдорд╛ рдкрдирд┐ рдЫ рд░ рддрдкрд╛рдИрдВрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ, рд░рдВрдЧрд╣рд░реВ, рдЖрджрд┐ рдЕрдиреБрд░реВрдк рдЕрдиреБрдХреВрд▓рд┐рдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
рдбрдХрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рд╡рд┐рдзрд┐рд╣рд░реВ рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ

рд╢реЗрд▓ рд▓рд┐рдкрд┐

рджреЛрд╕реНрд░реЛ рд╡рд┐рдХрд▓реНрдк рдХреЗрд╕рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рдЫ рдЬрдм рддрдкрд╛рдЗрдБ CI/CD рдкреНрд░рдгрд╛рд▓реА рдмрд╛рд╣рд┐рд░ рдбрдХрд░ рдЫрд╡рд┐рд╣рд░реВ рдЬрд╛рдБрдЪ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рд╡рд╛ рддрдкрд╛рдЗрдБрд╕рдБрдЧ рд╣реЛрд╕реНрдЯрдорд╛ рд╕реАрдзрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд╕рдХрд┐рдиреЗ рдлрд╛рд░рдордорд╛ рд╕рдмреИ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рд╣реБрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпреЛ рд╡рд┐рдХрд▓реНрдк рддрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдХрднрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ рдЬреБрди рд╕рдлрд╛ рднрд░реНрдЪреБрдЕрд▓ (рд╡рд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ) рдореЗрд╕рд┐рдирдорд╛ рдЪрд▓рд╛рдЙрди рд╕рдХрд┐рдиреНрдЫред рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗ рдорд╛рдерд┐ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ gitlab-runner рдЬрд╕реНрддреИ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрджрдЫред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐, рдбрдХрд░ рдкреНрд░рдгрд╛рд▓реАрдорд╛ рд╕реНрдерд╛рдкрд┐рдд рд╣реБрдиреБрдкрд░реНрдЫ рд░ рд╣рд╛рд▓рдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдбрдХрд░ рд╕рдореВрд╣рдорд╛ рд╣реБрдиреБрдкрд░реНрдЫред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдлреИ рдпрд╣рд╛рдБ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫ: docker_sec_check.sh

рдлрд╛рдЗрд▓рдХреЛ рд╕реБрд░реБрдорд╛, рднреЗрд░рд┐рдПрдмрд▓рд╣рд░реВрд▓реЗ рдХреБрди рдЫрд╡рд┐ рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рд░ рдХреБрди рдорд╣рддреНрд╡рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐рд╣рд░реВрд▓реЗ Trivy рдЙрдкрдпреЛрдЧрд┐рддрд╛рд▓рд╛рдИ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдХреЛрдбрдХреЛ рд╕рд╛рде рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрдиреЗ рдХрд╛рд░рдг рд╣реБрдиреЗрдЫ рднрдиреЗрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрджрдЫред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рдХреНрд░рдордорд╛, рд╕рдмреИ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдбрд╛рдЙрдирд▓реЛрдб рд╣реБрдиреЗрдЫрдиреН docker_tools, рддрд┐рдиреАрд╣рд░реВрдХреЛ рдХрд╛рдордХреЛ рдирддрд┐рдЬрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдорд╛ рдЫрдиреН docker_tools/json, рд░ рд░рд┐рдкреЛрд░реНрдЯ рд╕рд╣рд┐рддрдХреЛ HTML рдлрд╛рдЗрд▓рдорд╛ рд╣реБрдиреЗрдЫ results.html.

рдЙрджрд╛рд╣рд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдЙрдЯрдкреБрдЯ

~/docker_cicd$ ./docker_sec_check.sh

[+] Setting environment variables
[+] Installing required packages
[+] Preparing necessary directories
[+] Fetching sample Dockerfile
2020-10-20 10:40:00 (45.3 MB/s) - тАШDockerfileтАЩ saved [8071/8071]
[+] Pulling image to scan
latest: Pulling from bkimminich/juice-shop
[+] Running Hadolint
...
Dockerfile:205 DL3015 Avoid additional packages by specifying `--no-install-recommends`
Dockerfile:248 DL3002 Last USER should not be root
...
[+] Running Dockle
...
WARN    - DKL-DI-0006: Avoid latest tag
        * Avoid 'latest' tag
INFO    - CIS-DI-0005: Enable Content trust for Docker
        * export DOCKER_CONTENT_TRUST=1 before docker pull/build
...
[+] Running Trivy
juice-shop/frontend/package-lock.json
=====================================
Total: 3 (UNKNOWN: 0, LOW: 1, MEDIUM: 0, HIGH: 2, CRITICAL: 0)

+---------------------+------------------+----------+---------+-------------------------+
|       LIBRARY       | VULNERABILITY ID | SEVERITY | VERSION |             TITLE       |
+---------------------+------------------+----------+---------+-------------------------+
| object-path         | CVE-2020-15256   | HIGH     | 0.11.4  | Prototype pollution in  |
|                     |                  |          |         | object-path             |
+---------------------+------------------+          +---------+-------------------------+
| tree-kill           | CVE-2019-15599   |          | 1.2.2   | Code Injection          |
+---------------------+------------------+----------+---------+-------------------------+
| webpack-subresource | CVE-2020-15262   | LOW      | 1.4.1   | Unprotected dynamically |
|                     |                  |          |         | loaded chunks           |
+---------------------+------------------+----------+---------+-------------------------+

juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)

...

juice-shop/package-lock.json
============================
Total: 5 (CRITICAL: 5)

...
[+] Removing left-overs
[+] Making the output look pretty
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html

рд╕рдмреИ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реБ рд╕рдВрдЧ рдбрдХрд░ рдЫрд╡рд┐

рддреЗрд╕реНрд░реЛ рд╡рд┐рдХрд▓реНрдкрдХреЛ рд░реВрдкрдорд╛, рдореИрд▓реЗ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВрдХреЛ рд╕рд╛рде рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рджреБрдИ рд╕рд╛рдзрд╛рд░рдг рдбрдХрд░рдлрд╛рдЗрд▓рд╣рд░реВ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реЗрдВред рдПрдЙрдЯрд╛ рдбрдХрд░рдлрд╛рдЗрд▓рд▓реЗ рднрдгреНрдбрд╛рд░рдмрд╛рдЯ рдЫрд╡рд┐ рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрди рд╕реЗрдЯ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫ, рджреЛрд╕реНрд░реЛ (Dockerfile_tar) рд▓реЗ рдЫрд╡рд┐рд╕рдБрдЧ рдЯрд╛рд░ рдлрд╛рдЗрд▓ рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрди рд╕реЗрдЯ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫред

1. рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрдмрд╛рдЯ рд╕рдореНрдмрдиреНрдзрд┐рдд рдбрдХрд░ рдлрд╛рдЗрд▓ рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рд▓рд┐рдиреБрд╣реЛрд╕реН https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
2. рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рд╕рднрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╕реБрд░реБ рдЧрд░реНрдЫреМрдВ:

docker build -t dscan:image -f docker_security.df .

3. рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреВрд░рд╛ рднрдПрдкрдЫрд┐, рд╣рд╛рдореА рдЫрд╡рд┐рдмрд╛рдЯ рдХрдиреНрдЯреЗрдирд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВред рдПрдХреИ рд╕рдордпрдорд╛, рд╣рд╛рдореАрд▓реЗ DOCKERIMAGE рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░рд▓рд╛рдИ рд╣рд╛рдореАрд▓реЗ рд░реБрдЪрд┐ рд░рд╛рдЦреЗрдХреЛ рдЫрд╡рд┐рдХреЛ рдирд╛рдордХреЛ рд╕рд╛рде рдкрд╛рд╕ рдЧрд░реНрдЫреМрдВ рд░ рдбрдХрд░рдлрд╛рдЗрд▓ рдорд╛рдЙрдиреНрдЯ рдЧрд░реНрдЫреМрдВ рдЬреБрди рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдореЗрд╕рд┐рдирдмрд╛рдЯ рдлрд╛рдЗрд▓рдорд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВред / рдбрдХрд░рдлрд╛рдЗрд▓ (рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рдпреЛ рдлрд╛рдЗрд▓рдХреЛ рдирд┐рд░рдкреЗрдХреНрд╖ рдорд╛рд░реНрдЧ рдЖрд╡рд╢реНрдпрдХ рдЫ):

docker run --rm -v $(pwd)/results:/results -v $(pwd)/docker_security.df:/Dockerfile -e DOCKERIMAGE="bkimminich/juice-shop" dscan:image


[+] Setting environment variables
[+] Running Hadolint
/Dockerfile:3 DL3006 Always tag the version of an image explicitly
[+] Running Dockle
WARN    - DKL-DI-0006: Avoid latest tag
        * Avoid 'latest' tag
INFO    - CIS-DI-0005: Enable Content trust for Docker
        * export DOCKER_CONTENT_TRUST=1 before docker pull/build
INFO    - CIS-DI-0006: Add HEALTHCHECK instruction to the container image
        * not found HEALTHCHECK statement
INFO    - DKL-LI-0003: Only put necessary files
        * unnecessary file : juice-shop/node_modules/sqlite3/Dockerfile
        * unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm64/Dockerfile
        * unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm/Dockerfile
[+] Running Trivy
...
juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)
...
[+] Making the output look pretty
[+] Starting the main module ============================================================
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html

╨а╨╡╨╖╤Г╨╗╤М╤В╨░╤В╤Л

рд╣рд╛рдореАрд▓реЗ рдбрдХрд░ рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдЖрдзрд╛рд░рднреВрдд рд╕реЗрдЯ рд╣реЗрд░реНрдпреМрдВ, рдЬреБрди рдореЗрд░реЛ рд╡рд┐рдЪрд╛рд░рдорд╛, рдЫрд╡рд┐ рд╕реБрд░рдХреНрд╖рд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВрдХреЛ рдПрдХ рд╕рднреНрдп рднрд╛рдЧрд▓рд╛рдИ рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рд░реВрдкрдорд╛ рдХрднрд░ рдЧрд░реНрджрдЫред рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рд╕рд╢реБрд▓реНрдХ рд░ рдирд┐: рд╢реБрд▓реНрдХ рдЙрдкрдХрд░рдгрд╣рд░реВ рдкрдирд┐ рдЫрдиреН рдЬрд╕рд▓реЗ рд╕рдорд╛рди рдЬрд╛рдБрдЪрд╣рд░реВ рдЧрд░реНрди, рд╕реБрдиреНрджрд░ рд░рд┐рдкреЛрд░реНрдЯрд╣рд░реВ рдХреЛрд░реНрди рд╡рд╛ рдХрдиреНрд╕реЛрд▓ рдореЛрдбрдорд╛ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрди, рдХрднрд░ рдХрдиреНрдЯреЗрдирд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВ, рдЗрддреНрдпрд╛рджрд┐ рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред рдпреА рдЙрдкрдХрд░рдгрд╣рд░реВрдХреЛ рдПрдХ рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдХрд╕рд░реА рдПрдХреАрдХреГрдд рдЧрд░реНрдиреЗ рдХреЗрд╣реА рд╕рдордп рдкрдЫрд┐ рджреЗрдЦрд╛ рдкрд░реНрди рд╕рдХреНрдЫред ред

рдпрд╕ рд▓реЗрдЦрдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХрд╛ рдЙрдкрдХрд░рдгрд╣рд░реВрдХреЛ рд╕реЗрдЯрдХреЛ рдмрд╛рд░реЗрдорд╛ рд░рд╛рдореНрд░реЛ рдХреБрд░рд╛ рдпреЛ рд╣реЛ рдХрд┐ рддрд┐рдиреАрд╣рд░реВ рд╕рдмреИ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╣реБрдиреН рд░ рддрдкрд╛рдИрдВрд▓реЗ рддрд┐рдиреАрд╣рд░реВ рд░ рдЕрдиреНрдп рд╕рдорд╛рди рдЙрдкрдХрд░рдгрд╣рд░реВрд╕рдБрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬреБрди рддрдкрд╛рдИрдВрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд░ рдкреВрд░реНрд╡рд╛рдзрд╛рд░рдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рдЫред рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдлреЗрд▓рд╛ рдкрд░реЗрдХрд╛ рд╕рдмреИ рдХрдордЬреЛрд░реАрд╣рд░реВ рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВрдорд╛ рд▓рд╛рдЧреВ рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐ рдЕрдзреНрдпрдпрди рдЧрд░рд┐рдиреБ рдкрд░реНрдЫ, рддрд░ рдпреЛ рднрд╡рд┐рд╖реНрдпрдХреЛ рдареВрд▓реЛ рд▓реЗрдЦрдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╖рдп рд╣реЛред

рдорд▓рд╛рдИ рдЖрд╢рд╛ рдЫ рдХрд┐ рдпреЛ рдЧрд╛рдЗрдб, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВрд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫ рд░ рдХрдиреНрдЯреЗрдирд░рд╛рдЗрдЬреЗрд╕рдирдХреЛ рдХреНрд╖реЗрддреНрд░рдорд╛ рдердк рд╕реБрд░рдХреНрд╖рд┐рдд рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕реБрд░реВрд╡рд╛рдд рдмрд┐рдиреНрджреБ рдмрдиреНрдиреЗрдЫред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди