Close

Bitbucket Pipelines と Snyk Pipe によって、DevSecOps を実現する

Simon Maple 氏の顔写真
Simon Maple 氏

Snyk のフィールド CTO

Snyk を Bitbucket Pipelines や Jira と統合して、DevSecOps を実現します。

Time

5-minute read.

Audience

Developers, security/application teams, and DevOps/DevSecOps engineers.

Prerequisites

You have a Snyk account. Get started here.

You have an Atlassian Bitbucket account. Log in here, or get started here.

This tutorial outlines how to secure your build workflow on Bitbucket Pipelines with Snyk. An important step in securing your environment is to scan and analyze both your application and Linux-based container project for known vulnerabilities, which helps you identify and mitigate security vulnerabilities. The exercises in this tutorial will help secure your application and container by leveraging the Snyk Pipe for Bitbucket Pipelines to scan the application manifest file and the container base image for its dependencies.

The tutorial, How Snyk and Bitbucket Cloud enable DevSecOps, focused on application dependencies. However, by also scanning your container base image you can detect:

  • The operating system (OS) packages installed and managed by the package manager
  • Key binaries —layers that were not installed through the package manager

Based on these results, Snyk provides advice and guidance, including:

  • Origins of the vulnerabilities in OS packages and key binaries
  • Base image upgrade details or a recommendation to rebuild the image
  • Dockerfile layer where the affected package was introduced
  • Fixed-in version of the operating system and key binary packages

Application scanning in your Bitbucket Pipeline

The bitbucket-pipelines.yml file defines your Bitbucket Pipelines builds configuration. If you're new to Bitbucket Pipelines you can learn more about how to get started here.

This tutorial provides a sample bitbucket-pipelines.yml file that contains distinct steps mapped to the workflow. We’ll start by scanning the application, building the Docker image, and then scanning the container image. The following is a closer look at the application scanning step:

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"


This example leverages the Snyk Scan pipe in the pipeline to perform a scan of the application. The source contains a complete, YAML definition of all supported variables, but only those included in this snippet are necessary for this purpose.

Here’s a closer look at a few of these:

1. SNYK_TOKEN is passed into the pipe as a repository variable previously defined in the [Bitbucket Configuration] module.

2. PROJECT_FOLDER is the folder where the project resides and normally defaults to. However, in this example, we set this to app/goof and pass this as an artifact to other steps in ther pipeline.

3. CODE_INSIGHTS_RESULTS defaults to false. However, since we want to create a Code Insight report with Snyk test results, set this to true.

4. SEVERITY_THRESHOLD reports on issues equal or higher to the provided level. The default is low. But in this case, we are interested only in high, so we defined this variable accordingly.

5. The DONT_BREAK_BUILD default is false, which is expected. Under normal circumstances, you would want to break the build if issues are found. However, for the purpose of this learning exercise, set this to true.

Exclamation point

You can run Snyk security scans on your pull requests and view results in Code Insights with the help of the new Snyk Security Connect App on the Atlassian Marketplace. It's easy to get started and you can install the app with just a few clicks.

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

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 ニュースレター購読

Thank you for signing up