Slide 1

Slide 1 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 1 Monitoring Kubernetes Audit Log By Falco @makocchi

Slide 2

Slide 2 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 2 サイバーエージェント アドテク本部 所属 普段はデータセンター運用や Private Cloud(OpenStack)を 構築・運用している 最近では Private Cloud 上に 簡単に Kubernetes を展開できる基盤(AKE)を開発している CKA (Certified Kubernetes Administrator) #150 CKAD (Certified Kubernetes Application Developper) #5 Japan Container Days v18.04 / v18.12 「Dockerだけじゃないコンテナ runtime 徹底比較」 「runc だけじゃない low level コンテナ runtime 徹底比較」 TWITTER / @makocchi Makoto Hasegawa FACEBOOK / makocchi0923 SELF INTRODUCTION

Slide 3

Slide 3 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 3 Kubecon + CNCon 2018 NA recap ということで、今日はその中から 「Falco Deep Dive」 のセッション内容をご紹介します #じつは(半分)エアKubeConRecap

Slide 4

Slide 4 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 4 What is Falco?

Slide 5

Slide 5 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 5 Container Native Runtime Security つまり、コンテナ環境のセキュリティをモニタリングしてくれるソフトウェア オープンソース 最近 CNCF の sanbox プロジェクトになった Falco joins CNCF Sandbox https://sysdig.com/blog/falco-cncf-sandbox/ 主に開発しているのは sysdig 注意する点としては、モニタリングをするだけで実際に処理をブロックし たりすることはしない WHAT IS FALCO?

Slide 6

Slide 6 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 6 どうやってモニタリングしてるの?

Slide 7

Slide 7 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 7 https://schd.ws/hosted_files/kccna18/cc/Falco-DeepDive-Kubecon.pdf

Slide 8

Slide 8 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 8 Falco を実行すると DKMS(Dynamic Kernel Module Support) によって module が build & install される Install される module は falco_probe なので falco 自体をコンテナ環境で使う場合は privileged が必要 $ lsmod | grep falco falco_probe 622592 2 HOW TO MONITOR?

Slide 9

Slide 9 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 9 Rule を yaml で記述することでモニタリングするイベントを定義する 例えばこんな感じの rule - rule: Write below binary dir desc: an attempt to write to any file below a set of binary directories condition: > bin_dir and open_write output: > File below a known binary directory opened for writing (user=%user.name command=%proc.cmdline file=%fd.name parent=%proc.pname pcmdline=%proc.pcmdline gparent=%proc.aname[2]) priority: ERROR tags: [filesystem] この場合は bin_dir を write 権限で open しようとすると検知してくれる ちなみに bin_dir は別の場所で定義されていて /bin, /sbin, /usr/bin, /usr/sbin が相当する HOW TO MONITOR?

Slide 10

Slide 10 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 10 実際に /usr/bin 以下に書き込もうとすると・・・ kenshiro $ sudo touch /usr/bin/you_are_shock # falco ͷ log 11:46:38.977124899: Error File below a known binary directory opened for writing (user=root command=touch / usr/bin/you_are_shock file=/usr/bin/you_are_shock parent=sudo pcmdline=sudo touch /usr/bin/you_are_shock gparent=bash) このように検知してくれる HOW TO MONITOR?

Slide 11

Slide 11 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 11 検知したイベントを外部に通知したい

Slide 12

Slide 12 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 12 Falco には検知した際にプログラムを実行する仕組みがある その仕組を使えば外部へ webhook とかすることでいろいろな通知が可能になる (slack等) やりかたは簡単 falco.yaml の設定を変更する # json Ͱͷ output Λ༗ޮʹ͢Δ json_output: true # program_output Ͱ slack ͷ webhook Λઃఆ͢Δ program_output: enabled: true keep_alive: false program: "jq '{text: .output}' | curl -d @- -X POST https://hooks.slack.com/services/foo/bar/baz" HOW TO NOTIFY?

Slide 13

Slide 13 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 13 こんな感じに slack に通知されます さすがにこのままだと味もそっけもないので・・・もうすこし頑張ってみると・・・ HOW TO NOTIFY?

Slide 14

Slide 14 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 14 こんな感じに通知することも可能です HOW TO NOTIFY?

Slide 15

Slide 15 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 15 詳しい設定とかはこちらを見てね Kubernetes に Falco を展開してアプリケーションの挙動をモニタリングする https://medium.com/@makocchi/falco-with-kubernetes-ja-1e2c045b3840 HOW TO NOTIFY?

Slide 16

Slide 16 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 16 Falco で Kubernetes の audit log をモニタリングする

Slide 17

Slide 17 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 17 そもそも Kubernetes の audit log とは?

Slide 18

Slide 18 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 18 Kubernetes API サーバーに対して行われた呼び出しを時系列で ログに記録することができる 怪しい API リクエストの調査、統計情報の収集、不要な API 呼び出しをモニタリングする為には audit logging を有効にする 必要がある ログの出力先はファイル以外にも対応している (Webhook 等) 最近の Falco (0.13.0) で audit log もモニタリングできるよう になった Falco 0.13.0 Released: Kubernetes Audit Events Support https://sysdig.com/blog/falco-0-13-released-kubernetes-audit-support/ K8S AUDIT LOGGING

Slide 19

