メモ - RyuSA

技術的なメモ書きとか試してみたこと

kubenews#57 Cloud Nativeなニュース - プロダクト紹介縛り

本記事はkubenewsの第57回目のゲスト枠で参加するRyuSAのコンテンツです。

なお、本登壇および本記事はあくまで 私自身の見解 であり、私の所属団体・企業における立場、戦略、意見を代表するものではありません。

Markdoc

markdoc.io

Stripe社の公開したドキュメントをMarkdownで書くためのOSSです。利用できるMarkdownGitHub 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

www.talos.dev

Kubernetes"専用"のOS……え??専用???となりますがそんな不思議なOSがTalos Linux。このLinuxディストリビューションはコンテナ向けOSLinuxのひとつで、特にKubernetesを起動/運用するためのものです。OSにSSHすることはできず、設定はすべてはtalosctlを使ったAPI経由で行うことになります。

Talos LinuxはDockerで起動することが可能で、手元でサクッと動作検証することができます。

個人的に好みなのは、このOS自体がメモリ上で展開できるためサーバーがステートフルになることを防ぐことができます。PXEブートなどにも当然対応しているため、Raspberry Piなどが活躍するワークロード(IoTや誤自宅勢とか)にはとても便利なんじゃないかなと思います。

trivy

超便利だったので共有したい、というだけ……

aquasecurity.github.io

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

github.com

というそんな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

www.sigstore.dev

ソフトウェアのサプライチェーンを防ぐための仕組みを考えよう!という実験的なプロジェクト Sigstoreは - cosign - Fulcio - Rekor の3つのソフトウェアを組み合わせて機能でき、最終的な目的としては「アーティファクトをキーレスで署名して、その署名を改竄できないログとして保存して、アーティファクトを公開する」ことです。これにより、だれでもアーティファクトが正しく署名されていることを検証することができつつ鍵の管理が不要なので色々幸せになれそうな予感……!

残念ながら手元のWindows環境ではなぜかうまく動かなかった&話するとかなり長くなるので詳細は先人の神資料を参考に……

knqyf263.hatenablog.com

OCIイメージに対しての署名もできる一方、当然普通にバイナリにも署名ができるのでJavaのGradleやRubyRubyGemsなどでIssueとしてあがっています。Sigstoreが広がって、すべてのソフトウェアのサプライチェーンを守れるようなそんな世界が来るといいですね。

github.com

github.com