Snyk を Atlassian Open DevOps に統合する

当社のチームは Jira Software とさまざまな接続ツールを使用してアプリケーションを開発、デプロイ、管理する方法を説明するために、機械学習を使用してイメージにラベルを添付する AWS 上に構築されたシンプルなデモ アプリケーションである ImageLabeller を作成しました。

このページでは、Snyk と Bitbucket を統合する方法について説明します。はじめに、ImageLabeller アーキテクチャのページを読んでコンテキストを確認することをお勧めします。

ソフトウェア アプリの規模と複雑さが増すにつれて、セキュリティの脆弱性とエクスプロイトの攻撃対象領域も広がります。

最新の開発プラクティスには、大量のコードの再利用が含まれます。1 つ目は、C++ STL、Golang 標準ライブラリ、Microsoft .NET などの言語固有の標準ライブラリの形式です。2 つ目は、GitHub のような場所にあるオープンソース ライブラリの形式です。こうしたコードの大部分は他のライブラリを使用して構築されており、最新のソフトウェアに依存関係のあるウェブを導入しています。

この膨大な量のコードにより、セキュリティの脆弱性が存在する可能性も高くなります。CVE リストに対してすべての依存関係を手動でチェックしても、脆弱性を常に把握することはできません。CI/CD プロセスに自動脆弱性スキャンを追加すると、セキュリティ リスクの特定と軽減に役立ちます。

アトラシアンのコード コラボレーション ソリューションである Bitbucket は、開発者向けのセキュリティ ソリューションの大手プロバイダーである Snyk に深く組み込まれたネイティブ統合を実現しました。つまり、アプリのインストールや設定が必要ないということです。セキュリティ問題の詳細を Bitbucket 内で直接確認できます。この機能を有効にすると、Snyk がコードとその依存関係を自動でチェックし、脆弱性が存在する場合は警告を発するため、デプロイ前に修正することができます。

Snyk は、他の商用データベースと比べて 4 倍もの脆弱性を追跡します。また、新しい脆弱性が発見されると、そのデータベースは他のデータベースよりも最大 46 日も早くアップデートされます。

Bitbucket と Snyk を接続する

Bitbucket で Snyk を操作する方法はいくつかあります。1 つ目は、リポジトリ画面の [セキュリティ] タブから Bitbucket へのネイティブ Snyk 統合を有効にすることです。2 つ目は、Snyk ステップを bitbucket-pipelines.yml ファイルに追加することです。どちらの方法にもデメリットはありません。Bitbucket の Snyk 統合により、Bitbucket でリポジトリを見ているすべてのユーザーが脆弱性データにすばやくアクセスできます。その後、Snyk Webサイトをクリックしていくと、発見されたそれぞれの脆弱性に関する追加情報を確認できます。bitbucket-pipelines.yml ファイルの Snyk ステップにより、パイプライン内のすべてのコミットで自動スキャンが可能となります。

Snyk 統合を Bitbucket に追加する

Snyk を Bitbucket リポジトリに追加するには、[セキュリティ] タブをクリックし、Snyk 統合を見つけて [今すぐ試す] をクリックします。

Snyk を Bitbucket に追加する

アクセス権が付与されたら、[Connect Bitbucket with Snyk (Bitbucket を Snyk に接続)] をクリックします。

Snyk を Bitbucket に追加する

統合の設定が完了したら、タブを閉じます。

Snyk を Bitbucket に追加する

左側のナビゲーションに表示される新しい Snyk オプションをクリックします。次に、go.mod ファイルをクリックしてドリル インすると、詳細が表示されます。この例では、Golang リポジトリは go モジュールを使用して依存関係を管理しています。他の種類のリポジトリでは、異なる依存関係ファイルが存在します。

Bitbucket Snyk 画面

それぞれの脆弱性の修正方法に関する詳細については、「visit Snyk (Snyk にアクセス)」をクリックして Snyk Web サイトにアクセスしてください。

Snyk 脆弱性の詳細

Snyk アプリのこのビューは、Bitbucket でレンダリングされる詳細画面と類似しています。この画面には、脆弱性のリストと、それぞれの脆弱性に関する追加情報が表示されます。

Snyk の Web サイトにアクセスする

次の画像は、Snyk の脆弱性レポートの一例です。脆弱性の原因となる階層が [Detailed paths (詳細なパス)] セクションに表示されます。次の例では、SubmitImage が AWS Golang SDK からこの脆弱性を継承していることがわかります。Snyk では、すべての問題のステータスが左側にまとめられます。この例では、いずれの問題も修正できません。[Fixability (修正可能性)] の下に「No fix available (修正不可)」の問題が 5 つ表示されていることにご注目ください。これは、これらの問題に対して現在利用できる軽減策がないことを意味します。開発者は統合を監視し、軽減策が利用可能になれば直ちに修正を行えます。

Snyk 脆弱性に関する詳細

Snyk ステップを bitbucket-pipelines.yml に追加する

Bitbucket ユーザー インターフェイス経由で Snyk にアクセスするだけでなく、bitbucket-pipelines.yml ファイルにステップを追加することで、Bitbucket Pipelines を介して Snyk 機能にアクセスできます。つまり、脆弱性スキャンはすべてのコミットに対して自動で実行され、セキュリティの脆弱性があれば警告します。

以下は、パイプラインの一部として Snyk テストを実行するための 2 つの bitbucket-pipelines.yml スニペットです。

Golang 用の Bitbucket Pipelines に Snyk を追加する

この例では、依存関係を管理するために Go モジュールを使用して Golang プロジェクトに対する Snyk テストを実行する方法を示しています。

1 2 3 4 5 6 7 8 9 10 11 12 13 definitions: steps: -step: &runsnyktest name: run snyk test image: snyk/snyk:golang script: - snyk auth $SNYK_TOKEN - cd submitImage - go mod graph - snyk test pipelines: default: - step: *runsnyktest

Python 用の Bitbucket Pipelines に Snyk を追加する

この例では、依存関係を管理するために Pip を使用して Python プロジェクトに対する Snyk テストを実行する方法を示しています。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 definitions: steps: -step: &runsnyktest name: run snyk test image: snyk/snyk:python script: - snyk auth $SNYK_TOKEN - cd src - snyk test --skip-unresolved - cd ../tst - snyk test --skip-unresolved pipelines: default: - step: *runsnyktest

これは、runsnyktest ステップが Bitbucket Pipelines で実行されたときの様子を示しています。

Bitbucket Pipelines の Snyk ステップ

結論

CI/CD パイプラインにセキュリティを統合することは、DevSecOps の中核的な信条です。DevSecOps では、標準的な DevOps パイプラインの各フェーズ (プラン、コーディング、ビルド、テスト、リリース、デプロイ) にセキュリティを適用する必要があります。セキュリティをワークフローに組み込むことで、開発プロセスにおいて後付けではなく、アクティブで統合されたプロセスになります。これは、アプリの安全性を高め、インシデントを減少させ、顧客の満足度を上げることを意味します。

その他のヘルプ