本文へ移動Lockpick
ドキュメント

CIからすべてのリリースやデプロイをスキャンする

リリースやデプロイのたびに、GitHub Actions、Vercel、GitLab、Bitbucket、CircleCI、またはデプロイスクリプトから、サイトのPulseまたはDeepスキャンを実行します。

このページは、サイトをビルドして公開する担当者向けです。担当者があなたでない場合は、このリンクを送ってください。

リリーススキャンは、サイトを配信している場所で実行されます。サイトのPulse(またはDeep)スキャンを開始し、結果を待って報告します。スキャンで選んだ重大度以上の問題が見つかった場合は、公開を停止します。公開中のサイトは、どちらの場合も稼働し続けます。各リリーススキャンは、毎月のスキャン枠を1回使います。Lockpickで開始したスキャンと同じ上限と所有権の確認が適用されるので、公開の頻度を数えておいてください。

設定する

  1. Lockpickでサイトを開き、設定を選んでから、リリーススキャンを設定を選びます。
  2. CIキーを作成します。Lockpickはキーを一度だけ表示するため、すぐにコピーしてください。
  3. CIのシークレットに LOCKPICK_CI_KEY という名前で保存します。
  4. リリーススキャンのページで、サイトの配信元に応じた設定を開き、リポジトリにコピーしてください。すでにサイトの情報が入力されています。

実行場所

配信元スキャンのタイミングキーの保存先
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が評価できなかった範囲は、合格ではなく不明として扱われます。

このページは役に立ちましたか?

このページの内容