Skip to main content

Snyk ContainerとCloud Native Buildpacks:クラウドネイティブアプリケーションセキュリティの正しいアプローチ

著者

Pas Apicella

blog feature snyk container pink

2021年8月24日

0 分で読めます

コンテナでマイクロサービスを実行していますか?おめでとうございます!これは、アプリケーションをできるだけ早くお客様に届けるというビジネスニーズに応えるための重要な一歩です。しかし、ソフトウェアのデプロイを迅速化することで生じる潜在的なリスクは、どのように軽減できるでしょうか?答えはシンプル、Snykです。

Snyk Containerを、OCI準拠のコンテナイメージを作成するビルドツールと組み合わせれば、リスクを軽減し、本当に重要な優れた顧客体験の提供に注力できます。その仕組みを見ていきましょう。

DockerイメージとOCI準拠イメージの違い

どのコンテナランタイムでも、あらゆるビルドツールが生成したイメージを実行できるように、オープンソースのコンテナコミュニティは、コンテナイメージの形式とランタイムに関する業界標準を定めるため、Open Container Initiative(OCI)を立ち上げました。OCIイメージがあれば、OCI Runtime Specificationを実装したコンテナランタイムなら、イメージを展開して隔離された環境で実行できます。

Dockerという企業をご存じの方も多いでしょう。OCIイメージとDockerイメージの違いは何だろうと思うかもしれません。現在の答えは「ほとんど違いはない」です。OCI仕様より前に作られた古いDockerイメージが少数残っています。正式にはDocker v1仕様形式と呼ばれ、OCIに寄贈されてOCI仕様の基礎となったDocker v2スキーマとは互換性がありません。しかし、これらのv1イメージは2017年までのものです。現在では、ほぼすべてのコンテナレジストリ、Kubernetesプラットフォーム、コンテナランタイムがOCI仕様を基盤にしています。Dockerエンジン、Docker Hubをはじめ、Dockerの各種ツールや製品もその例です。

なぜこれが重要なのでしょうか?オープンな仕様によって、さまざまなグループが革新的なコンテナ構築方法を生み出せるようになりました。そして、いずれもOCI準拠のイメージを作成するため、どこでも実行でき、Snyk Containerのようなセキュリティツールで保護できます。開発チームには、Dockerfileの書き方を気にしたり、どのオープンソースライブラリを使うべきか何時間もかけて確認したり、Docker Hubにある何千ものイメージタグを調べてベースイメージを選んだりするのではなく、アプリケーションの中核となるコードに集中してほしいものです。ここでは、ソースコードから直接コンテナを構築する方法のひとつ、Cloud Native Buildpacksを見ていきましょう。

Cloud Native Buildpacks:ワンステップでソースコードからコンテナへ

Cloud Native Buildpacks(CNB)は、アプリケーションのソースコードを、あらゆるクラウドで実行できる完全準拠のOCIイメージに変換します。さらに、主要なプログラミング言語すべてに対応しています。コンテナの課題を解決し、制御性、コンプライアンス、保守性も実現します。

Heroku、Pivotal PaaS(現在のVMware Tanzu Application Service)、または関連するオープンソースのCloud Foundryを使ったことがあれば、Buildpacksに似た仕組みを目にしたことがあるでしょう。コードをそれらのサービスにプッシュするだけで、適切なランタイム環境にパッケージ化してくれます。CNBは、同じ体験をOCIイメージでも実現します。開発者がコードを書くと、CNBがアプリの依存関係をビルドし、アプリの実行に必要なものをすべてコンテナイメージにパッケージ化します。

アプリのソースコードとBuildpacksを、ビルドイメージと実行イメージ、依存関係、アプリイメージに変換するプラットフォームを示した図。

Cloud Native Buildpacksの仕組み(出典:vmware Tanzu Developer Center)

例

$ pack build pasapples/pbs-demo-image:latest --builder paketobuildpacks/builder:base --publish --path ./target/springbootemployee-0.0.1-SNAPSHOT.jar

