CI에서 모든 릴리스나 배포를 스캔하세요
릴리스하거나 배포할 때마다 GitHub Actions, Vercel, GitLab, Bitbucket, CircleCI 또는 배포 스크립트에서 Pulse 또는 Deep 스캔을 실행하세요.
이 페이지는 사이트를 빌드하고 게시하는 사람을 위한 것입니다. 그 사람이 내가 아니라면, 이 링크를 보내 주세요.
릴리스 스캔은 사이트가 배포되는 곳에서 실행됩니다. 사이트의 Pulse(또는 Deep) 스캔을 시작하고, 결과를 기다리고, 보고하며, 스캔이 내가 고른 심각도 이상의 무언가를 찾으면 게시를 중단합니다. 어느 경우든 실제 사이트는 계속 실행됩니다. 릴리스 스캔은 각각 월 허용량에서 스캔을 하나 사용하며, Lockpick에서 직접 시작한 스캔과 같은 한도와 소유권 확인을 따르므로, 얼마나 자주 게시하는지 세어 보세요.
설정하기
- Lockpick에서 사이트를 열고 설정을 선택한 뒤 릴리스 스캔 설정을 선택하세요.
- CI 키를 만드세요. Lockpick은 이 키를 한 번만 보여 주므로 바로 복사하세요.
- CI의 비밀 값에
LOCKPICK_CI_KEY라는 이름으로 저장하세요. - 릴리스 스캔 페이지에서 사이트가 배포되는 곳의 설정을 열고, 저장소에 복사하세요. 이미 내 사이트가 채워져 있습니다.
실행되는 곳
| 배포하는 곳 | 스캔하는 시점 | 키를 넣는 곳 |
|---|---|---|
| GitHub Actions | 릴리스를 게시할 때, 또는 직접 실행할 때 | 저장소 비밀 값 LOCKPICK_CI_KEY |
| Vercel | 각 프로덕션 배포 후, 또는 직접 실행할 때 | 저장소 비밀 값 LOCKPICK_CI_KEY |
| GitLab CI | 태그에 대해, 다른 단계 이후, 또는 직접 실행할 때 | 마스킹된 CI/CD 변수 LOCKPICK_CI_KEY |
| Bitbucket Pipelines | 버전 태그에 대해, 또는 직접 실행할 때 | 보안 저장소 변수 LOCKPICK_CI_KEY |
| CircleCI | 버전 태그에 대해 | 프로젝트 환경 변수 LOCKPICK_CI_KEY |
| Fly.io, Railway, Render, 기타 | 배포 스크립트나 CI 작업이 끝날 때 | 내 비밀 값에서 가져온 환경 변수 LOCKPICK_CI_KEY |
GitHub Actions
릴리스 스캔 페이지에 있는 두 명령으로 액션을 .github/actions/lockpick-scan/에 복사한 다음, 워크플로를 추가하세요. 릴리스를 게시하거나, Actions 탭에서 워크플로를 실행하면 스캔이 시작됩니다. 작업 요약에 결과가 표시됩니다.
Vercel
Vercel 프로젝트가 GitHub 저장소에 연결되어 있으면, Vercel은 각 배포를 GitHub에 알립니다. Vercel 워크플로는 이 이벤트를 듣고, 각 프로덕션 배포 후에 스캔하며, 미리보기는 절대 스캔하지 않습니다. 이 액션도 저장소에 복사해야 하며, Vercel은 이 이벤트를 기본 브랜치의 워크플로에만 보냅니다.
각 프로덕션 배포는 허용량에서 스캔을 하나 사용하므로, 한 달에 몇 번만 프로덕션에 배포할 때만 이 방식을 고르세요. 그렇지 않다면 릴리스할 때 스캔하세요.
GitLab, Bitbucket, CircleCI와 배포 스크립트
이 방식들은 Node 20 이상에서 같은 스캔 스크립트를 실행합니다. 설정은 Lockpick에서 스크립트를 내려받고 LOCKPICK_SITE_ID, LOCKPICK_SCAN, LOCKPICK_FAIL_ON, LOCKPICK_API_URL을 설정합니다. 키는 LOCKPICK_CI_KEY에서 가져옵니다. 스크립트는 작업 로그에 요약을 출력하고, 스캔이 실패하면 1로 종료하므로 파이프라인이 그 자리에서 멈춥니다. 이것은 독립 실행형 스크립트의 규칙입니다. CLI는 문제 기준 도달에 종료 코드 8을 사용합니다. 비교표를 참고하세요.
Fly.io에는 배포 알림이 없고, Railway와 Render의 배포는 보통 CI 작업이나 스크립트에서 실행되므로, 배포 명령(예: fly deploy 또는 railway up) 뒤에 스크립트를 추가하세요.
이미 Lockpick CLI를 사용하고 있다면, lockpick pulse <site> --fail-on high도 CI 키와 함께 작동합니다. 키는 LOCKPICK_KEY에 넣습니다. Pulse만 실행합니다.
CI 키로 할 수 있는 것
CI 키는 사이트 하나에서만 작동합니다. Pulse를 시작할 수 있고, 허용했다면 Deep 스캔도 시작할 수 있으며, 그 스캔을 읽을 수 있습니다. 내 다른 사이트를 볼 수 없고, 사이트를 추가할 수 없으며, Lockpick에서 아무것도 바꿀 수 없습니다.
CI 키는 만들 때 고른 날짜(30, 90, 180 또는 365일)에 만료되며, 사용 여부와 관계없습니다. 릴리스 스캔 페이지에는 각 키가 마지막으로 사용된 시점과 만료 시점이 표시됩니다. 그 페이지에서 키를 폐기하면, 그 키를 쓰는 모든 파이프라인이 즉시 멈춥니다. 키를 만든 사람이 사이트에 대한 접근 권한을 잃어도 키는 작동을 멈춥니다.
릴리스에서 Deep 스캔 실행하기
CI에서 Deep을 쓰려면 키를 만들 때 Deep도 포함을 선택한 뒤, 이 키로 시작된 사이트의 Deep 스캔을 승인합니다를 선택하세요. 이 체크는 그 키로 시작된 해당 사이트의 Deep 스캔에 대한 내 승인이므로, CI는 스캔을 하나씩 승인하기 위해 기다리지 않습니다. 그래도 모든 Deep 스캔에는 다음이 여전히 필요합니다.
- 요금제에 Deep이 포함되어 있고, 허용량에 Deep이 남아 있을 것;
- 사이트 소유권 증명. 스캔이 시작될 때 그 레코드가 여전히 게시되어 있어야 합니다.
그다음 GitHub 워크플로에서 scan: deep을 설정하거나(직접 실행할 때는 deep을 고르세요), 다른 곳에서는 LOCKPICK_SCAN=deep을 설정하세요.
작업이 실패할 때
작업은 다음 경우에 실패합니다.
- 열린 문제가
fail-on(기본값high,critical,medium,low,none중에서 선택) 이상일 때; - 스캔이 실패했거나, 취소되었거나, 시간 제한 후에도 실행 중일 때(스캔은 Lockpick에서 계속 실행됩니다);
- Lockpick이 스캔을 시작하지 못했을 때. 예를 들어 이번 달 남은 스캔이 없거나, Deep이 허용되지 않았거나, 소유권이 증명되지 않았거나, 키가 만료된 경우입니다. 작업은 이유와 할 일을 알려 줍니다.
요약에는 등급, 심각도별 열린 문제, 스캔 링크가 표시되며, 각 문제에는 수정 방법이 있습니다. 문제의 세부 정보를 로그에 복사하지는 않습니다. 모든 것을 확인하지 못한 스캔은 확인한 내용을 기준으로 판단되며, 요약에는 일부 영역이 알 수 없음으로 표시됩니다.
같은 파이프라인을 다시 실행하면 새 스캔을 시작하지 않고 기존 스캔을 재사용합니다. 이는 GitHub Actions, GitLab CI, Bitbucket Pipelines, CircleCI에서 작동합니다. Vercel 배포는 이벤트가 몇 번 도착하든 한 번만 스캔합니다.
릴리스 스캔을 통과했다고 해서 보안 인증이 되는 것은 아닙니다. Lockpick이 평가할 수 없었던 검사 범위는 통과가 아니라 알 수 없음입니다.
도움이 되었나요?