
vet v1.19.0
์ ์ฑ ์คํ์์ค ํจํค์ง๋ก๋ถํฐ ๋ณดํธ ๐ค
์ ์ฑ ํจํค์ง, ์ทจ์ฝ์ , ์ํํ CI ์ํฌํ๋ก๋ฅผ ํ๋ก๋์ ์ ๋๋ฌํ๊ธฐ ์ ์ ์ฐพ์๋ ๋๋ค.
[!NOTE] ์ด ๋ธ๋์น๋ ์ํ ๋จ๊ณ์ vet v2์ ๋๋ค. vet v1์
main์ ์์ผ๋ฉฐ ์ต์ ๋ฆด๋ฆฌ์ค๋ก ์ ์ง๋ฉ๋๋ค. v2.0.0 ๋ฆด๋ฆฌ์ค ๋ ธํธ์์ ๊ฐ v1 ๋ช ๋ น๊ณผ ํ๋๊ทธ๊ฐ v2์์ ์ด๋ป๊ฒ ๋์๋๋์ง ํ์ธํ ์ ์์ต๋๋ค.
vet์ ์ฌ์ฉํ๋ ์ด์
์ฌ๋ฌ๋ถ์ ์์กด์ฑ, GitHub Actions ์ํฌํ๋ก, AI ์์ด์ ํธ ์ค์ ์ ์ฌ๋ฌ๋ถ์ด ์์ฑํ์ง ์์ ์ฝ๋๋ฅผ ์คํํฉ๋๋ค. vet์ ๊ทธ ์์์ ์ํ์ ์ฐพ์๋ ๋๋ค.
- ์ ์ฑ ํจํค์ง. vet์ ๊ฐ ํจํค์ง๋ฅผ SafeDep Threat Intel๊ณผ ๋์กฐํ์ฌ ๊ฒ์ฌํฉ๋๋ค. Threat Intel์ ๋ ์ง์คํธ๋ฆฌ๊ฐ ์ ํจํค์ง ๋ฒ์ ์ ๊ฒ์ํ ๋ ํด๋น ๋ฒ์ ์ ๋ถ์ํฉ๋๋ค.
- ์๋ ค์ง ์ทจ์ฝ์ , ๊ทธ๋ฆฌ๊ณ ์ ๊ทธ๋ ์ด๋ํด์ผ ํ ์์ ๋ฒ์ .
- ์ํํ ์ํฌํ๋ก. ์ํํ ํธ๋ฆฌ๊ฑฐ, ํ ํ๋ฆฟ ์ธ์ ์ , ๋ ธ์ถ๋ ์ํฌ๋ฆฟ, ์ปค๋ฐ SHA๊ฐ ๊ณ ์ ๋์ง ์์ ์ก์ .
- ๋ฝํ์ผ ๋ณ์กฐ ๋ฐ ์ต์ ๋ฒ์ . ์ ๋ขฐํ ์ ์๋ ๋ ์ง์คํธ๋ฆฌ์์ ์จ ํญ๋ชฉ๊ณผ ์ฟจ๋ค์ด ๊ธฐ๊ฐ ๋ด์ ์๋ ๋ฒ์ .
- ์ฝ๋๋ก์์ ์ ์ฑ . CEL ๊ท์น์ด ์ค์บ ์คํจ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ ์ฅ๋ ์ค์บ์ ๋ํด ๊ท์น์ ํ ์คํธํ ์ ์์ต๋๋ค.
- AI ๋ฐ ์ํธํ ์ธ๋ฒคํ ๋ฆฌ. vet์ ์ฌ๋ฌ๋ถ์ ์ฝ๋๊ฐ ํธ์ถํ๋ AI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ๋์ดํ๊ณ , CycloneDX xBOM ๋ฐ CBOM์ ์์ฑํฉ๋๋ค.
vet์ ๊ณ์ ์ด ํ์ ์์ผ๋ฉฐ ์์ค ์ฝ๋๋ฅผ ์ ์กํ์ง ์์ต๋๋ค.
๋น ๋ฅธ ์์
brew install --cask safedep/tap/vet@edge
vet scan
vet scan --fail-on high # exit 1 on a high or critical finding
vet scan --base-ref origin/main --fail-on high # report only what a pull request changes
vet report show --report sarif=vet.sarif # write SARIF from the saved scan, with no new scan
์ค์น
| ์ฑ๋ | ๋ช ๋ น |
|---|---|
| Homebrew | brew install --cask safedep/tap/vet@edge |
| mise | mise use -g 'github:safedep/vet[prerelease=true]@2' |
| Go | go install github.com/safedep/vet/v2/cmd/vet@latest |
| ์ปจํ ์ด๋ | docker run --rm -v "$PWD:/src" -w /src ghcr.io/safedep/vet:v2-latest scan |
mise๋ ๋ฆด๋ฆฌ์ค๊ฐ ๊ฒ์๋ ํ ํ๋ฃจ ๋ค์ ์ค์นํฉ๋๋ค. install.md์๋ ์ต์ ๋น๋, ๋ฆด๋ฆฌ์ค ๋ฐ์ด๋๋ฆฌ ๋ฐ ๋น๋ ์ฆ๋ช (attestation)์ ์ํ ๋ช ๋ น์ด ์์ต๋๋ค.
vet์ด ์ค์บํ๋ ๋์
| ๋์ | ์์ |
|---|---|
| ๋๋ ํฐ๋ฆฌ (๊ธฐ๋ณธ๊ฐ) | vet scan, vet scan ./service |
| git ์ ์ฅ์ | vet scan https://github.com/safedep/vet |
| ์ปจํ ์ด๋ ์ด๋ฏธ์ง | vet scan oci://alpine:3.20, vet scan image.tar |
| SBOM (CycloneDX ๋๋ SPDX) | vet scan sbom.cdx.json |
| ๋จ์ผ ํจํค์ง | vet scan pkg:npm/[email protected] |
| ์ด ๋จธ์ ์ ๋๊ตฌ๋ค | vet endpoint audit |
vet์ npm, PyPI, Go, Maven, Gradle, Cargo, RubyGems, NuGet, Packagist, Pub ๋ฑ์ lockfile๊ณผ manifest๋ฅผ ์ฝ์ต๋๋ค. ๋ํ ๋์์ GitHub Actions ์ํฌํ๋ก์ AI ์์ด์ ํธ ์ค์ ๋ ์ฝ์ต๋๋ค. ์ด๋ค ์ค ์ด๋ ๊ฒ๋ ์ค์นํ๊ฑฐ๋ ์คํํ์ง ์์ต๋๋ค. ์ปจํธ๋กค(control)์ด ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฒฌ ์ฌํญ(finding)์ผ๋ก ์ ํํฉ๋๋ค. controls.md๋ฅผ ์ฐธ์กฐํ์ธ์.
์ ์ฑ
์ ์ฑ
์ ์ค์บ์ด ์คํจํ๋ ์์ ์ ๊ฒฐ์ ํฉ๋๋ค. ์ด ํ์ผ์ vet-policy.yml๋ก ์ ์ฅํ์ธ์:
version: 2
rules:
- id: no-malware
description: A malicious or suspicious package fails the build.
when: finding.family == "malware"
action: fail
- id: no-workflow-injection
when: finding.control_id in ["dangerous-trigger", "template-injection"]
action: fail
- id: no-critical-vulnerability
when: finding.control_id == "vulnerability" && finding.severity == "critical"
action: fail
- id: new-dependency-age
description: A pull request cannot add a version that is less than 14 days old.
when: package.change == "ADDED" && has(package.days_since_publish) && package.days_since_publish < 14
action: fail
suppressions:
- purl: pkg:npm/[email protected]
reason: The upgrade to 4.18.1 is in pull request 42.
expires: 2026-12-31
๋ง์ง๋ง ์ค์บ์์ ์ ์ค์บ ์์ด ํ ์คํธํ์ธ์. ๊ทธ๋ฐ ๋ค์ ํ ๋ฆฌํ์คํธ์ ์ ์ฉํ์ธ์:
vet report show last --policy vet-policy.yml
vet scan --base-ref origin/main --policy vet-policy.yml
๋ง๋ฃ์ผ์ด ์ง๋๋ฉด ํด๋น ์ต์ ๋ ๋ ์ด์ ๋ฐ๊ฒฌ ์ฌํญ์ ์จ๊ธฐ์ง ์์ต๋๋ค. ๊ท์น ํ๋, ๋ ๋ง์ ๊ท์น, ๊ทธ๋ฆฌ๊ณ ์ ์ฑ ์์ฑ์ ๋์ ํด ์ฃผ๋ Agent Skill์ ๋ํด์๋ policy.md๋ฅผ ์ฐธ๊ณ ํ์ธ์.
์ฌ์ฉ ์ฌ๋ก
- ํ ๋ฆฌํ์คํธ ๊ฒ์ฌ. vet GitHub Action์ ํจํค์ง, ์ํฌํ๋ก ๋๋ ๋ฐ๊ฒฌ ์ฌํญ์ ์ถ๊ฐํ๋ ํ ๋ฆฌํ์คํธ์ ๋๊ธ์ ๋ฌ๊ณ , ๊ณต๊ฒฉ์ด ์์ผ๋ฉด ๊ฒ์ฌ๋ฅผ ์คํจ์ํต๋๋ค.
vet ci init์ด ์ด๋ฅผ ์ ์ฅ์์ ์ถ๊ฐํฉ๋๋ค. - CI ๊ฒ์ดํธ. ์ข ๋ฃ ์ฝ๋, GitHub ์ฝ๋ ์ค์บ๋์ฉ SARIF, GitLab ๋ฐ Bitbucket ๋ณด๊ณ ์. ci.md๋ฅผ ์ฐธ๊ณ ํ์ธ์.
- ํ ๋ฆฌํ์คํธ ๋ฆฌ๋ทฐ.
--base-ref๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ถ๊ฐํ ํจํค์ง์ ์ํฌํ๋ก๋ง ๋ณด๊ณ ํฉ๋๋ค. - xBOM ๋ฐ CBOM. ์ฝ๋์์ ์ฌ์ฉํ๋ AI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํธํ์ ๋ํ CycloneDX 1.7 ์ธ๋ฒคํ ๋ฆฌ. inventory.md๋ฅผ ์ฐธ๊ณ ํ์ธ์.
- AI ์์ด์ ํธ. vet์ Claude Code ๋ฐ ๊ธฐํ ์์ด์ ํธ๋ฅผ ์ฐพ์๋ธ ๋ค JSON์ ์์ฑํ๋ฉฐ ํ๋กฌํํธ๋ฅผ ํ์ํ์ง ์์ต๋๋ค.
- ์๋ํฌ์ธํธ ๊ฐ์ฌ.
vet endpoint audit๋ ๊ฐ๋ฐ์ ๋จธ์ ์ ์๋ AI ๋๊ตฌ, MCP ์๋ฒ, ํธ์ง๊ธฐ ํ์ฅ ๋ฐ ์ ์ญ npm ํจํค์ง๋ฅผ ๋์ดํ๊ณ ์ ์ฑ์ฝ๋ ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํฉ๋๋ค.
๋ฌธ์
| ํ์ด์ง | ์ฐธ๊ณ ์ฉ๋ |
|---|---|
| ์ค์น | ๋ชจ๋ ์ฑ๋๊ณผ ๋ฆด๋ฆฌ์ค ๊ฒ์ฆ ๋ฐฉ๋ฒ |
| ๋ช ๋ น์ด | ๋ชจ๋ ๋ช ๋ น์ด, ํด๋น ํ๋๊ทธ ๋ฐ ์ข ๋ฃ ์ฝ๋ |
| ์ปจํธ๋กค | ์ปจํธ๋กค๊ณผ ํด๋น ์ต์ |
| ์ ์ฑ | ๊ท์น, ์ต์ ๋ฐ ๊ฒ์ดํธ |
| ์ถ๋ ฅ | ๋ณด๊ณ ์ ํ์, ์ ์ฅ๋ ์ค์บ ๋ฐ ๊ตฌ์ฑ |
| CI ๋ฐ AI ์์ด์ ํธ | GitHub Actions, GitLab, Bitbucket ๋ฐ ์์ด์ ํธ ๋ชจ๋ |
| ์ธ๋ฒคํ ๋ฆฌ | ์ฝ๋ ์ฌ์ฉ, AI ๋ฐ ์ํธํ, xBOM ๋ฐ CBOM |
๊ฐ์ธ์ ๋ณด
vet์ ๊ฐ ํจํค์ง์ ์๋ณ ์ ๋ณด(์ํ๊ณ, ์ด๋ฆ ๋ฐ ๋ฒ์ )๋ฅผ SafeDep์ ์ ์กํ์ฌ ํด๋น ํจํค์ง์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ต๋๋ค. vet์ ์์ค ์ฝ๋๋ ํ์ผ ๋ด์ฉ์ ์ ์กํ์ง ์์ต๋๋ค.
์๊ฒฉ ์ฆ๋ช
์ด ์๋ ๊ฒฝ์ฐ, vet endpoint audit๋ ๋จธ์ ์ ์ธ๋ฒคํ ๋ฆฌ๋ SafeDep Cloud์ ์ ์กํฉ๋๋ค. ์ฌ๊ธฐ์๋ AI ๋๊ตฌ, MCP ์๋ฒ, ์คํฌ ๋ฐ ํ์ฅ, ํด๋น ๊ตฌ์ฑ ๊ฒฝ๋ก, ๊ทธ๋ฆฌ๊ณ ๊ฐ ํ ๋๋ ํฐ๋ฆฌ์ ์ฌ์ฉ์ ์ด๋ฆ์ด ํฌํจ๋ฉ๋๋ค. macOS ๋ฐ Linux์์ vet์ ๊ฐ ํ ๋๋ ํฐ๋ฆฌ์ uid๋ ์ ์กํฉ๋๋ค. MCP ์๋ฒ ๋ ์ฝ๋์๋ ๋ช
๋ น, ์ธ์, ์๋ ค์ง ๋น๋ฐ์ด ๋ง์คํน๋ URL, ๊ทธ๋ฆฌ๊ณ ๋ณ์ ๋ฐ ํค๋์ ์ด๋ฆ์ด ํฌํจ๋๋ฉฐ, ๊ฐ์ ์ ๋ ํฌํจ๋์ง ์์ต๋๋ค.
plugins.cloud-inventory.enabled: false๋ก ์ด ๊ธฐ๋ฅ์ ๋ ์ ์์ต๋๋ค.
์ปค๋ฎค๋ํฐ
- Discord ๋๋ GitHub Discussions์์ ์ง๋ฌธํ๊ณ ์์ด๋์ด๋ฅผ ๊ณต์ ํ์ธ์.
- ๋ฒ๊ทธ๋ ์ด์ ํธ๋์ปค์ ๋ณด๊ณ ํ์ธ์.
- ํ ๋ฆฌํ์คํธ๋ฅผ ์ด๊ธฐ ์ ์ ๊ธฐ์ฌ ๊ฐ์ด๋๋ฅผ ์ฝ์ด ๋ณด์ธ์.
vet์ ํด๋ผ์ฐ๋์์๋ ์คํ๋ฉ๋๋ค. SafeDep Cloud๋ ๊ด๋ฆฌํ ์ธํ๋ผ ์์ด ์ ์ฅ์์์ vet์ ์คํํฉ๋๋ค. ์๊ฒฉ ์ฆ๋ช
์ด ์๋ ๊ฒฝ์ฐ, vet endpoint audit๋ ๊ฐ ๋จธ์ ์ AI ๋๊ตฌ, MCP ์๋ฒ ๋ฐ ํ์ฅ์ SafeDep Cloud์ ์ ์กํฉ๋๋ค.