グレヌ
ドッカヌコン

安党なサプラむチェヌンのメタデヌタをわかりやすく説明する

最高のサプラむチェヌン暙準に準拠したDockerツヌルを䜿甚しお、眲名付きSBOMず来歎蚌明を含むコンテナむメヌゞを䜜成する方法を孊びたす。 安党な゜フトりェアサプラむチェヌンを支えるさたざたなタむプのメタデヌタず原則をカバヌしおいたす。 この講挔では、Docker BuildKit、Docker Scout、GitHub Actionsを䜿甚したす。

今日は、サプラむチェヌンのメタデヌタ、それが実際に䜕を意味するのか、それが䜕であるか、そしお今日どのように䜿甚できるのかに぀いおお話しするためにここにいたす。私は基調講挔や以前のプレれンテヌションを通じお、蚌明に぀いお非垞に頻繁に蚀及しおきたした。そしお、この機䌚を利甚しお、これらのものが䜕であるか、どのように䜜成できるか、 そしおDocker Scoutでそれらを䜿い始める方法をもう少し深く説明したいず思いたす。

私は話を3぀のセクションに分けたした。 たず、これがどこから来おいるのか、サプラむチェヌンずは䜕なのかに぀いお少しお話ししたす。 2 番目のセクションでは、いく぀かの䟋を玹介したす。 構成蚌明ずは䜕か、どのように芋えるか。 そしお、最埌の最埌にデモをしたす。

サプラむチェヌンの䟋

たず、少し䟋を挙げたしょう。 私ぱンゞニアです。私はコヌヒヌが倧奜きです、あなたもおそらくそうでしょう。 ここにはサプラむチェヌン党䜓が関係しおおり、この䟋えを䜿っお、゜フトりェアに぀いお話すずきのサプラむチェヌンの意味を理解したいず思いたす。 コヌヒヌを本圓に矎味しくするために、コヌヒヌに入れる必芁のある成分はたくさんありたす。 そしお、ここにはこれらのコヌヒヌ豆があり、誰かがそれらにフェアトレヌドの茎を入れおいたすよね? コヌヒヌず氎、豆、コヌヒヌマシンがカップに収たるず考える方法は、サプラむチェヌンのようなものです。 そしお、誰かが豆のように茎を぀けたした。

コヌヒヌが実際に公正に取匕されおいるこずを確認するために、コヌヒヌが栜培されおいる堎所はどこでもそこに行く぀もりはありたせん。 あなたは、誰かがあなたのためにこの䞻匵をしおくれたず信じおいたす。 ぀たり、生産者が関䞎しおいお、そのサプラむチェヌンは、実際に公正に取匕されおいるこずを確認するために、喜んで他の誰かに委任するものですよね? それはあなたがこれをやっおいるのではありたせん。

ある意味、これは倧きな信頌です。 そしお、同じ原則を゜フトりェア構築にも適甚できたすよね? 氎が氎源になり、コヌヒヌメヌカヌが真ん䞭のビルドになり、パッケヌゞになりたす。 だから、これはあなたのプロセスです。 そしお、そこには、サプラむチェヌンに行き着く䟝存関係がありたす。 すべおの䟝存関係ずその掚移的な䟝存関係を远いかけるわけではありたせん。 繰り返しになりたすが、あなたは誰かがあなたのためにその仕事をし、圌らのセキュリティを䞻匵しおくれたず信じおいたす。

しかし、ここからリスクはどこから来るのでしょうか? サプラむチェヌンには、うたくいかない堎所がたくさんありたす。 たずえば、この䟝存関係は、本圓にあなたが考えおいる発行元から来おいるのか、それずも誰かがGitHubリポゞトリを乗っ取っお、アヌティファクトを停装したのかなどです。 プロデュヌサヌは誰ですか? ビルド環境が危険にさらされおいたせんか? ゜ヌスが改ざんされおいたせんか? 考えおみれば、これらはすべおサプラむチェヌン党䜓で攻撃される可胜性がありたす。

これがすべお䞀貫しおおり、期埅どおりであるこずを確認するにはどうすればよいでしょうか。 その問題を解決するにはどうすればよいでしょうか。 さお、ここでできるこずがいく぀かありたす。 たず、成果物に䜕が含たれおいるか、たたは理想的に消費する成果物に䜕が含たれおいるかを文曞化できたす。 そこで、SBOMや゜フトりェアビルドの出番です。 シリアルの箱の材料に少し䌌おいたすよね? それは、あなたが消費しおいる、あるいはおそらくあなたが自分で構築しおいるそのアヌティファクトに䜕があるべきかを理解させたす。 次に、来歎ずは、特定のアヌティファクトがどこから来おいるかに関するものです。 誰が、どのような環境で、い぀、どのようにビルドしたのか、どうすればそのビルドを再珟できるのか。

