ブログ

Harbor&Sysdigによるレジストリスキャンの自動化

Google Cloudとコンテナの継続的なセキュリティ

本文の内容は、2020年8月11日にNéstor Salcedaが投稿したブログ(https://sysdig.com/blog/harbor-registry-scanning/)を元に日本語に翻訳・再構成した内容となっております。

レジストリスキャンとは何か、セキュリティのシフトレフトにどのように役立つのか、HarborとSysdigを使ってどのように実装できるのかをご紹介します。

セキュリティを左にシフトするとは、セキュリティを開発プロセスの中で可能な限り早い時期に移行させることで、「修正までの時間」とセキュリティの影響を劇的に改善することです。この記事では、HarborレジストリとSysdig Secureを使ってシフトレフトする方法を紹介します。レジストリへのプッシュごとに透過的にイメージスキャンを自動化する方法を学びます。

多くの組織では、すでにCI/CDツールを使用し、イメージスキャンのベストプラクティスに従って、開発プロセスの一部としてセキュリティチェックを実施していますが、これは素晴らしいアイデアです。コンテナイメージのセキュリティ問題を早期に特定できれば、それを迅速に修正することができます。

しかし、使用しているが所有していないイメージはどうなるのでしょうか?それらは CI/CD パイプラインを通過しませんし、バグやその他のセキュリティ脆弱性が含まれている可能性があります。理想的な方法は、レジストリにアップロードされたイメージを直接スキャンすることです。

Harborはオープンソースのレジストリです。実際、HarborオープンソースプロジェクトはCNCFによってホストされています。Harborの多くのクールな機能の一つは、サードパーティのスキャンバックエンドをコア製品内に統合していることです。これにより、Harbor UIから離れることなく、素晴らしいユーザー体験が得られますし、導入サイクルの短縮にも役立ちます。

セキュアなパイプラインの一部としての自動レジストリスキャン

CI/CDパイプラインを介して生成するすべてのイメージをすぐにスキャンしても、次の課題に直面する可能性があります。

  • 誰もがCI/CDツールを使用しているわけではありません。例外と回避策が発生し、準備する必要があります。
  • 既知の脆弱性が含まれている可能性のあるサードパーティのイメージをプルしてデプロイする必要があります。
  • 多くのレジストリは、スキャンの詳細をイメージに直接添付しません。開発者は他の場所で情報を探す必要があり、人的ミスが発生しやすい複雑なワークフローを作成します。

レジストリスキャンは、コンテナのライフサイクルを保護するためのもう1つの基本的な手順です。これを自動化すると、常に適用されることが保証され、スキャン結果をレジストリUIに直接統合すると、開発者のユーザーエクスペリエンスが向上し、修正にかかる時間が短縮されます。

Sysdig Secureプラグ可能スキャンはどのようにHarborと統合できるのでしょうか?

Harborは、セキュリティに重点を置いたコンテナレジストリです。セキュリティポリシーとRBACを実装することで、内部の成果物を保護することができます。また、イメージスキャン機能も備えており、トラストチェーンの一部としてイメージに署名することも可能です。

一方、Sysdig Secure DevOps Platformは、マイクロサービスのライフサイクル全体に沿ってワークロードを保護するのに役立ちます。イメージスキャン、コンプライアンス、ランタイムセキュリティ、フォレンジック分析。この記事では、イメージスキャン機能にのみ焦点を当てます。

Harborは、Harborと他のイメージスキャナー間でアダプタを構築するためのAPI仕様を定義しています。私たちはそれを使用して、HarborのスキャニングAPIがSysdig Secure APIと通信して脆弱性レポートや追加情報を取得できるようにするアダプターを構築しました。これらの詳細はHarbor UIでエンドユーザに透過的に表示されます。

このアダプタには2つの動作モードがあります。バックエンドとインラインスキャンです。

バックエンドスキャン

これがデフォルトのモードです。Sysdig Harborアダプターは、コンテナイメージのパスをSysdig Secureバックエンド (SaaS またはオンプレミス) に転送します (例: docker.io/alpine:latest)。バックエンドはこのパスを使用してコンテナイメージを取得してスキャンし、その結果をSysdig Harborアダプタに返します。

長所:

  • インストールが簡単です。

短所:

  • Sysdig Secureバックエンドは、Harborからイメージを取得するためにネットワークの可視性を備えている必要があります。

インラインスキャン

インラインスキャンを使用すると、スキャン操作自体がトリガーされ、自身のインフラストラクチャー上で実行されます。新しいイメージがプッシュされると、Kubernetesジョブをスポーンします。このジョブは、コンテナのメタデータのみをSysdig Secureバックエンドに通信し、設定されたイメージスキャンポリシーに基づいて評価を実行します。

長所:

  • Sysdig Secureバックエンドでレジストリ資格情報を設定する必要はありません。
  • レジストリを外部に公開する必要がないため、Sysdig Secureからアクセスできます(上記のセクションの短所を参照)。
  • イメージコンテンツはパイプラインの外には送信されず、イメージメタデータのみが送信されます。

短所:

  • インラインスキャンを実行するジョブは、ホストローカルのDockerデーモンにアクセスできる必要があります。

Sysdig Secure and Harborを使用したレジストリスキャンの構成

Sysdig Secure用のHarbor Scanner Adapterをデプロイするには、以下の要件が必要です。

  • A Sysdig Secure API Token
  • Kubernetes >= 1.14
  • Harbor >= 1.10
  • Helm >= 3

ステップバイステップで行きましょう。

Sysdig Secure APIトークンの取得

Sysdig Secure アカウントを取得したら、ログインして設定に移動する必要があります。それは、「Get Started」サイドバー項目のすぐ下にあります。

20200813-01.png

そのAPIトークンをコピーしてください。

Helmチャートを使用してKubernetesにデプロイする

スキャナアダプターをデプロイする最速の方法は、弊社が提供するHelm Chartを使用することです。この記事では、インラインスキャンの戦略に焦点を当てていきます。バックエンドのスキャニングはもっと簡単です! :)

