記事
チュートリアル
インタラクティブ ガイド
Snyk と Bitbucket Pipelines を統合して DevSecOps を実現する
Simon Maple 氏
Snyk のフィールド CTO
Snyk を Bitbucket Pipelines や Jira と統合して、DevSecOps を実現します。
所要時間
読む時間 5 分。
対象者
開発者、セキュリティ/アプリケーション チームと DevOps/DevSecOps エンジニア。
前提条件
Snyk アカウントを持っているユーザー。こちらから開始してください。
Atlassian Bitbucket のアカウントを持っているユーザー。こちらからログインするか、こちらから開始してください。
このチュートリアルでは、Snyk によって Bitbucket Pipelines でビルド ワークフローを保護する方法を概説します。環境を保護するための重要なステップは、既知の脆弱性についてアプリケーションと Linux ベースのコンテナ プロジェクトの両方をスキャンして分析することです。これによって、セキュリティの脆弱性を特定して軽減できます。このチュートリアルの演習は、Snyk Pipe for Bitbucket Pipelines を活用して、アプリケーションとコンテナを保護する際に役立ちます。これは、アプリケーションとコンテナの依存関係について、アプリケーション マニフェスト ファイルとコンテナ ベース イメージをスキャンすることによって行われます。
チュートリアル「Snyk と Bitbucket Cloud によって DevSecOps を実現する方法」は、アプリケーションの依存関係に焦点を当てています。ただし、コンテナ ベース イメージをスキャンすることで、次も検出できます。
- パッケージ マネージャーによってインストールされて管理されている オペレーティング システム (OS) パッケージ
- 主要なバイナリ — パッケージ マネージャーによってインストールされなかったレイヤー
これらの結果に基づいて、Snyk は、次のようなアドバイスとガイダンスを提供します。
- OS パッケージと主要なバイナリに関する脆弱性の起源
- ベース イメージのアップグレードに関する詳細またはイメージの再構築に関する推奨事項
- 影響を受けるパッケージが導入された Dockerfile レイヤー
- オペレーティング システムと主要なバイナリ パッケージの固定バージョン
Bitbucket Pipelines のアプリケーション スキャン
bitbucket-pipelines.yml ファイルは Bitbucket Pipelines のビルド構成を定義します。Bitbucket Pipelines を初めて使用する場合は、こちらで開始方法の詳細を確認できます。
このチュートリアルでは、ワークフローにマッピングされた個別のステップを含むサンプルの bitbucket-pipelines.yml ファイルを提供します。まず、アプリケーションのスキャン、Docker イメージのビルド、コンテナ イメージのスキャンの順に始めます。次に、アプリケーションのスキャンに関するステップを詳しく見ていきます。
scan-app: &scan-app
- step:
name: "Scan open source dependencies"
caches:
- node
script:
- pipe: snyk/snyk-scan:0.4.3
variables:
SNYK_TOKEN: $SNYK_TOKEN
LANGUAGE: "npm"
PROJECT_FOLDER: "app/goof"
TARGET_FILE: "package.json"
CODE_INSIGHTS_RESULTS: "true"
SEVERITY_THRESHOLD: "high"
DONT_BREAK_BUILD: "true"
MONITOR: "false"
この例では、パイプラインの Snyk Scan パイプを利用して、アプリケーションのスキャンを実行します。ソースにはサポートされているすべての変数の完全な YAML 定義が含まれていますが、この目的のために必要なのはこのスニペットに含まれている変数のみです。
ここでは、これらのいくつかを詳しく見ていきます。
1. SNYK_TOKEN
は、[Bitbucket Configuration (Bitbucket 構成)] モジュールで以前に定義されたリポジトリ変数としてパイプに渡されます。
2. PROJECT_FOLDER
はプロジェクトが存在するフォルダーで、通常は初期設定されます。ただし、この例ではこれを app/goof
に設定して、アーティファクトとしてパイプラインの他のステップに渡します。
3. 初期設定では CODE_INSIGHTS_RESULTS
は false
です。ただし、Snyk テスト結果を含む Code Insight レポートを作成するため、true
に設定します。
4. SEVERITY_THRESHOLD
は、指定されたレベル以上の課題について報告します。初期設定では low
です。ただし、この場合は high
のみに関心があるので、それに応じてこの変数を定義しました。
5. 初期設定では DONT_BREAK_BUILD
は false
で、これが想定されています。通常の状況では、課題が見つかった場合はビルドを中断する必要があります。ただし、この学習演習では true
に設定します。
Atlassian Marketplace の新しい Snyk Security Connect アプリを利用して、プル リクエストに対して Snyk セキュリティ スキャンを実行して Code Insights で結果を表示できます。簡単に開始できて、数回クリックするだけでアプリをインストールできます。
コンテナ イメージをスキャンする
2022 年までに、75% を超えるグローバル組織が、コンテナ化されたアプリケーションを本番環境で運用する見込みです (Gartner)。広く採用される一方でコンテナの脆弱性が急増しており、2018 年に報告されたオペレーティング システムの脆弱性は 4 倍に増加しています。それでも、開発者の 80% は、開発中にコンテナ イメージをテストしないと言っています。彼らはそれは自分の責任ではないと言ったり、誰かがそのうち課題を捕捉することに慣れてしまっていたりするため、急成長している企業にとってコンテナ セキュリティのスケーリングが課題になっています。
パイプラインにおけるコンテナ イメージのスキャン
アプリケーションのスキャンに関する前のセクションと同様に、このセクションでは bitbucket-pipelines.yml ファイルを構成してアプリケーションの Docker イメージをビルドし、イメージをスキャンしてそのイメージをレジストリにプッシュすることに重点を置きます。次に、コンテナ イメージのスキャンの手順を詳しく見ていきます。
scan-push-image: &scan-push-image
- step:
name: "Scan and push container image"
services:
- docker
script:
- docker build -t $IMAGE ./app/goof/
- docker tag $IMAGE $IMAGE:${BITBUCKET_COMMIT}
- pipe: snyk/snyk-scan:0.4.3
variables:
SNYK_TOKEN: $SNYK_TOKEN
LANGUAGE: "docker"
IMAGE_NAME: $IMAGE
PROJECT_FOLDER: "app/goof"
TARGET_FILE: "Dockerfile"
CODE_INSIGHTS_RESULTS: "true"
SEVERITY_THRESHOLD: "high"
DONT_BREAK_BUILD: "true"
MONITOR: "false"
これは、コンテナ イメージをビルドしてタグ付けし、パイプラインの Snyk Scan パイプを活用してコンテナ イメージのスキャンを実行します。CODE_INSIGHTS_RESULTS, SEVERITY_THRESHOLD
と DONT_BREAK_BUILD
には同じ値を保持します。また、これは、アプリケーション スキャンの代わりにコンテナ イメージ スキャンのリクエストを理解するために、Snyk Pipe に関連するいくつかの追加のサポートされている変数を渡します。つまり、これらは LANGUAGE
を docker
に設定して IMAGE_NAME
を宣言し、適切なリポジトリ変数を渡して TARGET_FILE
を Dockerfile
に設定します。
これで、パイプラインは、既知の脆弱性とアプリケーション コードについてコンテナ イメージをスキャンします。
「Atlassian Open DevOps の統合」をご確認ください。
この記事を共有する
次のトピック
おすすめコンテンツ
次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。