kubenews#57 Cloud Nativeなニュース - プロダクト紹介縛り
本記事はkubenewsの第57回目のゲスト枠で参加するRyuSAのコンテンツです。
なお、本登壇および本記事はあくまで 私自身の見解 であり、私の所属団体・企業における立場、戦略、意見を代表するものではありません。
Markdoc
Stripe社の公開したドキュメントをMarkdownで書くためのOSSです。利用できるMarkdownはGitHub Flavored……でありつつも一部AsciiDoc的に似た拡張を使ってドキュメントを記述できます。そのため多くのエンジニアが普段から書き慣れているMarkdownを使ってドキュメントのメンテナンスを行うことができます。
--- title: What is Markdoc? --- # {% $markdoc.frontmatter.title %} {% #overview %} Markdoc is a Markdown-based syntax and toolchain for creating custom documentation sites. Stripe created Markdoc to power [our public docs](http://stripe.com/docs). {% callout type="check" %} Markdoc is open-source—check out its [source](http://github.com/markdoc/markdoc) to see how it works. {% /callout %} ## How is Markdoc different? Markdoc uses a fully declarative approach to composition and flow control, where other solutions… [Read more](/docs/overview). ## Next steps - [Install Markdoc](/docs/getting-started) - [Explore the syntax](/docs/syntax)
またNext.jsやReactなどと組み合わせて複雑なビルドやレイアウトのごにょごにょができたりと、拡張の方法はかなり自由のため社内WikiのGit管理などに使えるような気がします。
Talos Linux
Kubernetes"専用"のOS……え??専用???となりますがそんな不思議なOSがTalos Linux。このLinuxディストリビューションはコンテナ向けOSLinuxのひとつで、特にKubernetesを起動/運用するためのものです。OSにSSHすることはできず、設定はすべてはtalosctl
を使ったAPI経由で行うことになります。
Talos LinuxはDockerで起動することが可能で、手元でサクッと動作検証することができます。
個人的に好みなのは、このOS自体がメモリ上で展開できるためサーバーがステートフルになることを防ぐことができます。PXEブートなどにも当然対応しているため、Raspberry Piなどが活躍するワークロード(IoTや誤自宅勢とか)にはとても便利なんじゃないかなと思います。
trivy
超便利だったので共有したい、というだけ……
23:22:35 ryusa@TUNA-KAN:~/develop/local/kubenews#57 $ trivy kubernetes --report summary cluster 2022-07-13T23:22:54.708+0900 INFO Need to update DB 2022-07-13T23:22:54.708+0900 INFO DB Repository: ghcr.io/aquasecurity/trivy-db 2022-07-13T23:22:54.708+0900 INFO Downloading DB... 32.96 MiB / 32.96 MiB [---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------] 100.00% 19.91 MiB p/s 1.9s 141 / 141 [----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------] 100.00% 7 p/s Summary Report for admin@talos-default ┌─────────────┬──────────────────────────────────────────────────────────────┬────────────────────┬────────────────────┬───────────────────┐ │ Namespace │ Resource │ Vulnerabilities │ Misconfigurations │ Secrets │ │ │ ├───┬───┬───┬────┬───┼───┬───┬───┬────┬───┼───┬───┬───┬───┬───┤ │ │ │ C │ H │ M │ L │ U │ C │ H │ M │ L │ U │ C │ H │ M │ L │ U │ ├─────────────┼──────────────────────────────────────────────────────────────┼───┼───┼───┼────┼───┼───┼───┼───┼────┼───┼───┼───┼───┼───┼───┤ │ kube-system │ Role/system::leader-locking-kube-scheduler │ │ │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ kube-system │ Role/system::leader-locking-kube-controller-manager │ │ │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ kube-system │ Deployment/coredns │ 1 │ 1 │ │ │ │ │ │ 3 │ 5 │ │ │ │ │ │ │ │ kube-system │ DaemonSet/kube-flannel │ │ 6 │ 8 │ 6 │ 2 │ │ 2 │ 9 │ 30 │ │ │ │ │ │ │ │ kube-system │ Role/system:controller:cloud-provider │ │ │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ kube-system │ Role/system:controller:token-cleaner │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ │ kube-system │ Role/system:controller:bootstrap-signer │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ │ kube-system │ DaemonSet/kube-proxy │ 6 │ 8 │ 2 │ 57 │ │ │ 2 │ 4 │ 10 │ │ │ │ │ │ │ │ kube-system │ Service/kube-dns │ │ │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ kube-public │ Role/system:controller:bootstrap-signer │ │ │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ ClusterRole/cluster-admin │ │ │ │ │ │ 2 │ │ │ │ │ │ │ │ │ │ │ │ ClusterRole/system:controller:namespace-controller │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ │ │ ClusterRole/system:controller:job-controller │ │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ │ ClusterRole/system:controller:endpointslice-controller │ │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ │ ClusterRole/system:controller:root-ca-cert-publisher │ │ │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ ClusterRole/system:kube-scheduler │ │ │ │ │ │ │ 2 │ │ │ │ │ │ │ │ │ │ │ ClusterRole/admin │ │ │ │ │ │ 3 │ 7 │ 1 │ │ │ │ │ │ │ │ │ │ ClusterRole/system:controller:endpoint-controller │ │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ │ ClusterRole/system:controller:resourcequota-controller │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ │ │ ClusterRole/system:controller:replicaset-controller │ │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ │ ClusterRole/system:controller:generic-garbage-collector │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ │ │ ClusterRole/edit │ │ │ │ │ │ 2 │ 7 │ 1 │ │ │ │ │ │ │ │ │ │ ClusterRole/system:aggregate-to-edit │ │ │ │ │ │ 2 │ 7 │ 1 │ │ │ │ │ │ │ │ │ │ ClusterRole/system:controller:deployment-controller │ │ │ │ │ │ │ 2 │ │ │ │ │ │ │ │ │ │ │ ClusterRole/system:controller:horizontal-pod-autoscaler │ │ │ │ │ │ 2 │ │ │ │ │ │ │ │ │ │ │ │ ClusterRole/system:controller:persistent-volume-binder │ │ │ │ │ │ 1 │ 2 │ │ │ │ │ │ │ │ │ │ │ ClusterRole/system:controller:expand-controller │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ │ │ ClusterRole/system:controller:replication-controller │ │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ │ ClusterRole/system:aggregate-to-admin │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ │ │ ClusterRole/system:controller:endpointslicemirroring-contro- │ │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ │ ller │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ClusterRole/system:kube-controller-manager │ │ │ │ │ │ 5 │ 2 │ │ │ │ │ │ │ │ │ │ │ ClusterRole/system:node │ │ │ │ │ │ 1 │ │ │ │ │ │ │ │ │ │ │ │ ClusterRole/system:controller:cronjob-controller │ │ │ │ │ │ │ 2 │ │ │ │ │ │ │ │ │ └─────────────┴──────────────────────────────────────────────────────────────┴───┴───┴───┴────┴───┴───┴───┴───┴────┴───┴───┴───┴───┴───┴───┘ Severities: C=CRITICAL H=HIGH M=MEDIUM L=LOW U=UNKNOWN
う、美しい……!(jsonでのレポートもできるので自動化もしやすいたすかる)
Trivy Operator
というそんなTrivyのOperatorについても紹介、要するに↑をKubernetes内部からチェックしてくれるとても素晴らしいOperator。CRとしてPodや各種設定の脆弱性を出力してくれます。
00:14:21 ryusa@TUNA-KAN:~/develop/local/kubenews#57 $ kubectl apply -f https://raw.githubusercontent.com/aquasecurity/trivy-operator/v0.1.3/deploy/static/trivy-operator.yaml customresourcedefinition.apiextensions.k8s.io/vulnerabilityreports.aquasecurity.github.io created customresourcedefinition.apiextensions.k8s.io/configauditreports.aquasecurity.github.io created customresourcedefinition.apiextensions.k8s.io/exposedsecretreports.aquasecurity.github.io created customresourcedefinition.apiextensions.k8s.io/clusterconfigauditreports.aquasecurity.github.io created customresourcedefinition.apiextensions.k8s.io/clusterrbacassessmentreports.aquasecurity.github.io created customresourcedefinition.apiextensions.k8s.io/rbacassessmentreports.aquasecurity.github.io created namespace/trivy-system created serviceaccount/trivy-operator created clusterrole.rbac.authorization.k8s.io/trivy-operator created clusterrole.rbac.authorization.k8s.io/aggregate-config-audit-reports-view created clusterrole.rbac.authorization.k8s.io/aggregate-exposed-secret-reports-view created clusterrole.rbac.authorization.k8s.io/aggregate-vulnerability-reports-view created clusterrolebinding.rbac.authorization.k8s.io/trivy-operator created role.rbac.authorization.k8s.io/trivy-operator created rolebinding.rbac.authorization.k8s.io/trivy-operator created role.rbac.authorization.k8s.io/trivy-operator-leader-election created rolebinding.rbac.authorization.k8s.io/trivy-operator-leader-election created secret/trivy-operator created secret/trivy-operator-trivy-config created configmap/trivy-operator created configmap/trivy-operator-trivy-config created configmap/trivy-operator-policies-config created Warning: would violate PodSecurity "restricted:latest": runAsNonRoot != true (pod or container "trivy-operator" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "trivy-operator" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost") deployment.apps/trivy-operator created service/trivy-operator created 00:21:19 ryusa@TUNA-KAN:~/develop/local/kubenews#57 $ kubectl create deployment nginx --image nginx:1.16 Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "nginx" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "nginx" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "nginx" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "nginx" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost") deployment.apps/nginx created 00:22:10 ryusa@TUNA-KAN:~/develop/local/kubenews#57 $ kubectl get vulnerabilityreports -o wide NAME REPOSITORY TAG SCANNER AGE CRITICAL HIGH MEDIUM LOW UNKNOWN replicaset-nginx-7f597d689d-nginx library/nginx 1.16 Trivy 32s 38 74 57 119 1
現在の最新バージョンで用意されているのは - clusterconfigauditreports - clusterrbacassessmentreports - configauditreports - exposedsecretreports - rbacassessmentreports - vulnerabilityreports の6つのリソース、雑に環境に放り込んでおくだけでそれっぽくなりそうな予感
Sigstore
ソフトウェアのサプライチェーンを防ぐための仕組みを考えよう!という実験的なプロジェクト Sigstoreは - cosign - Fulcio - Rekor の3つのソフトウェアを組み合わせて機能でき、最終的な目的としては「アーティファクトをキーレスで署名して、その署名を改竄できないログとして保存して、アーティファクトを公開する」ことです。これにより、だれでもアーティファクトが正しく署名されていることを検証することができつつ鍵の管理が不要なので色々幸せになれそうな予感……!
残念ながら手元のWindows環境ではなぜかうまく動かなかった&話するとかなり長くなるので詳細は先人の神資料を参考に……
OCIイメージに対しての署名もできる一方、当然普通にバイナリにも署名ができるのでJavaのGradleやRubyのRubyGemsなどでIssueとしてあがっています。Sigstoreが広がって、すべてのソフトウェアのサプライチェーンを守れるようなそんな世界が来るといいですね。