これらの設定を追跡するためにYAMLファイルを使用します。このファイルを values.yaml と呼びましょう。

sysdig:
  secure:
    apiToken: XXX
inlineScanning:
  enabled: true
  harbor:
    robotAccount:
      name: robotAccount
      password: XXX
    CA: |
      -----BEGIN CERTIFICATE-----
      ...
      -----END CERTIFICATE-----

XXXの値とCAを正しい値に置き換える必要があります。

Sysdig Secure API Tokenの取得方法を覚えて、次のステップに進みましょう。

次はロボットアカウントについてです。インラインスキャンモードでは、スキャンを実行するためにフードの下でdockerコマンドを使用するため、dockerを使用してレジストリに対して認証を行う必要があり、ロボットアカウントを使用します。ロボットアカウントを作成する方法については、Harborの方々がとても良い仕事をしてくれました。アカウントを作成したら、inlineScanning.harbor.robotAccount keyの下の値を必ず入力してください。

そして最後に、Harborが使用しているCA証明書を取得します。CA証明書のダウンロード方法については、Harborのスタッフの方が丁寧に説明してくれています。証明書を入手したら、その内容をYAMLファイルのinlineScanning.harbor.CA keyの下にコピーします。生のままにしておく必要があるので、|パイプ記号に注意してください。

そして、次はスキャナアダプターをデプロイします。

