8K Views
February 26, 21
スライド概要
Kubernetes Meetup Tokyo #14
https://k8sjp.connpass.com/event/104450/
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
Athenzを用いたKubernetes Webhook Authorization Kubernetes Meetup Tokyo #14, Nov 8, 2018
Yusuke Kato <[email protected]> @kpango Yahoo! JAPAN CTO Office SWAT Section / Language Support Go Team
About Yahoo! JAPAN
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を利用
Problem
Problem 1. 社内の多数のk8s clusterに対するアクセス制御 2. マルチクラウド環境における統合的なアクセス制御の必要性 3. k8s RBAC と Athenz RBACの思想の違い
Solution
Solution 1. k8sのAuthorization ModeをRBACからWebhookに変更 2. Garmを用いて、k8s SubjectAccessReviewをAthenzのRBAC 形式に変換 3. GarmがAthenzへ問い合わせを行いAuthorizationをAthenzに 集約。 4. Kubernetes管理者はAthenz上でPolicyやRoleの更新を行う。
About k8s authorization mode
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で飛んでくるので認可のロジックを独自に定義で きる。
About k8s webhook authorization mode
Kubernetes Webhook Authorization Mode ▸ Webhookリクエストペイロードは SubjectAccessReviewオブジェクト ▸ Responseペイロードのstatus.allowedに true / falseを返すことでコントロールする ▸ resourceAttributesフィールドには他に、 ResourceName, SubResourceなどもある
About Athenz
About Athenz ▸ Service Authentication ▸ モダンな環境のあらゆるWorkload/Serviceにおいてx.509 certificateを用いた安全なidentity authenticationを提供 ▸ Authorization ▸ Provides fine-grained Role Based Access Control (RBAC)
About Athenz RBAC Data Model
About Athenz RBAC Data Model
About Athenz RBAC Data Model 全ての情報を管理 する名前空間
About Athenz RBAC Data Model Authenticated User & Service
About Athenz RBAC Data Model Role = Grouped Principals
About Athenz RBAC Data Model Athenzのアクセス制御 設定の実態
Why Athenz
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
About Garm
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機能
About Garm 1. WebhookによりSubjectAccessReviewが送られてくる。 2. SubjectAccessReviewをconfig.yamlを元に、Athenz向けに変 換を行いAthenzに問い合わせる。
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
About Garm 1. White List FirstなBlack List 2. Verb, Namespace, API Group, Resource, ResourceName単位での アクセス制御を提供 3. ワイルドカードや正規表現 が利用可能 garm config.yaml
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
Demo
Wrap Up
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
Garm Future Work
Future Work ▸ Authenticationにも対応 ▸ Garm <=> Athenz間のmTLS対応 ▸ 複数のUser Domain対応
Thank you!
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: [email protected]
Appendix
Athenz Authorization
About Athenz ▸ Centralized Access Control ▸ Decentralized Access Control
Athenz Authorization Centralized Access Control
Athenz Authorization Decentralized Access Control
EOP