CIからすべてのリリースやデプロイをスキャンする
リリースやデプロイのたびに、GitHub Actions、Vercel、GitLab、Bitbucket、CircleCI、またはデプロイスクリプトから、サイトのPulseまたはDeepスキャンを実行します。
このページは、サイトをビルドして公開する担当者向けです。担当者があなたでない場合は、このリンクを送ってください。
リリーススキャンは、サイトを配信している場所で実行されます。サイトのPulse(またはDeep)スキャンを開始し、結果を待って報告します。スキャンで選んだ重大度以上の問題が見つかった場合は、公開を停止します。公開中のサイトは、どちらの場合も稼働し続けます。各リリーススキャンは、毎月のスキャン枠を1回使います。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
リリーススキャンのページにある2つのコマンドを使って、アクションを .github/actions/lockpick-scan/ にコピーし、次にワークフローを追加します。リリースを公開するか、Actionsタブからワークフローを実行すると、スキャンが開始されます。ジョブのサマリーに結果が表示されます。
Vercel
Vercelのプロジェクトが GitHub のリポジトリに接続されていると、Vercelは各デプロイについてGitHubに通知します。Vercelのワークフローはそれらのイベントを待ち受け、本番デプロイのあとにスキャンします。プレビューはスキャンしません。このワークフローにもアクションをリポジトリにコピーしておく必要があります。また、Vercelはこれらのイベントを、デフォルトブランチのワークフローにのみ送ります。
本番デプロイのたびに枠のスキャンを1回使うため、本番へのデプロイが月に数回程度の場合にのみ、この方法を選んでください。それ以外の場合は、リリースごとにスキャンしてください。
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キーは1つのサイトにのみ使えます。Pulseを開始でき、許可されていればDeepスキャンを開始でき、それらのスキャンを読み取れます。ほかのサイトを見たり、サイトを追加したり、Lockpickの内容を変更したりすることはできません。
CIキーは、使用の有無にかかわらず、作成時に選んだ日(30日、90日、180日、365日)に期限切れになります。リリーススキャンのページには、各キーが最後に使われた日時と、期限切れになる日時が表示されます。そこでキーを取り消すと、そのキーを使うすべてのパイプラインが直ちに停止します。キーを作成した人がサイトへのアクセス権を失った場合も、キーは機能しなくなります。
リリースからのDeepスキャン
CIでDeepを使うためにキーを作成するときにDeep もにチェックを入れ、次にこのキーで開始されるサイトのDeepスキャンを承認しますにチェックを入れてください。このチェックは、そのキーで開始される、そのサイトのDeepスキャンを承認することになります。そのため、CIがスキャンごとにあなたの承認を待つことはありません。それでも、すべての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が評価できなかった範囲は、合格ではなく不明として扱われます。
このページは役に立ちましたか?