Athenzを用いたKubernetes Webhook Authorization

4.4K Views

February 26, 21

スライド概要

Kubernetes Meetup Tokyo #14
https://k8sjp.connpass.com/event/104450/

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Athenzを用いたKubernetes Webhook Authorization Kubernetes Meetup Tokyo #14, Nov 8, 2018

2.

Yusuke Kato <yusukato@yahoo-corp.jp> @kpango Yahoo! JAPAN CTO Office SWAT Section / Language Support Go Team

3.

About Yahoo! JAPAN

4.

About Yahoo! JAPAN 1. On-premise Servers 2. 社内にはKubernetes as a ServiceとPaaS両方がある 3. k8sクラスタの数は今後も増加するとみられている。 4. 社内のKubernetesクラスタの数は148クラスタ (2018/11/1時点) 5. 社内のAPIやPlatformの認証認可には Yahoo Inc. (現Oath Inc.)がOSS化したAthenzを利用

5.

Problem

6.

Problem 1. 社内の多数のk8s clusterに対するアクセス制御 2. マルチクラウド環境における統合的なアクセス制御の必要性 3. k8s RBAC と Athenz RBACの思想の違い

7.

Solution

8.

Solution 1. k8sのAuthorization ModeをRBACからWebhookに変更 2. Garmを用いて、k8s SubjectAccessReviewをAthenzのRBAC 形式に変換 3. GarmがAthenzへ問い合わせを行いAuthorizationをAthenzに 集約。 4. Kubernetes管理者はAthenz上でPolicyやRoleの更新を行う。

9.

About k8s authorization mode

10.

Kubernetes Authorization Mode ▸ AlwaysAllow / AlwaysDeny ▸ 常にAllow / Denyするアクセスコントロール ▸ Node ▸ kubeletからのリクエストに対してアクセスコントロールを行う ▸ ABAC ▸ Attribute-based Access Control, リクエストされた属性とPolicyの中身を比較しマッチする ものがあれば認可。 ▸ RBAC ▸ Role-based Access Control, RoleやClusterRoleとPolicyをBindしアクセスできるResource などをコントロールしている。 ▸ Webhook ▸ SubjectAccessReviewの内容がWebhookで飛んでくるので認可のロジックを独自に定義で きる。

11.

About k8s webhook authorization mode

12.

Kubernetes Webhook Authorization Mode ▸ Webhookリクエストペイロードは SubjectAccessReviewオブジェクト ▸ Responseペイロードのstatus.allowedに true / falseを返すことでコントロールする ▸ resourceAttributesフィールドには他に、 ResourceName, SubResourceなどもある

13.

About Athenz

14.

About Athenz ▸ Service Authentication ▸ モダンな環境のあらゆるWorkload/Serviceにおいてx.509 certificateを用いた安全なidentity authenticationを提供 ▸ Authorization ▸ Provides fine-grained Role Based Access Control (RBAC)

15.

About Athenz RBAC Data Model

16.

About Athenz RBAC Data Model

17.

About Athenz RBAC Data Model 全ての情報を管理 する名前空間

18.

About Athenz RBAC Data Model Authenticated User & Service

19.

About Athenz RBAC Data Model Role = Grouped Principals

20.

About Athenz RBAC Data Model Athenzのアクセス制御 設定の実態

21.

Why Athenz

22.

Single source of truth ▸ AWS, GCPやKubernetes OpenStack などのクラウド環境の多 くはすでに個々にアクセス制御の機能を持っている ▸ Athenzは様々な環境で動作しアクセス制御情報のSSoT (Single Source of Truth)を実現する事ができる Cloud computing environments OpenStack Amazon EC2 Kubernetes AWS ECS Screwdriver AWS Lambda

23.

About Garm

24.

About Garm ▸ k8s webhook authorizationを利用することで Athenzにauthorizationを委譲する ▸ golang製 ▸ yahoo/k8s-athenz-webhookのライブラリを利用 ▸ yamlを用いた柔軟な設定 ▸ k8s SubjectAccessReviewを AthenzのData Modelに柔軟に変換 ▸ 単体でblack list / white list機能 ▸ Kubernetes as a Service向けのAuthorization機能

25.

About Garm 1. WebhookによりSubjectAccessReviewが送られてくる。 2. SubjectAccessReviewをconfig.yamlを元に、Athenz向けに変 換を行いAthenzに問い合わせる。

26.

About Garm ▸ Kubernetes RBACとAthenz DataModelの比較 Kubernetes Verb get, list, watch, create, update Athenz Action get, list, watch, create, update {Top Level Domain}.{namespace} Namespace kube-system, default, … SubDomain ex. athenz.kube-system API Group Resource Name apps, autoscaling, extensions … pods, configmaps, replicasets, deployments… garm, istio, prometheus … {API Group}.{Resource}.{Name} Resource ex. apps.deployments.garm

27.

About Garm 1. White List FirstなBlack List 2. Verb, Namespace, API Group, Resource, ResourceName単位での アクセス制御を提供 3. ワイルドカードや正規表現 が利用可能 garm config.yaml

28.

About Garm Admin Domain User Domain Deny: kube-system’s secret kube-system’s secret is kaas admin resource Cluster Kube API Server KaaS Admin garm config.yaml kubectl get secret -n kube-system kubectl get secret k8s user

29.

Demo

30.

Wrap Up

31.

About Garm kube-api-server send webhook to Garm Garm maps SubjectAccessReview to Athenz Style Garm checks the White List If Exists In Black List If Exists In White List Garm checks the Black List If Not Exists In Black List Garm checks the Admin Access List Garm decides the Athenz Domain Garm Send AccessCheck Request to Athenz Athenz Domain checks Policy & Principal & Role Garm API

32.

Garm Future Work

33.

Future Work ▸ Authenticationにも対応 ▸ Garm <=> Athenz間のmTLS対応 ▸ 複数のUser Domain対応

34.

Thank you!

35.

About Athenz ▸ Athenz Website: http://athenz.io ▸ Athenz Github: https://github.com/yahoo/athenz ▸ Garm Github: https://github.com/yahoojapan/garm (近日公開) ▸ Athenz Slack: https://athenz.slack.com/ ▸ Questions or Comments: yusukato@yahoo-corp.jp

36.

Appendix

37.

Athenz Authorization

38.

About Athenz ▸ Centralized Access Control ▸ Decentralized Access Control

39.

Athenz Authorization Centralized Access Control

40.

Athenz Authorization Decentralized Access Control

41.

EOP