Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
マルチテナントEKSクラスタにおける開発者への権限移譲
Search
Kenta Goto
March 12, 2021
Technology
0
450
マルチテナントEKSクラスタにおける開発者への権限移譲
マルチテナントEKSクラスタにおける開発者への権限移譲
Kenta Goto
March 12, 2021
Tweet
Share
More Decks by Kenta Goto
See All by Kenta Goto
KRMOps Dive Deep: kro を活⽤した Kubernetes の新たな抽象化
kennygt51
2
410
Amazon EKS の過去、現在、そして未来
kennygt51
1
310
Cluster API と VPC Lattice は Amazon EKS マルチクラスターの夢を見るか?
kennygt51
0
660
Vault + EKS + AWS SSOで実現する秘密情報管理
kennygt51
1
1.1k
Vault on Kubernetes
kennygt51
4
4k
社内でのサウナ布教活動
kennygt51
3
190
Dockerコンテナ@AWS ECSのモニタリングに入門した話
kennygt51
0
420
Other Decks in Technology
See All in Technology
1,000 にも届く AWS Organizations 組織のポリシー運用をちゃんとしたい、という話
kazzpapa3
0
180
Embedded SREの終わりを設計する 「なんとなく」から計画的な自立支援へ
sansantech
PRO
3
2.6k
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
1.1k
マネージャー視点で考えるプロダクトエンジニアの評価 / Evaluating Product Engineers from a Manager's Perspective
hiro_torii
0
190
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
93k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
610
Exadata Fleet Update
oracle4engineer
PRO
0
1.1k
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
780
登壇駆動学習のすすめ — CfPのネタの見つけ方と書くときに意識していること
bicstone
3
130
旅先で iPad + Neovim で iOS 開発・執筆した話
zozotech
PRO
0
100
AWS DevOps Agent x ECS on Fargate検証 / AWS DevOps Agent x ECS on Fargate
kinunori
2
220
Featured
See All Featured
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
58
50k
The Invisible Side of Design
smashingmag
302
51k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
430
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
290
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
380
Information Architects: The Missing Link in Design Systems
soysaucechin
0
780
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3k
Embracing the Ebb and Flow
colly
88
5k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
760
Transcript
マルチテナントEKSクラスタにおける開発者への権限移譲 CloudNative Days Spring 2021 ONLINE
自己紹介 後藤 健汰(gotoken) @kennygt51 • SIerでの運用系SEを経て、 2019年1月 マネーフォワード入社 • インフラエンジニア
• アプリケーションのコンテナ化、サービ スのAWS移行
今日話すこと これから まとめ 苦労しているポイント マルチテナントEKSクラスタにおける権限移譲 複数のサービスが本番稼働するプラットフォームの構築
複数のサービスが本番稼働する プラットフォームの構築
オンプレミス環境からAWSへの移行 • 2012 年の創業当初からオンプレミス@北海道 ◦ 物理サーバーを購入し、インフラ担当者がセットアップし運用 • 2018年下旬頃より、AWS移行プロジェクトが発足 ◦ オンプレミスで稼働するサービスの漸進的マイグレーション
◦ 複数のサービスが稼働することを見越したプラットフォームを構築 • 2021年3月現在、複数サービスがAWS上で本番稼働中
マルチテナントEKS及びマルチアカウントアーキテクチャ • マルチテナントEKS及びマルチアカウントアーキテクチャを採用 • オンプレミス環境で稼働するサービスの移行及び新規サービスの受入を行ってい る 詳細については 弊社のエンジニアが登壇した AWS Summit
Online をチェック!
少しだけ深堀り • AWSアカウントは、サービス単位で払い出す ◦ 別途EKSクラスタ専用のアカウントがありTGWで接続 • Kubernetesクラスタ上では、サービス単位でNamepaceを分離 ◦ 今回はこちらについて詳しく紹介 •
Vaultを使った秘匿情報管理の仕組みを構築 ◦ CNDT 2020「Vault + EKS + AWS SSOで実現する秘密情報管理」にて詳しく紹介 • CircleCI / ArgoCDを用いたデプロイパイプラインを構築
マルチテナントEKSクラスタにお ける権限移譲
マルチテナントEKSクラスタ aaa-web-namespace component-aaa-1 component-aaa-2 bbb-web-namespace component-bbb-1 component-bbb-2 ccc-web-namespace component-ccc-1 component-ccc-2
k8s cluster
そもそもなぜマルチテナントなのか? • マルチテナント/シングルテナントのメリット・デメリットを比較検討 • 今までインフラチームが全てを管理していた環境から、クラスタの 管理まで一気にサービスチームに委譲するのは、ギャップが大き すぎると判断 • サービスチームが触ることができる範囲を徐々に広げるために、 マルチテナントを採用
権限移譲の対象 • インフラに関するコードの管理及びレビュー • Argo CDのGUIを使ったリソースの参照・操作 • kubectlを使ったEKSクラスタへのアクセス
権限移譲の対象 • インフラに関するコードの管理及びレビュー • Argo CDのGUIを使ったリソースの参照・操作 • kubectlを使ったEKSクラスタへのアクセス
インフラに関するコードの管理及びレビュー 要件 • サービスチームにインフラに関するコード( TerraformやKubernetesのマニフェスト)を管理 して欲しい ◦ 大量のサービスが稼働すると、インフラチームが全てのコードに責任を持つことは難し い 実現方式
• Monorepoで管理 • 各サービスごとにディレクトリを分割。CODEOWNERSを用いてサービスチームのエ ンジニアが所属するGitHubのTeamをコードオーナーに設定。
マニフェストの管理及びレビュー /services配下に、サービス単位でディレクトリを作成し マニフェストを管理 # /services 以外はインフラチームが管理 * @moneyforward/infra_reviewers # xxx-service
/services/xxx-service/** @moneyforward/xxx_reviewers # yyy-service /services/yyy-service/** @moneyforward/yyy_reviewers # zzz-service /services/zzz-service/** @moneyforward/zzz_reviewers CODEOWNERSを設定 Monorepo
権限移譲の対象 • インフラに関するコードの管理及びレビュー • Argo CDのGUIを使ったリソースの参照・操作 • kubectlを使ったEKSクラスタへのアクセス
Argo CDのGUIを使ったリソースの参照・操作 要件 • サービス開発者にArgo CDのGUIを操作して欲しい ◦ デプロイしたリソースの状態確認、 Rolling Updateなど
• ただし他のサービスに影響を及ぼす操作を防ぎたい ◦ ログインしたユーザが管理するサービスに閉じた権限のみ付与したい 実現方式 • AppProject / Application をサービス単位で分割 • Project RoleによるRBAC ◦ 特定のApp Projectに閉じたRBAC これにより、各サービスの開発者が適切な権限でArgo CDのGUIを操作することができる
Project Role roles: - name: developers policies: - p, proj:hoge-service:developers,
applications, sync, *-hoge/*, allow - p, proj:hoge-service:developers, applications, action/apps/Deployment/restart, *-hoge/*, allow groups: - moneyforward:hoge_developer • GitHubのhoge_developerチームに所属しているユーザがログインしたら • hoge-serviceというAppProjectに属するApplicationで管理するリソースに対して、 Sync及びRestart(Rolling Update)ができる
権限移譲の対象 • インフラに関するコードの管理及びレビュー • Argo CDのGUIを使ったリソースの参照・操作 • kubectlを使ったEKSクラスタへのアクセス
kubectlを使ったEKSクラスタへのアクセス 要件 • サービス開発者がkubectl経由でEKSクラスタにアクセスできるようにしたい • ただしマルチテナントなのでクラスタ全体に影響を及ぼす操作を防ぎたい ◦ 管理するサービスの Namespaceに閉じた権限のみ付与したい 実現方式
• aws-auth によるRBAC ◦ IAMロールとKubernetesにおけるgroupをマッピング ◦ groupに対してサービス開発者に付与する権限を定義したRoleをRoleBinding これにより、各サービスの開発者が適切な権限でEKSクラスタにアクセスすることができる
RBACの流れ Role hoge_developers (group) aws-auth RoleBinding hogeサービスのAWSアカウント EKSクラスタのAWSアカウント hoge IAMロール
- rolearn: arn:aws:iam::111111111111:role/AWSReservedSSO_ReadOnly_XXXX username: mf:hoge_developer:{{SessionName}} groups: - mf:hoge_developers apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: hoge-developers roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: hoge-developers subjects: - kind: Group name: mf:hoge_developers apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: hoge-developers rules: - apiGroups: - batch resources: - cronjobs - jobs verbs: (略)
苦労しているポイント
本番運用が始まって1年ほど経過 • プラットフォームの本番運用が始まって1年ほど経過 • 10以上のサービスが本番稼働している • 「開発者への権限委譲」という文脈で、いくつか課題も見えてきた
ポイント • 開発者にどこまで権限を付与するべきか(最小権限) • 初期構築時のレビュワー不足 • スキルトランスファー(ある程度k8sの知識が必要) • 乗るサービスが増えると問い合わせの数も増えていく ◦
クラスタ管理者のコミュニケーションコスト増
これから
これから • サービスチームへの運用の委譲を加速 ◦ https://moneyforward.com/engineers_blog/2020/12/28/infra-study-abroad/ • ドキュメントの充実 • さらなる権限の委譲 ◦
委譲で来ていないコードの管理を委譲 ◦ AWS SSOのコード化
まとめ
まとめ • オンプレからクラウド(EKS)に移行することで間違いなく権限移譲の為の手 札は増えた ◦ IaCを徹底することでコード管理をサービスチームへ委譲 ◦ Kubernetes/Argo CDのRBACを適切に設計することで、最小権限で運 用を委譲
• 「作って終わり」ではないということを実感 ◦ 文化の醸成・スキトラ ◦ 継続的なプラットフォームの改善
We’re hiring! ※記載されている会社名および商品・製品・サービス名(ロゴマーク等を含む)は、各社の商標または各権利者の登録商標です。