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
社内CSサービスを支える権限管理について
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
hukurou
April 06, 2021
Technology
0
2.9k
社内CSサービスを支える権限管理について
Mercari CS/CRE Tech Talk #1
hukurou
April 06, 2021
Tweet
Share
Other Decks in Technology
See All in Technology
VSCode中心だった自分がターミナル沼に入門した話
sanogemaru
0
860
ブラックボックス化したMLシステムのVertex AI移行 / mlops_community_62
visional_engineering_and_design
1
240
Bill One 開発エンジニア 紹介資料
sansan33
PRO
5
18k
OPENLOGI Company Profile for engineer
hr01
1
61k
Sansanの認証基盤を支えるアーキテクチャとその振り返り
sansantech
PRO
1
120
来期の評価で変えようと思っていること 〜AI時代に変わること・変わらないこと〜
estie
0
120
昔話で振り返るAWSの歩み ~S3誕生から20年、クラウドはどう進化したのか~
nrinetcom
PRO
0
120
GitHub Advanced Security × Defender for Cloudで開発とSecOpsのサイロを超える: コードとクラウドをつなぐ、開発プラットフォームのセキュリティ
yuriemori
1
120
Network Firewall Proxyで 自前プロキシを消し去ることができるのか
gusandayo
0
130
トイルを超えたCREは何屋になるのか
bengo4com
0
100
AWS Systems Managerのハイブリッドアクティベーションを使用したガバメントクラウド環境の統合管理
toru_kubota
1
190
不確実性と戦いながら見積もりを作成するプロセス/mitsumori-process
hirodragon112
1
150
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
WENDY [Excerpt]
tessaabrams
9
37k
What's in a price? How to price your products and services
michaelherold
247
13k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
510
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.5k
How to make the Groovebox
asonas
2
2.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
A designer walks into a library…
pauljervisheath
210
24k
Leo the Paperboy
mayatellez
5
1.6k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
230
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
480
Transcript
1 社内CSサービスを支える権限管理について Mercari CS/CRE Tech Talk #1 ISHII Reo @hukurou
2 2020/04 新卒でメルカリに入社 CRE CSTool Team Software Engineer /
Scrum Master 石井 怜央 / ISHII Reo
3 Authorization Tool • 社内の情報・オペレーション を扱える権限を管理する サービス これから話すこと
4 権限管理のマイクロサービス CS tool MOD tool Contact tool Authz tool
CS tool その他CS tool 機能 お問い合せ 返信機能 MOD機能 権限管理機能
5 なぜAuthzを作っているか 権限管理の仕組みが初期の頃からあまり変わっていない • RBAC(Role-based access control)っぽい方式 ◦ Roleで付与できる権限を制限 ◦
Roleに許可されている権限の中で、必要な権限を適宜追加 旧CSToolの権限管理 メンバー 管理者 権限 権限 ロール 権限
6 なぜAuthzを作っているか • 現在の組織の構造が考慮されていない ◦ CSの規模の拡大(複数に部署)、Merpayなど ◦ 権限の管理者が全メンバーの権限を設定する必要がある ◦ 組織やメンバーごとの厳密な権限管理のためには
大量の権限とRoleが必要 • Microservice化にともない、複数のサービスの権限管理が必要になった 何を解決したいか
7 • サーバーサイド ◦ Go ◦ gqlgen • フロントエンド ◦
TypeScript ◦ React ◦ @apollo/client ▪ GraphQL client ◦ graphql-codegen ▪ GraphQL Schemaから型定義を生成するツール ◦ Graphql-tag ▪ GraphQL queryをパースしてくれるリテラルを提供してくれる Authzの開発
8 admin-graphqlとの関係 admin-graphql 各MSのbackend 各MSのfrontend Old CSTool(一部API) Old API 権限を確認
Authz backend Authz frontend
9 Authzでの権限管理の構造 管理者がグループを作成し利用可能な権限を設定 • グループ管理者: 自分のグループのメンバー管理とロールとの紐付け • ロール管理者: 特定のグループに属さず、各グループにロールを作成 グループ
メンバー 管理者 権限 権限 ロール 権限 ロール管理者 グループ管理者 グループごとに使用 できる権限を制限
10 Graphqlでの権限管理 Custom directiveを定義しschemaに権限情報を付与 directive @hasPermission(permission: [String!]!) on FIELD_DEFINITION Query
{ itemCase(id: ID!): ItemCase @hasPermission(permission: [“case:read”]) } type ItemCase { id: ID! name: String! item: Item! @hasPermission(permission: ["item:read"]) } Schemaのイメージ :
11 処理の流れ admin-graphql backend frontend Authz backend ①Gatewayで認証し tokenを取得 ②
middlewareで Tokenを使って ユーザー情報を取得 ③ “case:read”の権限を 持っていることを確認 ④ 権限を持っているので resolverで処理 query ItemCase{ itemCase(id: 1) { id name } } { permissions: [“case:read”] }
12 処理の流れ admin-graphql backend frontend Authz backend ①Gatewayで認証し tokenを取得 ②
middlewareで Tokenを使って ユーザー情報を取得 ⑤ "item:read"の権限を 持っていないので Permission Denied ④ ItemCaseの Resolverを処理 query ItemCase{ itemCase(id: 1) { id item{ id } } } { permissions: [“case:read”] } ③ “case:read”の権限を 持っていることを確認
13 なぜAuthzにGraphqlを使用しているのか Admin graphqlとの相性 • 将来的にFederation gatewayの子サービスになることを想定 ◦ 他サービスからも権限の取得がしやすい ▪
権限ごとの画面の情報の出し分けなど Schemaに権限が書かれることによるドキュメントとしての意味
14 federationのイメージ federation gateway backend frontend Authz backend admin-graphql 権限を確認
15 まとめ • RBAC+グループという形で、CS組織の構造に合わせた 権限管理サービスを開発 • Graphqlのdirectiveを用いた権限情報 ◦ Schemaにメタ情報として付与 ◦
Gateway的なサービスのところでAPIへのアクセスを制限
16 ありがとうございました