Slide 19 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 19 さっそく audit logging を有効にしてみよう ちなみに GKE では default で有効になっている Falco が port 8765 で webhook の endpoint として待ち 構えてくれるので、そこに対して audit log を投げつける! K8S AUDIT LOGGING ちなみに audit まわりの kube-apiserver の option はというと・・

Slide 20

Slide 20 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 20 K8S AUDIT LOGGING --audit-dynamic-configuration --audit-log-batch-buffer-size --audit-log-batch-max-size --audit-log-batch-max-wait --audit-log-batch-throttle-burst --audit-log-batch-throttle-enable --audit-log-batch-throttle-qps --audit-log-format --audit-log-maxage --audit-log-maxbackup --audit-log-maxsize --audit-log-mode --audit-log-path --audit-log-truncate-enabled --audit-log-truncate-max-batch-size --audit-log-truncate-max-event-size --audit-log-version --audit-policy-file --audit-webhook-batch-buffer-size --audit-webhook-batch-max-size --audit-webhook-batch-max-wait --audit-webhook-batch-throttle-burst --audit-webhook-batch-throttle-enable --audit-webhook-batch-throttle-qps --audit-webhook-config-file --audit-webhook-initial-backoff --audit-webhook-mode --audit-webhook-truncate-enabled --audit-webhook-truncate-max-batch-size --audit-webhook-truncate-max-event-size --audit-webhook-version

Slide 21

Slide 21 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 21 K8S AUDIT LOGGING --audit-dynamic-configuration --audit-log-batch-buffer-size --audit-log-batch-max-size --audit-log-batch-max-wait --audit-log-batch-throttle-burst --audit-log-batch-throttle-enable --audit-log-batch-throttle-qps --audit-log-format --audit-log-maxage --audit-log-maxbackup --audit-log-maxsize --audit-log-mode --audit-log-path --audit-log-truncate-enabled --audit-log-truncate-max-batch-size --audit-log-truncate-max-event-size --audit-log-version --audit-policy-file --audit-webhook-batch-buffer-size --audit-webhook-batch-max-size --audit-webhook-batch-max-wait --audit-webhook-batch-throttle-burst --audit-webhook-batch-throttle-enable --audit-webhook-batch-throttle-qps --audit-webhook-config-file --audit-webhook-initial-backoff --audit-webhook-mode --audit-webhook-truncate-enabled --audit-webhook-truncate-max-batch-size --audit-webhook-truncate-max-event-size --audit-webhook-version

Slide 22

Slide 22 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 22 webhook の設定と policy は falco の repository にsample が用意されているのでそれを参考にすることが可能 例えば webhook の設定はこんな感じ (kube-apiserver と同じ host で falco が port 8765 で受け付ける場合) K8S AUDIT LOGGING apiVersion: v1 kind: Config clusters: - name: falco cluster: server: http://127.0.0.1:8765/k8s_audit contexts: - context: cluster: falco user: "" name: default-context current-context: default-context preferences: {} users: []

Slide 23

Slide 23 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 23 audit policy は rbac に近い設定で定義する K8S AUDIT LOGGING apiVersion: audit.k8s.io/v1beta1 # This is required. kind: Policy # Don't generate audit events for all requests in RequestReceived stage. omitStages: - "RequestReceived" rules: # Log pod changes at RequestResponse level - level: RequestResponse resources: - group: "" # Resource "pods" doesn't match requests to any subresource of pods, # which is consistent with the RBAC policy. resources: ["pods", "deployments"] . . . .

Slide 24

Slide 24 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 24 webhook と audit policy を有効にして kube-apiserver を再起動して設定を反映させる --audit-webhook-config-file=/etc/falco/webhook-config.yaml --audit-policy-file=/etc/falco/audit-policy.yaml あとは audit log を発火させれば OK “demo” user が kubectl get deployment をした時にはこんな感じで通知される K8S AUDIT LOGGING 10:20:20.540762112: Warning K8s Operation performed by user not in allowed list of users (user=demo target=/deployments verb=list uri=/apis/extensions/v1beta1/namespaces/ default/deployments?limit=500 resp=200) ね?簡単でしょ?

Slide 25

Slide 25 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 25 https://schd.ws/hosted_files/kccna18/cc/Falco-DeepDive-Kubecon.pdf

Slide 26

Slide 26 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 26 audit の log を元に、rbac の manifest を自動生成してくれるツールも存在する https://github.com/liggitt/audit2rbac demo 動画もあって、是非見てもらいたい https://youtu.be/n2cD20moYe8 これを使えば足りない rbac を検知して、必要に応じて rbac を適用することができる クラスター管理者とかはけっこう嬉しいツールなんじゃないかな? K8S AUDIT LOGGING

Slide 27

Slide 27 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 27 Kubernetes に falco を install する

Slide 28

Slide 28 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 28 HOW TO INSTALL Helm の chart があるのでそれを使うのが楽 (stable/falco) https://github.com/helm/charts/tree/master/stable/falco Falco operator もある https://github.com/mumoshu/falco-operator さくっと入れられる!(Helm もしくは operator) Kubernetes 環境だけではなくて、もちろん docker run でも OK (falcosecurity/falco:tag) いろんなミドルウェアの rule を書いてくれている人も居る https://github.com/draios/falco-extras

Slide 29

Slide 29 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 29 これで今日から素敵な Falco 生活を送れますよね!?

Slide 30

Slide 30 text

CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 30 Monitoring Kubernetes Audit Log By Falco @makocchi ご清聴ありがとうございました!!