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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
210
変化するコーディングエージェントとの現実的な付き合い方 〜Cursor安定択説と、ツールに依存しない「資産」〜
empitsu
4
1.3k
Tebiki Engineering Team Deck
tebiki
0
24k
CDKで始めるTypeScript開発のススメ
tsukuboshi
1
290
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
2
820
AI推進者の視点で見る、Bill OneのAI活用の今
sansantech
PRO
2
330
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
1
150
データ民主化のための LLM 活用状況と課題紹介(IVRy の場合)
wxyzzz
2
640
AI時代、1年目エンジニアの悩み
jin4
1
160
Amazon S3 Vectorsを使って資格勉強用AIエージェントを構築してみた
usanchuu
3
430
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
(金融庁共催)第4回金融データ活用チャレンジ勉強会資料
takumimukaiyama
0
120
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
40
2.2k
Bash Introduction
62gerente
615
210k
The Language of Interfaces
destraynor
162
26k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
580
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
190
Tell your own story through comics
letsgokoyo
1
800
How to train your dragon (web standard)
notwaldorf
97
6.5k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Crafting Experiences
bethany
1
46
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Being A Developer After 40
akosma
91
590k
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! ※記載されている会社名および商品・製品・サービス名(ロゴマーク等を含む)は、各社の商標または各権利者の登録商標です。