コサインとdistrolessなイメージでコンテナを確保する方法
12659 ワード
コンテナ技術と用語「コンテナイメージ」は、多くの開発者、SRESとdevopsエンジニアのために新しくありません.しかし、生産展開のために安全なコンテナイメージを持つ必要は、我々が本当に最近必要とする何かです.我々は、バックドアを挿入することによって、Solarwindコマーシャルアプリケーションの最近のソフトウェアサプライチェーン攻撃を見ました.顧客がSolarWiseアプリケーションからトロイの木馬インストールパッケージをダウンロードすると、攻撃者はSolarWise製品を実行しているそれらのシステムにアクセスできます.このポストでは、私たちは、より安全にあなたのアプリケーションコンテナを生産して、実行するのを助けることができるCosignとdistrolessなコンテナイメージについて議論します.
どのようなディストリビュレスコンテナ画像ですか?
distrolessなコンテナイメージは「言語に集中したDocker画像、オペレーティングシステムをマイナス」です.これは、通常のOSパッケージマネージャ、Linuxシェルや標準的なLinuxディストリビューションで通常期待されるようなプログラムではなく、アプリケーションと実行時の依存関係だけを含んでいることを意味します.distrolessベースのイメージは、それらの対応するより小さいパッケージを持ちます.このことは攻撃面を減少させ、脆弱性のある部品が少なく、セキュリティが向上する.
ソースhttps://github.com/GoogleContainerTools/distroless
distrolessコンテナイメージの利点: コンテナのセキュリティを向上させます. コンテナサイズを減らします. コンプライアンス範囲を減らします. コンテナ配布パフォーマンスを改善します. より少ない資源を利用することによるコスト効率
Coサイン検証と一緒にアプリケーションのためのdistrolessコンテナ画像
COSIGNは、SigStoreと呼ばれるLinux財団プロジェクトとのコラボレーションで、Googleによって開発されたツールです.Googleは、distrolessなイメージが現在Cosignによって署名されると発表しました.したがって、これはdistrolessのすべてのユーザーが実際に彼らが意図したベースイメージを使用していることを確かめることができることを意味します.
ワークフロー
なぜ我々は不要なコンテナ画像と共にコサインを必要とするのですか?
CoSignの必要性は、distrolessなイメージでさえ、Typosquatting攻撃、または悪意のあるイメージを受けているような若干のセキュリティ脅威に直面する機会があります.distrolessビルドプロセスが妥協している場合、それは誤って実際のdistroless画像の代わりに悪意のある画像を使用してユーザーに脆弱になります.
Typosquattingは、ソーシャル・エンジニアリング攻撃の一種で、攻撃者が悪意のあるパッケージをレジストリに公開し、ユーザを騙してパッケージやレジストリ/ドメインの類似名をインストールすることを望んでいます.
Cosignとdistrolessなイメージでアプリケーションコンテナイメージを構築する方法?
COSIGN検証でdistrolessコンテナベースイメージを確認します.
無損失画像GCRの検証Socisherで共有されています.これは画像構築プロセスの第一歩です.
Cosign検証されたdistlessなベース画像を使用してアプリケーションのコンテナイメージを構築する
アプリケーション画像をdistrolessなコンテナ画像として構築するための2、3のアプローチがある. ソースコードからアプリケーションを構築するには、それぞれのビルドツールを使用します.その後、Dockerディレクティブを使用して、コピーまたは追加して、ビルドされたアーティファクトをコピーまたは追加してDocker画像を構築します. マルチステージのDockerビルド. 私はここで複数のシナリオについては、ここで私はどこに静的なdistrolessイメージと標準的なベースイメージを見つけることができる私のHello World Go WebアプリのためのDockerコンテナイメージを構築している. アプリケーションイメージGCRを内蔵.マルチステージビルドプロセスにおけるベースイメージとしてのIO/distroless/static
アプリケーションイメージゴランと構築:1つのステージビルドプロセスで1.15.
Ubuntuでビルドされたアプリケーションイメージ:21.04マルチステージビルドプロセスでベースイメージとして.
コンテナ画像走査:distrolessなコンテナイメージ対標準的な容器イメージ
私はDockerパッケージの新しいバージョンで利用可能なDynkと呼ばれるネイティブのスキャンツールを使用している.Dockerコマンドを使用してこのユーティリティを使用できます.
イメージスキャンレポート
静的無損失ベース画像
Numとしての標準のベースイメージ
Ubuntuとしての標準ベースイメージ
チェックインローカルdistroless:ローカルのdistrolessをテストしているV 1 .組織: JesWinjknPackage Manager : Lung . DeProjectの名前: DockerイメージとローカルdistrolessDockerイメージ:ローカルdistroless : V 1プラットフォーム: Linux/AMD 64ライセンス✔ 既知の問題に対する3つの依存関係をテストしました.
ローカル標準:V 1テストローカルローカル:V 1 ...組織:JesWinjknPackage Manager : DeadProject名: Docker Image Count Local StandardDocker Image : Local Standard : V 1 Platform : Linux/AMD 64ライセンス:既知の問題に対応する200の依存関係、169の問題を発見しました.
ローカルのUbuntuをテストします.組織: JesWinjknPackage Manager : DeadProjectの名前: DockerイメージHand Local Ubuntudockerイメージ:ローカルUbuntu : V 1プラットフォーム: Linux/AMD 64ライセンス:既知の問題に対応する103の依存関係について、12の問題を発見しました.
注:参照からSynkスキャンの完全なレポートを見つけることができます.
CoSignを使用して構築されたアプリケーションのないコンテナコンテナーに署名します.
コーサインキーペアを生成する
生成された秘密キーでリモートコンテナーイメージに署名します.
生成されたCosign公開キーでアプリケーションコンテナイメージを確認します
キーポイント distroless言語指向のDocker画像、マイナスのオペレーティングシステムです. パッケージを少なくして、脆弱性を持つ機会が少ない.distrolessなイメージは、必要なパッケージだけを持ちます. 不機嫌なイメージは現在契約されます. 各ビルド前にCoSign公開キーですべてのdistrolessイメージを確認します. コンテナイメージのスキャンは、あなたのCICDのビルドシステムを持っている必要があります. ベースのアプリケーションイメージは、ベースのdistrolessイメージから構築し、イメージの信頼を確保するために生産でそれを使用する前に確認します. このブログの記事を読んで楽しんでください.あなたがより多くから我々を聞くのが好きであるならば
参考文献 https://security.googleblog.com/2021/05/making-internet-more-secure-one-signed.html https://snyk.io/blog/typosquatting-attacks https://github.com/sigstore/cosign#generate-a-keypair https://www.cisecurity.org/solarwinds/ フルイメージスキャンレポート:https://github.com/JESWINKNINAN/distroless-go-instrumented/tree/main/internal/scan-reports
どのようなディストリビュレスコンテナ画像ですか?
distrolessなコンテナイメージは「言語に集中したDocker画像、オペレーティングシステムをマイナス」です.これは、通常のOSパッケージマネージャ、Linuxシェルや標準的なLinuxディストリビューションで通常期待されるようなプログラムではなく、アプリケーションと実行時の依存関係だけを含んでいることを意味します.distrolessベースのイメージは、それらの対応するより小さいパッケージを持ちます.このことは攻撃面を減少させ、脆弱性のある部品が少なく、セキュリティが向上する.
ソースhttps://github.com/GoogleContainerTools/distroless
distrolessコンテナイメージの利点:
Coサイン検証と一緒にアプリケーションのためのdistrolessコンテナ画像
COSIGNは、SigStoreと呼ばれるLinux財団プロジェクトとのコラボレーションで、Googleによって開発されたツールです.Googleは、distrolessなイメージが現在Cosignによって署名されると発表しました.したがって、これはdistrolessのすべてのユーザーが実際に彼らが意図したベースイメージを使用していることを確かめることができることを意味します.
ワークフロー
なぜ我々は不要なコンテナ画像と共にコサインを必要とするのですか?
CoSignの必要性は、distrolessなイメージでさえ、Typosquatting攻撃、または悪意のあるイメージを受けているような若干のセキュリティ脅威に直面する機会があります.distrolessビルドプロセスが妥協している場合、それは誤って実際のdistroless画像の代わりに悪意のある画像を使用してユーザーに脆弱になります.
Typosquattingは、ソーシャル・エンジニアリング攻撃の一種で、攻撃者が悪意のあるパッケージをレジストリに公開し、ユーザを騙してパッケージやレジストリ/ドメインの類似名をインストールすることを望んでいます.
Cosignとdistrolessなイメージでアプリケーションコンテナイメージを構築する方法?
COSIGN検証でdistrolessコンテナベースイメージを確認します.
無損失画像GCRの検証Socisherで共有されています.これは画像構築プロセスの第一歩です.
$ cosign verify -key publisher-shared-cosign-pub.key gcr.io/distroless/static
Verification for gcr.io/distroless/static --The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key - Any certificates were verified against the Fulcio roots.{"critical":{"identity":{"docker- reference":"gcr.io/distroless/static"},"image":{"docker-manifest-digest":"sha256:c9320b754c2fa2cd2dea50993195f104a24f4c7ebe6e0297c6ddb40ce3679e7d"},"type":"cosign container image signature"},"optional":null}
Cosign検証されたdistlessなベース画像を使用してアプリケーションのコンテナイメージを構築する
アプリケーション画像をdistrolessなコンテナ画像として構築するための2、3のアプローチがある.
FROM golang:1.15 as builder
COPY . /usr/local
WORKDIR /usr/local/
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -tags netgo -ldflags '-w -extldflags "-static"' -o cmd/app
FROM gcr.io/distroless/static
USER nonroot:nonroot
COPY --from=builder --chown=nonroot:nonroot /usr/local/cmd/app /bin/app
ENTRYPOINT ["/bin/app"]
FROM golang:1.15 as builder
COPY . /usr/local
WORKDIR /usr/local/
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /bin/app
ENTRYPOINT ["/bin/app"]
FROM golang:1.15 as builderstage
COPY . /usr/local
WORKDIR /usr/local/
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o cmd/app
FROM ubuntu:21.04
COPY --from=builderstage /usr/local/cmd/app /bin/app
ENTRYPOINT ["/bin/app"]
あなたのアプリケーションのためのdistrolessベースの画像を使用するの重要性を識別する次のトピックでDockerのスキャンレポートの詳細を見つけることができます.コンテナ画像走査:distrolessなコンテナイメージ対標準的な容器イメージ
私はDockerパッケージの新しいバージョンで利用可能なDynkと呼ばれるネイティブのスキャンツールを使用している.Dockerコマンドを使用してこのユーティリティを使用できます.
イメージスキャンレポート
静的無損失ベース画像
Numとしての標準のベースイメージ
Ubuntuとしての標準ベースイメージ
チェックインローカルdistroless:ローカルのdistrolessをテストしているV 1 .組織: JesWinjknPackage Manager : Lung . DeProjectの名前: DockerイメージとローカルdistrolessDockerイメージ:ローカルdistroless : V 1プラットフォーム: Linux/AMD 64ライセンス✔ 既知の問題に対する3つの依存関係をテストしました.
ローカル標準:V 1テストローカルローカル:V 1 ...組織:JesWinjknPackage Manager : DeadProject名: Docker Image Count Local StandardDocker Image : Local Standard : V 1 Platform : Linux/AMD 64ライセンス:既知の問題に対応する200の依存関係、169の問題を発見しました.
ローカルのUbuntuをテストします.組織: JesWinjknPackage Manager : DeadProjectの名前: DockerイメージHand Local Ubuntudockerイメージ:ローカルUbuntu : V 1プラットフォーム: Linux/AMD 64ライセンス:既知の問題に対応する103の依存関係について、12の問題を発見しました.
注:参照からSynkスキャンの完全なレポートを見つけることができます.
CoSignを使用して構築されたアプリケーションのないコンテナコンテナーに署名します.
コーサインキーペアを生成する
$ cosign generate-key-pair
Enter password for private key:
Enter again:
Private key written to cosign.key
Public key written to cosign.pub
レジストリの詳細とローカルレジストリのイメージをタグ付けし、リモートレジストリにプッシュする必要があります.生成された秘密キーでリモートコンテナーイメージに署名します.
$ cosign sign -key cosign.key jeswinkninan/distroless:v1
Enter password for private key:
Pushing signature to: index.docker.io/jeswinkninan/distroless:sha256-41fd2ec0997d91c5df7c7d58d0a2433a5744119d79a803123541cdd2b0e93f08.sig
生成されたCosign公開キーでアプリケーションコンテナイメージを確認します
$ cosign verify -key cosign.pub jeswinkninan/distroless:v1
Verification for jeswinkninan/distroless:v1 --
The following checks were performed on each of these signatures:
- The cosign claims were validated
- The signatures were verified against the specified public key
- Any certificates were verified against the Fulcio roots.
{"critical":{"identity":{"docker-reference":"index.docker.io/jeswinkninan/distroless"},"image":{"docker-manifest- digest":"sha256:41fd2ec0997d91c5df7c7d58d0a2433a5744119d79a803123541cdd2b0e93f08"},"type":"cosign container image signature"},"optional":null}
キーポイント
参考文献
Reference
この問題について(コサインとdistrolessなイメージでコンテナを確保する方法), 我々は、より多くの情報をここで見つけました https://dev.to/jeswinkninan/how-to-secure-containers-with-cosign-and-distroless-images-420fテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol