Upgrade to Pro — share decks privately, control downloads, hide ads and more …

kubecon2018_recap_falco_deep_dive

makocchi
January 09, 2019

 kubecon2018_recap_falco_deep_dive

Recap of 「Falco Deep Dive」session at Cloud Native Meetup Tokyo #6

makocchi

January 09, 2019
Tweet

More Decks by makocchi

Other Decks in Technology

Transcript

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

    View full-size slide

  2. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  5. 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?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. 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?

    View full-size slide

  9. 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?

    View full-size slide

  10. 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?

    View full-size slide

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

    View full-size slide

  12. 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?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  18. 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

    View full-size slide

  19. 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 はというと・・

    View full-size slide

  20. 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

    View full-size slide

  21. 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

    View full-size slide

  22. 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: []

    View full-size slide

  23. 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"]
    . . . .

    View full-size slide

  24. 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)
    ね?簡単でしょ?

    View full-size slide

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

    View full-size slide

  26. 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

    View full-size slide

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

    View full-size slide

  28. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide