Close

Snyk と Bitbucket Pipelines を統合して DevSecOps を実現する

Simon Maple 氏の顔写真
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_RESULTSfalse です。ただし、Snyk テスト結果を含む Code Insight レポートを作成するため、true に設定します。

4. SEVERITY_THRESHOLD は、指定されたレベル以上の課題について報告します。初期設定では low です。ただし、この場合は high のみに関心があるので、それに応じてこの変数を定義しました。

5. 初期設定では DONT_BREAK_BUILDfalse で、これが想定されています。通常の状況では、課題が見つかった場合はビルドを中断する必要があります。ただし、この学習演習では true に設定します。

感嘆符のアイコン

Atlassian Marketplace の新しい Snyk Security Connect アプリを利用して、プル リクエストに対して Snyk セキュリティ スキャンを実行して Code Insights で結果を表示できます。簡単に開始できて、数回クリックするだけでアプリをインストールできます。

コンテナ イメージをスキャンする

Bitbucket プロセスの図

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_THRESHOLDDONT_BREAK_BUILD には同じ値を保持します。また、これは、アプリケーション スキャンの代わりにコンテナ イメージ スキャンのリクエストを理解するために、Snyk Pipe に関連するいくつかの追加のサポートされている変数を渡します。つまり、これらは LANGUAGEdocker に設定して IMAGE_NAME を宣言し、適切なリポジトリ変数を渡して TARGET_FILEDockerfile に設定します。

これで、パイプラインは、既知の脆弱性とアプリケーション コードについてコンテナ イメージをスキャンします。

Atlassian Open DevOps の統合」をご確認ください。

Simon Maple
Simon Maple

Simon Maple is the Field CTO at Snyk, a Java Champion since 2014, Virtual JUG founder, and London Java Community co-leader. He is an experienced speaker, with a passion for community. When not traveling, Simon enjoys spending quality time with his family, cooking and eating great food.


この記事を共有する
次のトピック

おすすめコンテンツ

次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。

DevOps のイラスト

DevOps コミュニティ

DevOps のイラスト

DevOps ラーニング パス

マップのイラスト

無料で始める

DevOps ニュースレター購読

Thank you for signing up