こんにちは。DevOpsの深淵を覗き込み、現場の「痛い目」を幾度となく乗り越えてきたエンジニアです。
今日は、多くのチームが後回しにしがちな、しかし「事故が起きたら最後」という極めて重要なトピックについてお話しします。それは、Bitbucket PipelinesとSnykを統合し、脆弱性のあるコードを「物理的にマージさせない」強力なセキュリティゲートウェイの構築です。
「脆弱性スキャン? 手動でやってるよ」「Snykって何?」という方、安心してください。今日ここから始めれば、あなたのチームの品質は劇的に向上します。
—
なぜ「手動」ではいけないのか?
開発の現場では、日々何百ものライブラリが更新されます。あなたが今日使っている便利なパッケージが、明日の朝には脆弱性を含んでいるかもしれません。それを人間が追いかけるのは不可能です。
セキュリティは「自動化」して初めて武器になります。 パイプラインがコードをビルドする瞬間に、Snykが「このライブラリは危ない!」と検知し、ビルドを強制停止する。この「物理的な拒絶」こそが、健全な開発環境を維持する秘訣です。
—
1. 準備:SnykとBitbucketの握手
まず、Snykのアカウントを作成し、APIトークンを取得してください。
1. [Snyk公式サイト](https://snyk.io/)でアカウントを作成。
2. アカウント設定から「API Token」を取得します。
3. Bitbucketのリポジトリを開き、「Settings」>「Pipelines」>「Repository variables」に移動します。
4. `SNYK_TOKEN` というキーで、先ほどのトークンを登録してください(「Secured」にチェックを入れるのを忘れずに!)。
これで、パイプラインからSnykへ安全にアクセスする準備が整いました。
—
2. bitbucket-pipelines.yml の極意
さて、ここからが本番です。`bitbucket-pipelines.yml` を以下のように設定します。
image: node:18 # あなたのプロジェクトに合わせて変更してください
pipelines:
default:
- step:
name: 脆弱性スキャンとビルドゲートウェイ
script:
# Snyk CLIをインストール
- npm install -g snyk
# Snykに認証(環境変数を利用)
- snyk auth $SNYK_TOKEN
# 脆弱性スキャン実行
# –severity-threshold=high: 高リスクな脆弱性のみでビルドを失敗させる
# –fail-on=all: 何か一つでも見つかれば即停止
- snyk test –severity-threshold=high –fail-on=all
# スキャンをパスしたらビルドとテストを実行
- npm install
- npm test
ここが技術のポイント:
- `–severity-threshold=high`: ここが重要です。初期段階から全ての脆弱性に反応すると、開発が止まりすぎてチームが疲弊します。まずは「致命的なもの(High以上)」だけをゲートウェイにするのが、継続させるコツです。
- `–fail-on=all`: これにより、Snykが脆弱性を検知した場合、パイプラインの終了コードが非ゼロとなり、Bitbucketが自動的に「ビルド失敗」と見なします。
—
3. HelloWorld 的な動作確認
正しく動いているか確認するために、あえて古いバージョンのパッケージを一つインストールしてみましょう。
脆弱性が含まれることが既知の古いパッケージをインストール
npm install lodash@4.17.15
この状態でコミットし、プッシュしてください。Bitbucket Pipelinesの画面を開くと、Snykが即座にエラーを吐き出し、パイプラインが赤く染まるはずです。
「ゲートウェイが作動した!」
これで、あなたのプロジェクトに脆弱なコードが混入することは物理的に不可能になりました。これが、プロの現場の守り方です。
—
先輩エンジニアからのアドバイス
このセキュリティゲートウェイを導入すると、最初はビルドが落ちてイライラするかもしれません。しかし、それは「事故を未然に防いだ」という勲章です。
- 自動修正を検討する: Snykには `snyk wizard` や `snyk monitor` という強力なコマンドがあります。これらを組み合わせれば、修正案まで自動で提示してくれるようになります。
- チームと共有する: 「なぜビルドが失敗したのか」をチームに説明してください。これは責めるためではなく、「僕たちのコードを一緒に守るため」の仕組みだと周知することが、導入を成功させる鍵です。
今日からあなたのパイプラインは、ただのビルドマシンから「最強の番人」へと進化しました。この安心感を手に入れると、もう以前の「脆弱性に怯える日々」には戻れませんよ。
何か詰まったら、いつでも聞いてください。DevOpsの道は険しいですが、その先には非常に快適な開発体験が待っています。応援しています!