Cloud Native Buildpacksは、具体的に何を構築するのでしょうか?

他のイメージ構築ツールと同様に、Cloud Native Buildpacksは、ランタイム、アプリケーション、そのすべての依存関係を含むファイルシステムレイヤーのセットと、アプリケーションの起動方法をコンテナエンジンに伝えるメタデータを作成します。以下は、docker image historyコマンドを使って、上記の例のレイヤー情報を表示したものです。

$ docker image history pasapples/pbs-demo-image:latest
IMAGE      CREATED    CREATED BY   SIZE  COMMENT
5d29940d2e52   41 years ago            68kB
<missing>  41 years ago            46.3MB
<missing>  41 years ago            10B
<missing>  41 years ago            7.05MB
<missing>  41 years ago            451kB
<missing>  41 years ago            2.09MB
<missing>  41 years ago            7.23MB
<missing>  41 years ago            3.04MB
<missing>  41 years ago            140MB
<missing>  41 years ago            214B
<missing>  41 years ago            6.69MB
<missing>  41 years ago            2.27MB
<missing>  41 years ago            398kB
<missing>  41 years ago            6.51MB
<missing>  41 years ago            7B
<missing>  41 years ago            745B
<missing>  41 years ago            987kB
<missing>  41 years ago            63.2MB

「41年前」というタイムスタンプに戸惑うかもしれませんが、これは再現可能なビルドを実現するためのものです。詳しくはこちらをご覧ください。Time Travel with Pack

diveというツールを使うと、レイヤーの内容をさらに詳しく確認できます。下のスクリーンショットの左上のウィンドウでは、イメージの下から2番目のレイヤーを選択しています(diveではレイヤーが下から上へ表示されますが、上記のビルド出力では逆順です)。右側では、そのレイヤーの内容を確認しています。OCIイメージ内にあるSpringbootアプリケーションのJARファイルが含まれています。CNBは、ソースコードをもとに、これらすべてをまとめてくれました。

Dockerイメージのレイヤー、Spring Bootアプリケーションのクラスや依存関係、イメージのストレージ情報を表示するターミナル

Snyk ContainerによるOCIコンテナイメージのセキュリティ対策

Snyk Containerは、Cloud Native Buildpacksやその他のビルドツールで作成されたものを含む、準拠したあらゆるOCIイメージをスキャンし、SDLC全体を通じてコンテナやKubernetesワークロードの脆弱性を検出します。さらに、Snykはコンテナに含まれる脆弱性を一覧表示するだけではありません。Snyk Containerは、より安全で脆弱性の少ないコンテナを迅速に構築するためのアドバイスを提供します。また、新しく改良されたベースイメージ検出機能により、これまでDockerfileを含めた場合にのみ提供できていたレベルのアドバイスを提供できるようになりました。

Snyk Containerによるベースイメージの自動修正

開発者がより安全なベースイメージへのアップグレードや、古くなったベースイメージを使ったイメージの再ビルドによって、多数の脆弱性をすばやく解消できるようにし、セキュリティ対策を拡大しましょう。

OCIイメージをスキャンすると、Snykはイメージのベースとなっているベースイメージを検出し、以下のように脆弱性の少ないベースイメージを提案できます。

ベースイメージの詳細とマイナーおよびメジャーアップグレードの推奨事項を含む、コンテナイメージの概要を表示したSnykダッシュボード。

このOCIコンテナには、どのベースイメージを使えるでしょうか?または、最近更新したベースイメージはあるでしょうか?

ベースイメージの推奨情報は、ライフサイクルのどの段階で、どこからイメージをスキャンしても確認できます。上の例はDocker Hubに保存されたイメージを示しています。下の例ではSnyk CLIを使ってイメージをスキャンしています。これはCIパイプラインでのスキャンにも適用できます。以下のように、Snykは脆弱性の少ないベースイメージを提案できます。

$ snyk container test pasapples/pbs-demo-image

Testing pasapples/pbs-demo-image...

✗ High severity vulnerability found in openssl
  Description: NULL Pointer Dereference
  Info: https://snyk.io/vuln/SNYK-UBUNTU1804-OPENSSL-1089073
  Introduced through: openssl@1.1.1-1ubuntu2.1~18.04.5, ca-certificates@20180409, openssl/libssl1.1@1.1.1-1ubuntu2.1~18.04.5
  From: openssl@1.1.1-1ubuntu2.1~18.04.5
  From: ca-certificates@20180409 > openssl@1.1.1-1ubuntu2.1~18.04.5
  From: openssl/libssl1.1@1.1.1-1ubuntu2.1~18.04.5
  and 1 more...
  Fixed in: 1.1.1-1ubuntu2.1~18.04.9

...

Organization:  pas.apicella-41p
Package manager:   deb
Project name:  docker-image|pasapples/pbs-demo-image
Docker image:  pasapples/pbs-demo-image
Platform:      linux/amd64
Base image:    ubuntu:bionic-20200403
Licenses:      enabled

Tested 93 dependencies for known issues, found 57 issues.

Base Image          Vulnerabilities  Severity
ubuntu:bionic-20200403  49           0 critical, 0 high, 16 medium, 33 low

Recommendations for base image upgrade:

Minor upgrades
Base Image Vulnerabilities  Severity
ubuntu:bionic  25           0 critical, 0 high, 3 medium, 22 low

Major upgrades
Base Image  Vulnerabilities  Severity
ubuntu:rolling  17           0 critical, 0 high, 2 medium, 15 low

アプリケーションとコンテナの脆弱性をまとめて確認

コンテナ内で実行されている元のソースコードにアクセスできない場合でも、コードの依存関係にある脆弱性への対処は重要です。Snykは、コンテナスキャンの一環として、主要なプログラミング言語のオープンソース依存関係を検出・監視できます。

ベースレイヤーとオープンソース依存関係レイヤー、および脆弱性の深刻度別件数を示すCNB OCIイメージのビュー。
CNB OCIイメージのベースレイヤーとオープンソース依存関係を明確に表示します。

開発者が最もリスクの高い脆弱性に集中できるよう支援

Snykを使えば、何百もの問題をひとつずつトリアージするのではなく、優先度の高い問題に簡単に集中できます。ベースイメージの脆弱性を無視または除外したり、悪用の成熟度や安全でないワークロード設定などのリスクシグナルを活用したりすることで、コンテナ脆弱性レポートにありがちなノイズを整理し、チームが重要な問題に集中できるようにします。

Snyk Containerは、クラウドネイティブアプリケーションの脆弱性を開発者が見つけて修正できるよう設計されたSnyk Cloud Native Application Securityプラットフォームの一部です。ぜひ今すぐお試しください。

開発者ファーストのコンテナセキュリティ

Snykは、コンテナイメージとKubernetesワークロードの脆弱性を検出し、自動的に修正します。

続きを読む

Blog

フロンティアモデルは脆弱性を発見した。攻撃者だけがエクスプロイトチェーンを見つけた。

静的解析で欠陥は見つかりましたが、ライブ攻撃テストで侵害につながる連鎖を実証できたのは唯一でした。Evo COS、Claude Security、Claude Code Securityを比較します。

feature insights context
Blog

自律型攻撃はすでに始まっている。防御もそのスピードに追いつかなければならない。

自律型攻撃者によって、防御に使える時間は短くなっています。継続的な検出、修復、検証、予防で、セキュリティチームが攻撃に歩調を合わせる方法をご紹介します。

Blog

AIコーディングエージェントが不適切なアクセス制御を繰り返し実装する理由

AIコーディングエージェントは、コンパイルが通りレビューも通過する一方で、あるテナントのデータを別のテナントに公開してしまう認可ロジックを生成することがあります。不適切なアクセス制御が検出しにくい理由と、その防止策をご紹介します。