$ helm repo add sysdiglabs https://sysdiglabs.github.io/charts
"sysdiglabs" has been added to your repositories
$ kubectl create namespace harbor-scanner-sysdig-secure
namespace/harbor-scanner-sysdig-secure created
$ helm -n harbor-scanner-sysdig-secure install harbor-scanner-sysdig-secure -f values.yaml sysdiglabs/harbor-scanner-sysdig-secure
NAME: harbor-scanner-sysdig-secure
LAST DEPLOYED: Tue Jun  9 13:38:12 2020
NAMESPACE: harbor-scanner-sysdig-secure
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace harbor-scanner-sysdig-secure -l "app.kubernetes.io/name=harbor-scanner-sysdig-secure,app.kubernetes.io/instance=harbor-scanner-sysdig-secure" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace harbor-scanner-sysdig-secure port-forward $POD_NAME 8080:80

そして、スキャナーが配備されています。Harborに使用するように指示する時が来ました。

Sysdig Secure Scanner Adapterを使用するためのHarborの設定

Helm Chartが配備されたら、スキャナアダプターを使用するようにHarborを設定します。Interrogation Servicesの下に追加する必要があります。New Scannerボタンをクリックして、詳細を記入します。

20200813-02.png

Helm Chartが作成したサービスをエンドポイントとして使用し、それに到達できることを確認するために、Test Connectionボタンをクリックします。

最後に、Sysdig Secureスキャナを選択し、デフォルトとして設定します。スキャナ名の横にあるDefaultラベルを探すことで、正しく設定されていることを確認できます。

20200813-03.png

レジストリスキャンのサンプルフロー

Sysdig SecureスキャナーをHarborで設定したら、それを使用して、プッシュするたびにリポジトリーにプッシュされたイメージをスキャンできます。

$ docker pull ruby:2.7-slim                    	 
2.7-slim: Pulling from library/ruby
bf5952930446: Pull complete
d442c4e44ebb: Pull complete
f68297cfdb9c: Pull complete
18d9c380f08f: Pull complete
12ce7815f9ad: Pull complete
Digest: sha256:eedd564475dafa9c65924d76a4d7b0e65a543583c762e02fe83712325479a6b0
Status: Downloaded newer image for ruby:2.7-slim
docker.io/library/ruby:2.7-slim
$ docker tag ruby:2.7-slim  harbor.sysdig-demo.zone/harbor/ruby:2.7-slim   
 
$ docker push harbor.sysdig-demo.zone/harbor/ruby:2.7-slim
The push refers to repository [harbor.sysdig-demo.zone/harbor/ruby]
f61b37166fa2: Pushed
55d1859e48a3: Pushed
a41749bfbcf8: Pushed
3f65f6a3d78a: Pushed
d0f104dc0a1f: Pushed
2.7-slim: digest: sha256:634050fda844344d4caa4760de8c40b963870b34b4afbf09d52abf19f54ec343 size: 1367

この例ではruby:2.7-slim、DockerHubからプルしています。タグを付けてharbor.sysdig-demo.zone/harborリポジトリにアップロードし、最後にイメージをHarborリポジトリにプッシュします。

すぐにHarborインターフェースにイメージが表示され、数分後にHarbor UIで脆弱性レポートを利用できるようになります。

20200813-04.png

CVEを展開して脆弱性の詳細な説明を表示し、テーブルヘッダーをクリックしてデータを並べ替えることができます。

次のスクリーンショットでは、すでにHarbor UIで確認したのと同じ脆弱性が、Sysdig Secure UIの内部で確認できるようになっています。

20200813-05.png

まとめ

Harborのプラグイン性と柔軟性のおかげで、自動化されたレジストリスキャンの実装は数分で簡単に実現できます。自動化されたレジストリスキャンは、セキュリティをレイヤー化し、セキュリティを左へシフトさせることの典型的な例です。

これで、12のコンテナイメージのベストプラクティスのもう一つのステップが完了し、完全に安全なパイプラインに近づいたことになります。)

この統合のコードはGitHubで公開されており、HarborのデプロイとSysdig Platformの無料トライアルを利用するだけで始めることができます。ぜひ自宅で試してみてください。

Sysdigに関するお問い合わせはこちらから

最近の投稿

カテゴリー

アーカイブ

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

top