Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PEK2025: Multi-Tenancy Design in Ameba

Avatar for Kumo Ishikawa Kumo Ishikawa
September 18, 2025
1.3k

PEK2025: Multi-Tenancy Design in Ameba

Avatar for Kumo Ishikawa

Kumo Ishikawa

September 18, 2025
Tweet

Transcript

  1. ❏横断組織 Service Reliability Group (SRG)所属 ❏Ameba Platform 担当 ❏得意領域 Security

    Multi-Tenant・Zero Trust・Runtime Monitoring CI/CD ArgoCD・FluxCD・Terraform 今年Kubestronautになった 石川 雲 Kumo Ishikawa
  2. Ameba Platformについて 全てのAmebaサービスを支える開発者プラットフォーム Developer Platform for All Ameba Services Amebaサービスのインフラ基盤

    + 開発者プラットフォーム 2019年: PoC開始 2020年: サービス移管開始 2025年: 22サービス以上移管完了 最終の目標:
  3. 初期のテナント課題と解決 課題 ❏ サービスごとに閉じてブラックボックス化 し、引き継ぎが困難 ❏ 組織の変化で新担当者のリードタイム が大きい アプローチ(2019年~2023年) ★

    Ameba Platform立ち上げ ★ 解決の方向性は 「みんなで一緒に面倒見よう 」 ◦ 誰でも状況を把握できるようにし、属人化や引き継ぎ困難を防ぐ ◦ この時点では「マルチテナントによる分離」は不要、共通化と可視化を優先
  4. “A core aspect of broadly used platforms is that they

    are efficient only if they are built to be multitenant ” 「広く使われるプラットフォームの中核的な特徴は、 マルチテナントとして構築されているときだけ効率的 になることで す。」               –– Camille Fournier, Platform Engineering
  5. 単一テナント設計の限界 単一テナント設計の特徴 1. 全てのテナントに同じ設計 を当てはめる ◦ テナント開発者もプラットフォーム開発者も妥協しないといけない 2. 妥協できず、要件に応えられない場合、新しい基盤を作る ◦

    基盤がサービスごとに乱立し、少人数ではメンテが回らなくなる 結果 ❏ 運用コストがどんどん増える ❏ 特定の人に依存する属人化が進む (Amebaでは上記の全てが発生した)
  6. Amebaのテナント設計(2019) 「みんなで一緒に面倒見よう」の設計 (k8s) ❏ 1 Product = 1 Namespace, 1

    Tenant = 1 Namespace Group = N Namespace ❏ 二つのNamespace Group: Ameba-System とPlatform-System Hierarchical Namespaces Controller利用 (2025年4月アーカイブ)
  7. Amebaのテナント設計の限界(2021) 一部サービスのセキュリティ要件「 全レイヤーにおける完全分離 」を満たせない 1. 認証認可 ✅ ❏ IAM Role再分離

    2. コンピューティング ✅ ❏ Pod Topology Spread Constraintsなど導入 3. ストレージ ✅ ❏ IAM Policy設計 4. ネットワーク ❌ ⇦ ボトルネック ❏ Pod to Pod: 2021年当時、EKS上StableなNetwork Policyソリューションがない ❏ Pod to AWS: 2021年当時、Security Groups for Pod機能がIstioと衝突があったため、使用不可
  8. Amebaのテナント設計の限界(2021) 一部サービスのセキュリティ要件「 全レイヤーにおける完全分離 」を満たせない 1. 認証認可 2. コンピューティング 3. ストレージ

    4. ネットワーク ⇨該当サービスは 別クラウドアカウント で運用 ❏ Platformチームがそのサービスの運用を支援 ❏ セキュリティ要件がクリアしてから移管を検討
  9. マルチテナントを支える分離の原 則 1. 二分法から始める分離戦略 : 一言で説明できるのが目標 2. 成熟度に応じた分離基準 : 分離の成熟度に応じてテナントの種類を増やす

    3. 分離の起点は常にIdentity : IdP Role = All Layer Role 4. テナントの境界線の明示 : Identityの一貫性と効果を発揮するため *あくまで一つの観点です。
  10. 各レイヤーでの実装 Ameba Platformで実際に実装された内容 1. Identity : Role & Permission 2.

    Cloud(AWS) : IAM 3. Kubernetes(EKS) : RBAC & Security Groups For Pod & NetworkPolicy 4. DevTools (ArgoCD/Github/Datadog ): Identity連携
  11. 各レイヤーでの実装 Ameba Platformで実際に実装された内容 1. Identity : Role & Permission 2.

    Cloud(AWS) : IAM 3. Kubernetes(EKS) : RBAC & Security Groups For Pod & NetworkPolicy 4. DevTools (ArgoCD/Github/Datadog ): Identity連携
  12. Identityレイヤーでの実装 Permissionの分け方 (別のレイヤーで実現) ◦ Protected Tenant Developer = Common Developer

    + Tenants Permission ◦ Platform Admin = Common Developer + Tenants Permission - Secret Permission
  13. 各レイヤーでの実装 Ameba Platformで実際に実装された内容 1. Identity : Role & Permission 2.

    Cloud(AWS) : IAM 3. Kubernetes(EKS) : RBAC & Security Groups For Pod & NetworkPolicy 4. DevTools (ArgoCD/Github/Datadog ): Identity連携
  14. IAM Policyの設計 Fine-grainedのABAC設計ポイント 1. Allowベースで最小権限を構成 Denyを挟むと設計が複雑になるため 2. NotActions/NotResourcesを活用 例外的なActionとResourceを除外 3.

    複数のStatementに分割してOR条件を実現 Allowの積み上げ、除外されたResource/Actionの追加、AND Conditionの回避 4. Tag Base(ABAC)とARN BaseのCondition/Resource管理 ResourceTagが使えるサービスと使えないサービスがあるため、TagとARNを併用 5. 上位権限のロールは、下位権限Policyを継承しつつ追加Policyで拡張
  15. 各レイヤーでの実装 Ameba Platformで実際に実装された内容 1. Identity : Role & Permission 2.

    Cloud(AWS) : IAM 3. Kubernetes(EKS) : RBAC & Security Groups For Pod & NetworkPolicy 4. DevTools (ArgoCD/Github/Datadog ): Identity連携
  16. Kubernetesレイヤーでの実装 RBACの特徴 ❏ Role (何を許可するか) + Subject (誰に許可するか User/Group) ❏

    Allowベースで権限を追加する仕組み 、指定がない限り禁止 ❏ Label等による条件付き制御ができない ため、Namespaceごとに権限を分ける ❏ Namespace / Namespace Group = テナント、Namespaceが実質的な境界線 ❏ そのNamespace/Namespace GroupにどのUser/Groupを紐付けるかが分離の核心 Namespace Groupについて Hierarchical Namespace ControllerなどのNamespace抽象化ツールで、RBACの継承 ・伝搬を実現可能 、ただし小規模環境では導入不要
  17. Kubernetesレイヤーでの実装 Networkの制御 ❏ ネットワーク ❌ ⇦ ボトルネック ◦ Pod to Pod:

    2021年当時、EKS上StableなNetwork Policyソリューションがない ◦ Pod to AWS: 2021年当時、Security Groups for Pod機能がIstioと衝突があったため、使用不可 ❏ 2023年以降いずれも改善された ✅ ◦ Pod to Pod: EKS vpccniにL4のNetwork Policy が実装 ◦ Pod to AWS: Security Groups for Pod 再検証した結果、衝突現象が解消された ❏ DB/CacheのSGでPod SGのみを許可する ◦ Network PolicyがL7まで対応できたら、Security Groups for Podが不要になる
  18. 各レイヤーでの実装 Ameba Platformで実際に実装された内容 1. Identity : Role & Permission 2.

    Cloud(AWS) : IAM & Security Groups 3. Kubernetes(EKS) : RBAC & Security Groups For Pod & NetworkPolicy 4. DevTools (ArgoCD/Github/Datadog ): Identity連携
  19. DevToolsレイヤーでの実装 Argo CD ❏ DexのSAML 2.0 Connectorは非推奨(2025/7) ❏ Github Teams経由で連携

    ❏ NamespaceごとにProjectを作成 ❏ 各Argo CD ProjectにGroupsを設定
  20. Datadog ❏ Datadog Teams SAML 2.0連携 ❏ 難点 ❏ 既存リソースの多くが手動作成→Access設定も手動

    ❏ APM Trace/Spanは未対応 ❏ 個人情報など、APMに入る前に難読化 DevToolsレイヤーでの実装
  21. 1. テナント境界線表現の限界 ❏ Ownerタグだけでは表現しきれないケースもある ❏ 例: Protected Tenant A と

    B が限定的に共有する Job System・中間処理ワークロード 2. Protected Tenant間通信の複雑さ ❏ 既存設計はNon-Protected / Protected 間の分離が中心 ❏ Protected Tenant間で共有するワークロードを扱えない ❏ 例: Cloudflare Tunnel・外部API向けのGateway Podなど 現行設計の制約とその対処
  22. 2. Protected Tenant間通信の複雑さ ◦ Network Policyの特例・組み合わせを増やす ◦ Tenantの需要に応じた宣言的設定をサポート ◦ Open

    Application Model(KubeVela)の活用 ◦ 難点: ▪ CrossNamespaceのリソース管理 ▪ →NetworkPolicyの複雑化 Protected Tenant間通信の複雑 さ