Slide 1

Slide 1 text

KubeCon + CNCon North America 2022 Recap セッション マニフェスト署名とソフトウェアサプライチェーンセキュリティ - "Trust But Verify: Bringing Supply Chain Integrity To CD GitOps" (Kubecon NA) - "Policy-Based Governance For End-to-End Integrity Control of Policies" (SecurityCon) - "Securing Kubernetes Manifests with Sigstore and Kyverno" (SigstoreCon) 渡邊 裕治 (⽇本IBM)

Slide 2

Slide 2 text

⾃⼰紹介 • 渡邊 裕治 (わたなべゆうじ), IBM研究員, STSM • Cloud securityに関する研究プロジェクトのリード • いくつかのOpen Sourceプロジェクトのメンテナーをしてます。 • Sigstoreマニフェスト署名 (https://github.com/sigstore/k8s-manifest-sigstore) • ArgoCD Interlace (https://github.com/argoproj-labs/argocd-interlace) • Ansible Risk Insgiht (https://github.com/ansible/ansible-risk-insight)

Slide 3

Slide 3 text

ArgoCD Kyverno Software Supply Chainセキュリティに関して3件の発表をしました

Slide 4

Slide 4 text

エンドツーエンドのサプライチェーン source build package deliver maintain use

Slide 5

Slide 5 text

アプリをクラスターにデプロイする Registry CI Pipeline Git Repo Git Repo (Source) Manifest Image CD Pipeline Image Application Cluster build & package deploy & maintain アプリをデプロイする際にイメージとマニフェストが⽤いられる

Slide 6

Slide 6 text

デリバリー時のインテグリティの課題 Registry CI Pipeline Git Repo Git Repo (Source) Manifest Image CD Pipeline Image Application Cluster build & package deploy & maintain イメージの改ざん YAMLマニフェストの 改ざん デプロイした後の マニフェストの改 ざん

Slide 7

Slide 7 text

サプライチェーンのインテグリティ保護 Registry CI Pipeline Git Repo Git Repo (Source) Manifest Image CD Pipeline Image Application Cluster build & package deploy & maintain インテグリティを保護するために・・・

Slide 8

Slide 8 text

サプライチェーンのインテグリティ保護 Registry CI Pipeline Git Repo Git Repo (Source) Manifest Image CD Pipeline Image Application Cluster build & package deploy & maintain SIG SIG SIG SIG SIG SIG SIG インテグリティを保護するために・・・ イメージの署名 +YAMLマニフェストの署名

Slide 9

Slide 9 text

Controller Current State Desired State Kubernetes リソースマニフェスト • Kubernetesは declarativeな構成管理シ ステム • ユーザは、desired stateをYAMLでGitレ ポなどに定義します。 • Kubernetesのコントローラーはdesired stateになるようにシステム構成を管 理します。

Slide 10

Slide 10 text

YAMLマニフェスト署名 kubectl sigstore sign -f test-deployment.yaml -k cosign.key

Slide 11

Slide 11 text

k8s-manifest-sigstore https://github.com/sigstore/k8s-manifest-sigstore k8s-manifest-sigstore • Kubernetesリソースのマニフェスト署名・検 証のためのCLIとライブラリ • Sigstoreのcosignに基づく (Sigstore =署名・検証によるソフトウェアの保 護に向けたオープンソースプロジェクト) • YAML署名・検証のロジックを提供 • 署名をアノテーションとして添付

Slide 12

Slide 12 text

Kyverno • Kubernetesネイティブなポ リシーエンジン • PolicyもReportもKubernetes リソース • Kubernetesリソースの検 証・変更・⽣成が可能

Slide 13

Slide 13 text

k8s-manifest-sigstore CLI https://github.com/sigstore/k8s-manifest-sigstore Kyverno Kyverno Policy rules: validate: manifests: K8s resource K8s resource kubectl sigstore sign -f cm.yml --key cosign.key Signature check K8s-manifest-sigstore マニフェストを保護する • YAMLリソースを Sigstore CLIで署名する • Kyvernoを使ってリソースの署名を検証する (v1.8.0から有効) https://youtu.be/NsuhabTaJTE

Slide 14

Slide 14 text

HTTP Handler Authn / Authz Mutating Admission Validating Admission Schema Validation etcd API Request Kyverno Webhooks Webhooks Webhooks Mutation 課題: アドミッション制御による変更

Slide 15

Slide 15 text

Kyverno K8s-manifest-sigstore Admission request 1. Decode message (original YAML) 2. Create a dry-run request using original YAML Dry-run 3. Compare the inserted attributes and compute expected diffs Webhooks Webhooks Webhooks Mutation API Request DRY-RUNによる変更自動チェック

Slide 16

Slide 16 text

マルチクラスター管理のポリシーの インテグリティを保護する ハブ・クラスター Policy Policy Policy sig 管理対象クラスター Policy Policy 署名されたポリ シーのみ有効 Admission Control Policy Admission Control ポリシーが署名なし で変更されたらブ ロック apply apply apply 署名 Policy Policy Policy Kyverno Integrity Shield https://youtu.be/1grSrQ2daxI

Slide 17

Slide 17 text

マニフェストのビルド(kustomize) ソースファイル kustomize build | kubectl apply -f - kubectl apply –k ⽣成された マニフェスト テンプレート パラメータ 外部依存ファ イル

Slide 18

Slide 18 text

Git Repo 課題︓⽣成されたマニフェストに署名がない • デプロイする⼈はソースをチェックできるが、マニフェストを 受け取ったクラスター側で保護ができない。 ソースファイル 署名する⼈ デプロイ する⼈ クラスタ Admission Control Verify / Build / Deploy SIG kubectl apply –k ⽣成された マニフェスト

Slide 19

Slide 19 text

CD GitOps Git Repo ソースファイ ル 署名する⼈ クラスタ Admission Control SIG CDエンジン Build Deploy ⽣成されたマ ニフェスト GitOps ⾃動同期 ソースと 異なる 署名がない

Slide 20

Slide 20 text

CD GitOpsにおけるマニフェストの課題 Git Repo Source Materials Signer Cluster Admission Control SIG CD Build Deploy ⽣成されたマ ニフェスト Q1. ソースの署名は検 証されたか︖ Q3. ビルドは適切に⾏われ たか︖ Q4. マニフェストは改ざ んされていないか︖ Trust, so not verify Q2. 依存する外部ソースは正し く利⽤されたか︖

Slide 21

Slide 21 text

処理内容(プロベナ ンス)の記録 Interlace – "trust but verify" アプローチ Git Repo Source Materials Signer Cluster Admission Control SIG ArgoCD Build Deploy ⽣成されたマ ニフェスト Interlace マニフェストへの署名付与 ソースの 署名検証 Interlaceは、より強固なインテグリティ検証のた めにArgoCDのGitOps同期を機能拡張します。 SIG https://youtu.be/dcCbtYrbjzE

Slide 22

Slide 22 text

ArgoCD Interlace • ArgoCDではApplicationカスタムリソースに基づいてGitOps Syncを管理します。 • ArgoCDはソースのGitレポを監視し、変更を⾃動的にターゲットクラスタへ反映します。 • Interlaceは、そのSyncイベントを検出し、ソース検証・マニフェスト署名・プロベナンス⽣成を⾏います。 https://github.com/argoproj-labs/argocd-interlace Application CR Application CR Application CR ArgoCD Interlace Controller updates (source git repo, rev, commit, resources, etc.) Provenance Store (e.g. Rekor) Publish manifest build info as provenance record Git Repo status status status ArgoCD API verify Target Cluster Signature Resources OCI Registry OCI Artifact (manifest) Signature package & sign Interlace Profile application selector Interlace Profile get manifest s from API Admission Control https://github.com/argoproj-labs/argocd-interlace

Slide 23

Slide 23 text

Thank you! Q & A Resources Interlace - https://github.com/argoproj-labs/argocd-interlace Manifest Signing - https://github.com/sigstore/k8s-manifest-sigstore Integrity Shield - https://github.com/stolostron/integrity-shield Kyverno - https://github.com/kyverno/kyverno Ansible Risk Insight - https://github.com/rurikudo/ansible-risk-insight Yuji Watanabe twitter.com/ywatan1 linkedin.com/in/yuji-watanabe-0108322/ github.com/yuji-watanabe-jp