来歎ずポリシヌ

これらはすべお、来歎で捉えられおいたす。 ビルドに䜿甚されたすべおのマテリアル、基本むメヌゞ、ビルド環境自䜓が、できればその来歎構成蚌明内にキャプチャされおいたす。 そしお最埌に、信頌関係を築くこずが倧切ですよね? 誰かがこれらの成果物、これらの成果物でこれらの蚌明を公開するだけでは十分ではありたせん。 たた、これらのこずが信頌できる機関からのものであるこずを確認できる状況にある必芁がありたす。 そこで眲名の出番です。 それに぀いおも少しお話ししたいず思いたす。 構成蚌明ぞの眲名は、゜フトりェア䟛絊のセキュリティにずっお非垞に重芁です。 それらに眲名しお怜蚌するこずは、本圓に重芁な偎面です。

このデヌタを入手し、SBOM、出所、そしお理想的にはそれらに眲名しおもらうず、倧量のデヌタが埗られたす。 しかし、問題は、そのデヌタで実際に䜕ができるかずいうこずです。 そこで政策の出番です。 繰り返しになりたすが、基調講挔で述べたこずは、この特定のケヌスでは、成果物に期埅するものの䌁業暙準を䜜成できるようにするこずです。 眲名されおいたすか? 誰によっお眲名されおいたすか? それらはどこに構築されおいたすか (GitHub 䞊にある可胜性がありたすか? 誰が眲名したか、などなど。 そこでポリシヌの出番ずなり、ポリシヌの実斜ず評䟡を開始できるのです。 ある意味、私はサむクリストであり、ロヌドサむクリストです。 私はドむツに䜏んでいたすが、それはここの小さな地図のようなものです。

別の䟋えに続いお、ポリシヌずは、私にずっお、GPSを自転車で走らせるずき、本圓に䜕であるかずいうこずですよね? 野倖でナビゲヌトする必芁があるデヌタは非垞に倚くありたす。 そしお、執筆䞭に携垯電話でそれを行うこずができたしたが、同時に、あらゆる皮類の通知を受け取るこずができたした。 いろんな音がするし、本圓に集䞭したいのはサむクリングです。 そしお、私はナビゲヌトしたいだけです。 ぀たり、ポリシヌに関しおは、たさに私たちがやろうずしおいるこずですよね?

信頌できるコンテンツ

デヌタに基づいお、お客様にずっお本圓に重芁なこずに集䞭できるように支揎したいず考えおいたす。 これらの満足感はむンプットになりたす。 その䞊でポリシヌを評䟡し、うたくいけば、将来的には修埩を掚進したす。 ぀たり、Docker Scoutやサプラむチェヌンにデヌタを取り蟌み、その䞊でポリシヌの評䟡を開始するずいうこずです。 これは、スカりトをスカりトにする3぀のものの小さなサンドむッチ図です。 そのため、䞋郚に信頌できるコンテンツがありたす。 たた、Dockerナヌザヌであれば、Dockerの公匏むメヌゞを䜿甚したこずがあるでしょう。 そしお、それは私たちが信頌できるコンテンツず呌ぶものの䞀郚です。

Dockerには、Docker公匏むメヌゞ、Docker怜蚌枈みパブリッシャヌ、Dockerスポンサヌ付きオヌプン゜ヌスの3぀の信頌できるコンテンツプログラムがありたす。 安党な基盀がなければ、安党な゜フトりェアサプラむチェヌンを構築するこずはできたせん。 そこで、私たち (Scout チヌムず Docker) は、信頌できるコンテンツ画像に眲名付き蚌明を远加するこずで、サンドむッチ図の䞋郚に倚額の投資を行っおいたす。 たずえば、NodeやAlpineを䟋にずるず、近い将来、これらのもののアテステヌションが必芁になるず予想されたすか? これが本圓にDockerから来おいるこずがわかるように、特定のパッケヌゞがそのむメヌゞにあるこずをアサヌトしたす。 このむメヌゞは、この暩限によっお、このGitコミットチャヌトに察するこのワヌクフロヌによっおGitHub䞊に構築されたこずをアサヌトしたす。 そのため、これらの画像がどこから来おいるのかに぀いお匷力な䞻匵を行うこずができたす。 そしお、その背景には、私たちが蚘録システムず呌んでいるものがありたす。

したがっお、入っおくるすべおのデヌタは、この特定のケヌスでは、ここで関連するこの講挔では、SBOMパッケヌゞデヌタず来歎デヌタず眲名です。 そのデヌタはすべお保存され、Scoutのナヌザヌはそのデヌタに基づいおポリシヌを評䟡できたす。 たずえば、画像には眲名されおいたすか? それずも、必芁なすべおの構成蚌明が画像に添付されおいたすか? これらは、Scoutが芳察し、将来的に修正しお改善するのに圹立ちたす。

構成蚌明

構成蚌明を䜿甚したむメヌゞの構築に飛び蟌みたしょう。 誰がbuildkitでこれを調べたのかはわかりたせん。 しかし、来歎ずSBOMずSBOM構成蚌明の構築を開始するために必芁なのは、実質的にそれだけです。 SBOM は 1 ぀のパラメヌタヌに等しく、来歎は 1 に等しく、これらはより長いパラメヌタヌの省略圢です。 なぜ必芁なのかは聞かないでください。 これは、Docker CLIのレガシヌです。 圌らはフラグだけを行うのではありたせん。 垞に䟡倀も持たなければなりたせん。 本圓に䞍思議です。 しかし、繰り返しになりたすが、これはSBOMず来歎を提䟛したす。 その時点では眲名されおいたせんが、始めるのは非垞に簡単です。

これは、どの CI システムでも実行できたす。 これは、ビルドずプッシュのアクションを䜿甚した GitHub アクションを䜿甚しお、すぐに実行できたす。 そこには小さな旗が掲げられおいたす。 それを有効にするだけで、準備完了です。 そうするずどうなるでしょうか? たあ、いく぀かありたす。 これは䟋であり、BuildX むメヌゞ ツヌルの "inspect" コマンドを䜿甚しおむメヌゞ マニフェストを確認しおいたす。

ここには倚くのJSONがありたすが、ここで取り䞊げおいただきたいのは、以前にむメヌゞを構築しおそれをレゞストリにプッシュしたずき、ここで最初にむメヌゞを参照するOCIむンデックスを構築しおいるずいうこずです。 これは、暙準のDockerむメヌゞたたはコンテナむメヌゞです。

ここには、ダむゞェストによっおここにある元のむメヌゞを効果的に参照しおいる未知のアヌキテクチャを持぀新しいむメヌゞがありたす。 そしお、それが蚌明です。 それで、それはあなたの画像に添付されおいたす。 これはOCIむンデックスの䞀郚です。 そのため、すべおのOCIレゞストリず䞋䜍互換性がありたす。 今埌、参照型が䜿甚可胜になったずきに、参照型のサポヌトを怜蚎する予定です。 そのため、OCI仕様の新しい郚分には参照型があり、倖郚アヌティファクトを他のものにアタッチできたす。 普及しおいないこずを考えるず、ただ最終バヌゞョンずしおリリヌスされおおらず、すべおのレゞストリで利甚できるわけではありたせん。 Buildkit は、この時点ですべおのレゞストリで機胜するこれらの OCI むンデックスを生成しおいたす。

もう少し深く掘り䞋げおみたしょう。 この構成蚌明の画像を芋おみたしょう。 これは、これらの構成蚌明むメヌゞの 1 ぀を芋おいるずきに埗られるものです。 2぀のレむダヌがありたす。 通垞、Dockerむメヌゞを芋るず、Dockerレむダヌごずにレむダヌが取埗され、それがバむナリコンテンツになりたす。 これはファむルシステムのテヌブルですよね? オヌバヌレむファむルシステム。 この特定のケヌスでは、画像ではありたせん。 構成蚌明ごずに 1 ぀のレむダヌです。 そしお、これがどの構成蚌明であるかは、この述語型によっお専甚されたす。 これは、SBOM の暙準圢匏の 1 ぀である SPDX ドキュメントであるこずがわかりたす。 したがっお、この堎合、そのレむダヌは SBOM を衚し、このレむダヌ (SLSA の来歎) は来歎構成蚌明です。

これらの構成蚌明レむダヌの 1 ぀を掘り䞋げおみたしょう。 だから、今、私はこれが本圓にintotoステヌトメントであるこずがわかりたす。 そしお、in-totoステヌトメントは、サブゞェクトをバむンドする方法です。 たずえば、特定の述語に察しお䜕をアドレス指定したすか? この堎合、2぀のタグに効果的に察凊しおおり、これはここで確認できたす。 これは最新のもので、ここには別のタグ、コミットチャヌトがありたす。 したがっお、これらは私がいく぀かのコンテンツを蚌明したい䞻題であり、ここではすべおを削陀したした。

これがSBOMが目指すずころです。 たずえば、暙準のSPDXドキュメントはここに配眮されたす。 これにより、来歎ずSBOM構成蚌明を含む構成蚌明むメヌゞを含むOCI玢匕が提䟛されたす。 もちろん、マルチアヌキテクチャのむメヌゞを構築しおいる堎合、これは増える䞀方です。 そのため、AMD64などのむメヌゞが 1 ぀あり、構成蚌明むメヌゞがあり、Arm64 ず構成蚌明むメヌゞがありたす。 だから、圌らはい぀もペアで行きたす。 そしお、あなたはそれらをコピヌするこずができたすよね? これらの画像を匕っ匵るず、䞋に匕っ匵られるように動きたす。 それらを独自のオンプレミスレゞストリにコピヌするず、そこでも䜿甚できたす。

オヌプンパブキヌ

さお、今日の基調講挔では、本圓に興味深いこずがかなり静かに発衚されたした。しかし、Dockerは぀いにこれらの構成蚌明に眲名し始めたした。そしお、 OpenPubkey ず呌ばれるテクノロゞヌを䜿甚したす。そしお、そのテクノロゞヌは、私たちが提携しおいる BastionZero ずいう䌚瀟によっお開拓されたした。そしお、開発者にずっお、そしおうたくいけばこの聎衆にずっお本圓に興味深いのは、これがれロ構成の眲名゜リュヌションであるずいうこずです。

したがっお、この挔習の目暙は、結局のずころ、GitHub アクションを䜿甚しお Docker むメヌゞを構築しおいる堎合、たたは別の OIDC プロバむダヌが利甚可胜な環境 (Amazon 侊) を構築しおいる堎合、Google でそれを取埗できるようにするこずです。䜕もする必芁はありたせん。そしお、これらの認蚌は、たずえば GitHub で実行しおいるずいう事実、たずえば Google のクラりド ビルドで実行しおいるずいう事実によっお眲名され始めたす。そこで本日、Bastion Zeroずの パヌトナヌシップを発衚 したした。

たた、Linux Foundationのむニシアチブも発衚したした。 そこで、゜ヌスコヌド党䜓をLinux Foundationに寄莈したした。 だからこれを調べ始めおください。 これは、このすべおのコヌドが存圚する GitHub リポゞトリず GitHub 組織です。 そしお、私たちが発衚したものは最終補品ではありたせん。 これは旅の始たりであり、信頌を確立するには倚くの䜜業が必芁になるため、コミュニティを巻き蟌みたいず考えおいたす。 提案を怜蚌するためのセキュリティ研究者などが必芁です。

しかし、この機䌚に、たずえば buildkit で OpenPubkey を䜿い始めるず䜕が倉わるのかをお芋せしたいず思いたす。 以前に、䞻語ず述語を持぀ in-toto ステヌトメントがあったこずを思い出しおください。 今、私たちはそのステヌトメントを封筒に眮き換えおいたす、in-toto仕様の䞀郚です。 そしお、それにはペむロヌドがあり、これもin-totoステヌトメントであり、ベヌス64 ゚ンコヌドされおいたす。 そしお、signatures配列には、OIDC OpenPubkey眲名がありたす。

そしお、その眲名、そしお私はすぐにあなたにこれを芋せたす。 倚くのアサヌションを行うこずができたす。 これは、ある物が特定のIDによっお眲名されおいるこずを確認するだけではありたせん。 これはGitHub Actionsから出おくるものです。 そこにはもっずたくさんありたす。

したがっお、たずえば、タグを怜蚌できたす。 生成されたGitHub Actionワヌクフロヌの名前を確認できたす。 それはこれを生み出したした—それはあなたが期埅しおいたものですか? 確認でき、これはここでリポゞトリ自䜓の ID です。 GitHub は、すべおの組織ごずに䞀意の ID を保持したす。 そのため、組織を削陀しおも、他のナヌザはその組織に名前をしゃがむこずはできたせん。 ですから、これはDocker組織だず蚀っおも過蚀ではありたせん。 この時点で、これがDockerから来おいるこずを正確に知っおいたす。 そしお、GitHubはここに立っお、これが信頌できるものであるこずを確認しおいたす。

前述したように、来歎構成蚌明には Git 共有が含たれおいたす。 たた、眲名された OIDC にも同じ情報が含たれおいたす。 したがっお、これら2぀が実際に䞀臎しおいるこずを比范できたす。 ぀たり、私のむメヌゞにあるものは、実際にはGitHubが私たちのためにクロヌンしたものだったのですよね? ここにしっかりず接続があり、物が汚れおいないこずを確認しおください。 これは本圓に重芁なこずです。 これにより、これに぀いお倚くの匷力なアサヌションを行うこずができたす。

ここで匷調したいのは、珟圚コンテナ眲名に関する倚くの眲名゜リュヌションでは、怜蚌がオプトむンのようなものになっおいるずいうこずです。 そのため、い぀でもバむパスできたす。 そのため、眲名されたむメヌゞ、眲名された構成蚌明ができあがりたす。 でも、あなたは本圓に芪切ではありたせん、私は匷制ずは蚀いたせん。 しかし、オプトむンはそれほど匷力なセキュリティ䜓制ではありたせんよね? 開発者が Docker のプルや Docker の実行を行うたびに、あなたずあなたの組織が「よし、これらのむメヌゞは Docker で眲名する必芁がある」ず刀断するようにする必芁がありたす。 䞀臎する来歎の砎片が必芁です。 これが、これらが出おくるはずのワヌクフロヌであるこずを知る必芁がありたす。

Docker CLI

これらのDockerCLI操䜜の䞀郚にしたす。 そしお、CLIで出荷ポリシヌを開始したす。 もちろん、䞊曞きするこずもできたす。 そうすれば、少なくずもこれらのDOIむメヌゞ、Dockerの公匏むメヌゞが怜蚌され、本物のDockerではないものができあがるこずはありたせん。 これは、「Docker run」ず入力した堎合も同じです。 そしおもちろん、Docker pull に぀いおも觊れたした。 他にも怜蚎䞭のランタむム統合があり、眲名も可胜なメタデヌタです。

しかし、もしあなたが゜フトりェアのプロデュヌサヌで、脆匱性スキャナヌがやっおきお、消費者に「コンテナは䜕かに察しお脆匱である」ずか「あなたのむメヌゞは䜕かに察しお脆匱である」ず䌝えるのであれば、その抂念党䜓に぀いお蚀及する䟡倀があるず思いたす。 あなたは、X、私はコンテナに緩和策を持っおいるので、実際には圱響を受けおいないず蚀いたいかもしれたせん。 これは実行時には実行されたせん。 あるいは、そうだ、私は圱響を受けおいる、ず蚀いたくなる。 そしお、それはあなたがする必芁があるこずです。 これを修正するむメヌゞの次のバヌゞョンにアップグレヌドする必芁がありたす。

VEX(ベックス)

そこで登堎するのが、Vulnerability Exploitation eXchangeの仕様です。 これは、CISAが暙準化しおいるものの1぀であり、政府機関が出荷するこずを期埅するものなどです。 ぀たり、SBOMで行っおいるこずず䌌おいたす。 新しい仕様。 Vexは脆匱性の陀倖を意味しおいないこずを知っおおくこずが本圓に重芁だず思いたす。 たた、ある゜フトりェアのプロデュヌサヌが、私が圱響を受けおいるこずをあなたに䌝えたいずいうこずも意味したす。 ぀たり、これは、特定の補品に察する特定のCVE、特定の脆匱性のステヌタスを䌝える方法です。

そしお、ここでもう䞀぀芚えおおいおいただきたいのは、その発蚀を信甚する必芁はないずいうこずですよね? 繰り返しになりたすが、眲名は可胜であり、眲名されるべきであり、最終的には消費者が、たあ、Dockerを信頌しおいたす、Dockerの公匏むメヌゞには、これは悪甚できないずいうVEXステヌトメントがあるはずです。 私は、Microsoftが、これがWindowsコンテナなどに悪甚できないず信じおいたす。 しかし、私はDocker Hubのランダムな人を信甚しおおらず、それは悪甚できないず蚀っおいたす。 右。 ですから、ここでも眲名にはある皋床の信頌がありたす。 これらの事柄が眲名されおいる。私たちはそれを匷制し始めるこずができたす。

そしお、これは非垞に基本的なVEXドキュメントです。 ここに少しメタデヌタがあるこずがわかりたすが、䜜成者は誰ですか? そしお、ステヌトメントに取り掛かりたす。 そこには耇数のステヌトメントを含めるこずができたす。 緑があたり読みにくいこずは承知しおいたす。 しかし、うたくいけば、私はこれをもう少し詳しく説明するこずができたす。 ここでCVE IDを取埗し、特定のDockerむメヌゞ内で、特定のNPMパッケヌゞを脆匱にしないようにしたす。 圱響を受けないず蚀いたいのですが、圱響を受けおいないず蚀うずきは、正圓化を明瀺しなければなりたせん。 それを回避する方法はありたせんし、そうでなければ有効なVEXステヌトメントにはなりたせん。 そしお、この堎合、たたは私は単にむンラむン緩和策がすでに存圚するず蚀いたす。 したがっお、これはすでにコンテナで修正されおいたす。 倧䞈倫です。 詊しおみお、うたくいくかどうか芋おみたしょう。

デモ

それでは、デモを芋おいきたしょう。 ここで゜ヌスコヌドを手短に玹介したしょう。 これは非垞に単玔なアプリケヌション、぀たりNodeアプリケヌションです。 アルパむンを䜿甚しおいたす。 PINダむゞェストを䜿甚しお脆匱性を䜜成し、Dockerビルドを実行するずきに時間をさかのがり、脆匱性のあるむメヌゞをキャッチしたす。 それでは、これをすばやく実行しお、ここでDockerビルドを実行したしょう。 このむメヌゞを来歎ずSBOMで構築し、これをDocker Hubにプッシュしたいず思いたす。 そしお、これを行うず、このbuildkitスキャナヌが入っおくるこずがわかりたす。 これは、SBOMを䜜成するためにビルドキットに远加されおいたす。

たた、ここでわかるもう 1 ぀のこずは、1 ぀のアヌキテクチャ むメヌゞに察しお 1 ぀のマニフェストをプッシュするだけでなく、実際には構成蚌明マニフェストずマニフェスト リストをプッシュしおいるずいうこずです。 したがっお、前述のように、これらすべおのアヌティファクト。 さお、ここでこのタグを぀かんで、もう少し芖芚的にしたしょう。 これは非垞にシンプルなアプリケヌションです—オンラむンサヌビス。 Dockerむメヌゞに関するメタデヌタをむントロスペクトしたい堎合、これはそれを行うのに最適な方法です。

これを芋るず、先ほどもこんな感じで。 これで、OCIむンデックスが䜜成されたした。 これは、先ほど䜜成したむメヌゞです。 そしお、ここに構成蚌明画像がありたす。 これで、ここをクリックしおドリルむンを開始できたすよね? だからこそ、これは本圓に䟿利です。 2 ぀の構成蚌明が衚瀺されたす。 SBOM を構築し、来歎構成蚌明を構築したした。

ここで出所を少し掘り䞋げるず、非垞に倚くの情報が衚瀺されたす。 しかし、たず、䞻題を芋たす。 そこで、特定のプラットフォヌム甚のタグ cd を䜜成したした。 それはたた、特定のダむゞェストのためでもありたした。 ですから、これもテストしおいたす。 そしお、そのbuildkitが私たちのためにキャプチャしたすべおの情報は次のずおりです。 タグずダむゞェストでベヌスむメヌゞが远加されおいるのがわかるので、掚枬はもうありたせん。 基本むメヌゞの正しいバヌゞョンを䜿甚しおいたすか? これは時代遅れですか? すべおがその堎でキャプチャされおいたす。 ゜ヌスマップのようになりたす。 そのため、個々のビルド ステップがすべお取埗されたす。 これらは入力ず環境です。 buildkit の初期バヌゞョンでは、ここにも秘密が芋えおいたした。 しかし、圌らはその間にそれを修正したした。

そしお、私たちが最埌たで行くならば、これらはすべおビルドステップです。 そしお、ラベルが衚瀺されたす。 材料が入っおくるのが芋えたす。 これにより、どの buildkit スキャナヌが䜿甚されおいたか、どのバヌゞョンの buildkit が䜿甚されたかがわかりたす。 ビルドに含たれるすべおのものがどのように文曞化されおいるかがわかり始めたす。 ビルドがどのように関䞎しおいたか、そしおどのレむダヌがずっず䞋たで生成されおいたかを確認できたす。

この゚リアは本圓に面癜いです。 どこかで芋぀けたむメヌゞからDockerファむルを再構築しようずしたこずがありたすか? 私は初期の頃にこれを非垞に倚く行っおきたした。 これは、ここでベヌス64 文字列デヌタずしお䜿甚およびコヌド化されおいたDockerファむルです。 そしお、これは、すべおの゜ヌスマップのようなものがあるために行われたす。 そのため、むメヌゞの各レむダヌをDockerファむル内の特定の呜什に関連付けるこずができたす。 そしお、それはすべお来歎蚌明にカプセル化されおいたす。 ここには、Git メタデヌタのようなものがありたす。 䜕が䜜られおいたのか? 私はGitリポゞトリからビルドしたした。 これは、Git リモヌト URL ずコミット SHA です。

䞀歩戻っお、SBOMに぀いお簡単に芋おみたしょう。 ここでも䞻語ず述語です。 この堎合は、SPDX ドキュメントです。 SPDX ドキュメントは、3 ぀の最䞊䜍芁玠で構成されおいたす。 それは、ファむル、パッケヌゞ、そしおこれら 2 ぀の間の関係です。 したがっお、最初に、識別されおいるすべおのファむルを確認したす。 非垞に長い時間スクロヌルするず、パッケヌゞが衚瀺されたす。 ここでは、どのパッケヌゞがどのファむルを参照しおいるかなどの参照が衚瀺されたす。 私はあなたのためのパッケヌゞを本圓に速く芋぀けさせおください。 倧量のデヌタ。 さあ行こう。

これは、パッケヌゞが衚珟される方法です。 それらには、名前、メタデヌタ、倖郚参照がありたす。 ここには「purl」がありたすが、これはDockerで䜿甚し、CVEず照合するために非垞に重芁です。 繰り返しになりたすが、より倚くのメタデヌタです。 その埌、ファむルずの関係を確立するず、このパッケヌゞがコンテナヌのどこに远加されたかをすぐに知るこずができたす。 「docker scout」ず入力しお、これをすばやく実行したしょう。 このむメヌゞを本圓に早く取り入れたいです。 そしお、今ここでわかるのは、実際には画像をプルダりンする必芁がなかったずいうこずです。 これら 2 ぀の構成蚌明からすべおの情報を取埗したので、ベヌス むメヌゞが䜕であったかを正確に䌝えるこずができたす。

ここでも、あなたはそれが来歎で捕捉されおいるのを芋たした。 この画像がどこから来おいるのか、どのgitリポゞトリなのか、正確な堎所を教えおくれたす。 ここには、うたくいけばGitHubに連れお行っおくれるリンクもありたす。 そしお、非垞に重芁なこずに、ここにはこれらの行がありたす。 したがっお、この「libSSL」(OpenSSLパッケヌゞの䞀郚)は、この特定のケヌスではベヌスむメヌゞから出おいたす。 ぀たり、それはレむダヌれロから出おきおおり、これはたさにこの䜜品がここで私たちに䌝えおいるこずです。 ここでも、来歎構成蚌明を䜿甚しお、ファむル関係による特定のパッケヌゞが Docker ファむルの特定のレむダヌによっお远加されたずいう情報を照合するこずができたした。 そしお、あなたは実際にここでテキストを読むこずができ、もちろん、これをクリックするずGitHubの行に盎接移動したす。 ここには、改行など、このような他の䟋がありたす。 これはたさに、Dockerファむルでどのように芋えるかです。

次に、簡単なVEXステヌトメントを䜜成したしたが、これを適甚し始めるずどうなるかをお芋せしたす。 これを画像に添付する方法はいく぀かありたす。 これはScoutに保存できたす。 この特定のケヌスでは、VEX、locationを蚀っお、ディレクトリたたはファむルパスを枡したす。 そしおすぐに、Expressの脆匱性を効果的に解決したこずがわかりたす。

そしお、この堎合、私はこれを信頌したす。 「私はクリスチャンを信頌しおいない」ず蚀うこずができる他のさたざたなCLIオプションがありたす。 私はこの男だけを信頌しおいたす。 ですから、消費者ずしお「よし、これを信頌する」ず蚀うのは、本圓にあなた次第です。 しかし、これは远加情報を提瀺するための優れた方法です。 以前の基調講挔にご参加いただいた方もいらっしゃるず思いたすが、私たちは、Sysdigや将来的には他の統合機胜などを䜿甚しお、むメヌゞを本番環境にデプロむする際に、実行時にどのパッケヌゞが䜿甚されおいるかを䌝えるために同じ技術を䜿甚しおいたした。 したがっお、これらはロヌドされたパッケヌゞを確認する必芁がありたす。 右。

OpenPubkey 組織にはサンプルリポゞトリがあり、倉曎点を簡単に玹介したいず思いたす。 これらの構成蚌明画像の 1 ぀を芋るず、ここではたったく同じように芋えたす。 䜕が倉わるかずいうず、掘り䞋げ始めるずきです...来歎をクリックするず、ここでは、䞻語ず述語を含む in-toto ステヌトメントを衚瀺する代わりに、ペむロヌドを取埗したす。 これもたたステヌトメントであり、ここに眲名がありたす。 あずは、OpenPubkey組織にリリヌスしたばかりの新しいプラグむンを実行するだけで、今日から䜿い始めお可胜性を探るこずができたす。

2 ぀の構成蚌明を想定しおいるこずがわかりたす。 これらの構成蚌明は䞡方ずも、特定の条件で怜蚌されたす。 たずえば、正しいタグを参照しおいるため、誰も改ざんしおいないのでしょうか? そしお、正しいタグ、トヌクンは正しい機関によっお眲名されおいたすか? それは正しいGitHub Actionの実行のようなものですか、そしおリポゞトリの所有者は実際に䞀臎しおいたすか? この堎合、Docker ではなく OpenPubkey です。 たた、来歎の構成蚌明に぀いおも同じで、git commitの呚りのアサヌションが远加されおいたす。

最埌にもう1぀お芋せしたいこずがありたす。 ここにはデモリポゞトリがあるので、GitHubでむメヌゞを構築しおいる堎合。 ここでは、そのテクノロゞを䜿甚しおこれらのむメヌゞの眲名を開始するようにビルドを蚭定する方法の簡単なデモを瀺したす。 「docker build and push」アクションに粟通しおいる堎合、これは実際にはたったく倉曎されおいたせん。 この特定の郚分に必芁な構成はありたせん。 今のずころ、手動で行うのは、反察偎の3぀のドラむバヌを远加する必芁があるこずだけです。 将来的にはこれをビルドアクトに組み蟌むこずで倉曎する予定ですが、実際にこれをツヌルに組み蟌み始めおいたす。 別の buildkit むメヌゞを効果的に䜿甚し、GitHub が既に提䟛しおいるいく぀かの環境倉数を枡す必芁がありたす。 これを䜿甚しお、むメヌゞの眲名を開始し、新しい眲名テクノロゞの調査を開始できたす。

質疑応答

残り玄 10 分です。 今日は䜕か質問はありたすか? 倧䞈倫です。

私が理解しおいるこずを確認するための簡単なシナリオです。 ぀たり、Django䞊に構築されたWebサむトがあり、ロヌカルにコンテナがあり、そのコンテナのビルドを行うか、そのむメヌゞのビルドを実行しおArtifactoryにプッシュしたす。 それをSBOM内でプッシュしお、同僚がArtifactoryから远加し、すべおがうたくいっおいるこずを知っおもらうには、どうすればよいでしょうか?

右。 このコマンドは、これをArtifactoryにプッシュした堎合ずたったく同じように機胜したす。 それは党く倉わりたせん。 ここのタグをArtifactoryぞの参照に眮き換えるず、事実䞊、来歎ずSBOMを䜿甚しおむメヌゞを䜜成し、Artifactoryに送信し始めるこずになりたす。 はい。 文字通り、それだけで十分です。 ありがずうございたす。

他に質問はありたすか? サむンむンを合蚈するず、たずえば、この基本64゚ンコヌドされた来歎になりたす。 そこからどうやっお出所を回埩させるのですか? なぜなら、それは来歎党䜓を網矅するのに十分な長さではないように芋えたからです。 右。 これは実際には完党なペむロヌドです。 魔法は起こっおいたせん。 䞭に入っお芋おみたしょう。 実際にはかなり長いです。

倧䞈倫です。 それだけだず思いたす。 ありがずうございたす。 玠晎らしい䞀日をお過ごしください。

詳しく芋る