ブログ

Gitlab CI/CDと Sysdig Secureを統合する

Gitlab CI/CDと Sysdig Secureを統合する

本文の内容は、2019年7月19日にSysdigのDale Rodriguezが投稿したブログ(https://sysdig.com/blog/gitlab-ci-cd-image-scanning/)を元に日本語に翻訳・再構成した内容となっております。

このブログでは、Sysdig Secureを使用してGitlab CI / CDプラットフォームでDockerイメージスキャンを実行する方法について説明します。Sysdig Secure内で定義しているセキュリティポリシーを満たしていないコンテナのイメージが本番Dockerレジストリにプッシュされる前に、ビルドパイプラインをストップ、ブレイキングします。

Gitlab CI/CDとは?

Gitlab CI/CDは、Gitlabソフトウェア開発およびコラボレーションプラットフォームと統合されたオープンソースの継続的な統合およびデリバリーサーバーです。

リポジトリ用にGitlab CI/CDを構成すると、デベロッパーがトラックされたリポジトリブランチにコミットをプッシュするたびに、パイプラインスクリプトが自動的にトリガーされます。

これらのパイプラインを使用して、多くのプロセスを自動化できます。 一般的なタスクには、QAテスト、ソフトウェア配布アーティファクト(DockerイメージやLinuxパッケージなど)の構築、またはこの記事の場合のようにセキュリティポリシーへの準拠の確認が含まれます。

Gitlab CI/CDパイプラインのコンテナセキュリティ:セキュリティをシフトレフトし、まず失敗させる

ITのほとんどのものと同様に、コンテナのセキュリティ問題を早期に検出するほど、それ以上の影響なしに問題を簡単に修正できます。

ビルドパイプラインにコンテナセキュリティを組み込むことは、いくつかの理由からベストプラクティスです。

  • これらの脆弱性は、実稼働クラスター、ひどい場合でもクライアント環境には決して到達しません。
  • Dockerコンテナレジストリで使用可能なイメージが、組織に対して定義したすべてのセキュリティポリシーを既に通過していることがわかっている場合は、事後のコンプライアンスを手動で確認するのではなく、デフォルトで保護する方法を採用できます。
  • デベロッパーがまだすべてのドメインコンテキストを持っている場合、元の作者は(ほぼ)即座に通知されます。 この方法は、他の人が数か月後に発見した場合よりも、この方法で修正する方がかなり簡単です...

Sysdig Secureは、ランタイムの脅威検出、フォレンジック、コンプライアンス、監査などの多くのコンテナセキュリティ機能の中でも特に、フル機能のコンテナイメージスキャンサービスを提供しています。 Sysdig SecureイメージスキャンサービスをGitlabと連携させる方法を見てみましょう。

前提条件

Dockerコンテナの構築に必要なすべてのファイルを含むGitlabリポジトリがあります。 新しいコミットがあるたびに新しいコンテナイメージを自動的に構築するパイプラインが必要であり、組織で実施されているセキュリティポリシーに従ってそのイメージを自動的にスキャンすることも必要です。

このブログ記事の手順を再現するには、次のものが必要です。

Sysdig SecureによるGitlab CI/CDパイプラインイメージスキャン

実際の例を用いて、これら2つのプラットフォームを非常に簡単なプロセスで統合する方法を示します。これにより、Sysdig Secure Imageスキャニングを数分で実行できるようになります。

アクセス認証の設定

Gitlab CI/CDパイプラインは、Sysdig Secureバックエンドと通信するためにアクセス認証情報を必要とします。これを実現するには、Sysdig UI設定 -> User profileからAPIアクセストークンをコピーします

次に、Gitlabプロジェクトの新しいグローバル変数を構成します。

  • GitLibプロジェクトで、プロジェクトの[Setting]> [CI/CD]を表示し、[Variables]を展開します。
  • ANCHORE_CLI_USERという名前の新しい変数を作成し、Sysdig Secure APIキーを[ Input variable value]フィールドに貼り付けます。
  • APIトークンをパイプラインログに出力しないようにするには、マスクボタンを切り替えます。

同様に、Gitlabレジストリ認証情報をSysdig Secureに追加して、イメージをフェッチおよびスキャンできるようにする必要があります。 Sysdig Secure UIからScanning->Registry credentials->レジストリを追加し、Gitlabアカウント認証情報を入力します。

基本ファイルとパイプライン定義

最初に、ビルドするイメージを定義するDockerfileが必要になります。 任意のDockerfileをプロジェクトにアップロードするか、単純な例を書くこともできます。

FROM python:stretch
CMD python -c "print('Hello, I\'m a Docker container!')"

次に、プロジェクトルートに新しい.gitlab-ci.ymlファイルを作成する必要があります。このファイルは、環境に必要なすべてのビルドステップ(ステージ)を含むマスタービルドファイルとして機能します。 このファイルを使用すると、ビルドに必要な数のステージを作成できます。

ここからこのブログに使用したGitlab CI / CDファイルをダウンロードできます。

このパイプラインには3つの段階があります。

  • コンテナイメージのビルド
  • 脆弱性またはポリシー違反についてイメージをスキャンする
  • イメージをリポジトリにプッシュする

ファイルの最初のセクションを以下に挙げます。 プロジェクト名に基づいてスキャンするイメージの変数を設定し、ビルドステージを設定します:

次に、個々のステージを見ていきます。

ビルドステージ

ビルドステージには、プロジェクトからdockerイメージをビルドしてプッシュするために必要なコマンドと機能が含まれています。

スキャニングステージ

次の段階は、コンテナスキャンステージです。 このステージでは、イメージの脆弱性をスキャンし、スキャンのレポート(成果物)を生成します。 これらの脆弱性レポートは、成功したか失敗したかに関係なく、ビルドの実行後に成果物として利用できます。

変数を確認してください。

ANCHORE_FAIL_ON_POLICY: "true"

trueに設定すると、イメージ内にポリシーで設定された停止条件(たとえば、重大な脆弱性)が含まれている場合、Sysdig Secureはこのステージのエラーコードを返します。 したがって、パイプラインを停止し、次のタスクが実行されないようにします。

脆弱なイメージを最終のリポジトリにプッシュしないように、デフォルトでtrueに設定されています。

container_scanステージが成功した結果は次のとおりです。

以下は同じイメージスキャンですが、結果としては失敗しています。

container_scanが失敗または成功すると、成果物(レポート)はcontainer_scanステージで表示可能になります。 イメージにデータが含まれていない(つまり、Javaパッケージがないなど)ため、一部のレポートが空になる場合があります。

Reports:

image-details.json - Details about Image scanned
image-gem.json - Details about ruby gems in scanned image
image-java.json - Details about java packages in scanned image
image-npm.json - Details about npm packages in scanned image
image-packages.json - List of packages contained in image
image-policy.json - Sysdig Secure Policy image used for image evaluation
image-python.json - List of python packages contained in image
image-vulnerabilties.json - List of vulnerabilities contained in image

パブリッシングステージ

脆弱性スキャンが成功すると、ビルドパイプラインのこの段階でレジストリにイメージがアップロードされます。

成功したプッシュの例を次に示します。

まとめ

GitlabのネイティブDocker互換性とSysdig SecureコンテナーイメージスキャンAPIのおかげで、両者を連携させるのは簡単です。

ソフトウェアの脆弱性を見つけ、コンテナセキュリティのベストプラクティス、Dockerfileの内容、ホワイトリストまたはブラックリスト固有のパッケージ、Java JAR/WARファイルのように手動でインストールされたサードパーティライブラリ、またはSysdig Secureのソフトウェアライセンスでもnpm、pip、gemなどのパッケージマネージャーを確認します 。

まず失敗し、コンテナ作成者に即座に通知し、即座に対処し、デフォルトで保護されたコンテナセキュリティポリシーを作成しましょう!

Atlassian Bamboo CI/CDとの統合の記事もぜひご覧ください。

Jenkins CI/CDセキュリティにおけるDockerスキャニングをSysdig Secureプラグインを用いて行うの記事もぜひご覧ください。

Integrate Image Scanning into Development Pipelineには、Sysdig Secureのマニュアルがあります。

最近の投稿

カテゴリー

アーカイブ

ご質問・お問い合わせはこちら

top