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パイプラインを介して生成するすべてのイメージをすぐにスキャンしても、次の課題に直面する可能性があります。
レジストリスキャンは、コンテナのライフサイクルを保護するためのもう1つの基本的な手順です。これを自動化すると、常に適用されることが保証され、スキャン結果をレジストリUIに直接統合すると、開発者のユーザーエクスペリエンスが向上し、修正にかかる時間が短縮されます。
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アダプタに返します。
長所:
短所:
インラインスキャンを使用すると、スキャン操作自体がトリガーされ、自身のインフラストラクチャー上で実行されます。新しいイメージがプッシュされると、Kubernetesジョブをスポーンします。このジョブは、コンテナのメタデータのみをSysdig Secureバックエンドに通信し、設定されたイメージスキャンポリシーに基づいて評価を実行します。
長所:
短所:
Sysdig Secure用のHarbor Scanner Adapterをデプロイするには、以下の要件が必要です。
ステップバイステップで行きましょう。
Sysdig Secure アカウントを取得したら、ログインして設定に移動する必要があります。それは、「Get Started」サイドバー項目のすぐ下にあります。
そのAPIトークンをコピーしてください。
スキャナアダプターをデプロイする最速の方法は、弊社が提供する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に使用するように指示する時が来ました。
Helm Chartが配備されたら、スキャナアダプターを使用するようにHarborを設定します。Interrogation Servicesの下に追加する必要があります。New Scannerボタンをクリックして、詳細を記入します。
Helm Chartが作成したサービスをエンドポイントとして使用し、それに到達できることを確認するために、Test Connectionボタンをクリックします。
最後に、Sysdig Secureスキャナを選択し、デフォルトとして設定します。スキャナ名の横にあるDefaultラベルを探すことで、正しく設定されていることを確認できます。
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で脆弱性レポートを利用できるようになります。
CVEを展開して脆弱性の詳細な説明を表示し、テーブルヘッダーをクリックしてデータを並べ替えることができます。
次のスクリーンショットでは、すでにHarbor UIで確認したのと同じ脆弱性が、Sysdig Secure UIの内部で確認できるようになっています。
Harborのプラグイン性と柔軟性のおかげで、自動化されたレジストリスキャンの実装は数分で簡単に実現できます。自動化されたレジストリスキャンは、セキュリティをレイヤー化し、セキュリティを左へシフトさせることの典型的な例です。
これで、12のコンテナイメージのベストプラクティスのもう一つのステップが完了し、完全に安全なパイプラインに近づいたことになります。)
この統合のコードはGitHubで公開されており、HarborのデプロイとSysdig Platformの無料トライアルを利用するだけで始めることができます。ぜひ自宅で試してみてください。