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
クラウドネイティブ時代のセキュリティの考え方とIstioによる実装 / cloud nativ...
Search
Shunsuke Miyoshi
July 23, 2019
Programming
13
3.7k
クラウドネイティブ時代のセキュリティの考え方とIstioによる実装 / cloud native security and istio
Shunsuke Miyoshi
July 23, 2019
Tweet
Share
More Decks by Shunsuke Miyoshi
See All by Shunsuke Miyoshi
RFCの歩き方
smiyoshi
1
210
Istio RBAC入門
smiyoshi
0
310
GitlabとIstioでつくるコンテナネイティブCICD
smiyoshi
1
1.2k
A STORY OF USELESS CRYPTOGRAPHY
smiyoshi
0
150
Advanced Security on Kubernetes with Istio
smiyoshi
0
370
Other Decks in Programming
See All in Programming
みんなでプロポーザルを書いてみた
yuriko1211
0
230
色々なIaCツールを実際に触って比較してみる
iriikeita
0
320
Jakarta EE meets AI
ivargrimstad
0
260
Make Impossible States Impossibleを 意識してReactのPropsを設計しよう
ikumatadokoro
0
140
OpenTelemetryでRailsのパフォーマンス分析を始めてみよう(KoR2024)
ymtdzzz
5
2k
CSC509 Lecture 12
javiergs
PRO
0
140
イベント駆動で成長して委員会
happymana
1
300
カスタムしながら理解するGraphQL Connection
yanagii
1
1.5k
ActiveSupport::Notifications supporting instrumentation of Rails apps with OpenTelemetry
ymtdzzz
1
210
cXML という電子商取引の トランザクションを支える プロトコルと向きあっている話
phigasui
3
2.3k
Dev ContainersとGitHub Codespacesの素敵な関係
ymd65536
1
140
開発効率向上のためのリファクタリングの一歩目の選択肢 ~コード分割~ / JJUG CCC 2024 Fall
ryounasso
0
430
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
93
13k
Code Review Best Practice
trishagee
64
17k
Teambox: Starting and Learning
jrom
133
8.8k
Scaling GitHub
holman
458
140k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
What's new in Ruby 2.0
geeforr
343
31k
How GitHub (no longer) Works
holman
310
140k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
820
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Transcript
クラウドネイティブ時代の セキュリティの考え方とIstioによる実装 2019年7月23日 三好 俊介 (
[email protected]
) 富士通株式会社 Copyright 2019 FUJITSU
LIMITED 0
目次 ◼クラウドネイティブ時代のセキュリティ ◼ イメージ図 ◼ Zero Trust Network ◼Istio ◼
Istioの概要 ◼ 可視化について ◼ アクセス制御の方法 ◼ デモ ◼まとめ Copyright 2019 FUJITSU LIMITED 1
Who am I ? ◼富士通株式会社 三好俊介 ◼最近の仕事 ◼ インフラ基盤の構築・運用 ◼
(Backend/Frontend)アプリケーションの開発 ◼コンテナ技術に関して ◼ Kubernetes v1.5, Istio v0.4くらいから参戦 (現在はKubernetes v1.14, Istio v1.2) ◼ Certified Kubernetes Administrator • 2017年9月に取得 Copyright 2019 FUJITSU LIMITED 2 何でも屋
Copyright 2019 FUJITSU LIMITED 3 クラウドネイティブ
クラウドネイティブの定義 ◼CNCF Cloud Native Definition v1.0 ◼ 要約 • クラウドを前提とした環境で
• 変化に強いスケーラブルなアプリの構築、実行の能力を • 組織にもたらす技術 ◼技術要素 ◼ コンテナ、マイクロサービスなど Copyright 2019 FUJITSU LIMITED 4 参考: https://github.com/cncf/toc/blob/master/DEFINITION.md#%E6%97%A5%E6%9C%AC%E8%AA%9E%E7%89%88
Copyright 2019 FUJITSU LIMITED 5 クラウドネイティブな世界
私が思うクラウドネイティブな世界 ◼クラウドネイティブな世界 ◼ 人だけでなくもの(サービス・デバイスにも権限を与えられる) ◼ 会社の中、外という概念はない ※ 働き方改革という潮流が後押ししてくれている • リモートワークなど
Copyright 2019 FUJITSU LIMITED 6 適切な人・ものに適切な権限を与えられ、 その権限があればいつでもどこからでもアクセスできる世界
クラウドネイティブな世界のイメージ図 Copyright 2019 FUJITSU LIMITED 7 PC in 自宅 PC
in 会社 認証サーバ Webサーバ DB GW GW クラウド × × Webはok 正統なユーザ && 権限あり? 抜け道はなし 証明書 証明書
クラウドネイティブ世界のセキュリティ ◼Zero Trust Network ◼ 2010年に提唱された新しいセキュリティモデル ◼ コンセプト: 何も信じるな、必ず疑ってかかれ •
社内ネットワークだからと言って本当に信頼できるのか? • 特権VPNでアクセスしてきたからといって本当に管理者か? ◼実現に必要なこと ◼ 誰と通信しているのか(通信相手の認証) ◼ 通信路の安全性(通信路の暗号化) Copyright 2019 FUJITSU LIMITED 8
事例紹介 ◼BeyondCorp(Google) ◼ Googleで7年の知見をもとに設計された新しいセキュリティモデル ◼ VPNを使用しなくても すべての従業員が どこからでも仕事が可能 ◼ すべてのリソースへの
アクセスは必ず認証、 認可、暗号化される Copyright 2019 FUJITSU LIMITED 9 参考: https://cloud.google.com/beyondcorp/?hl=ja , https://www.atmarkit.co.jp/ait/articles/1808/16/news015.html
事例紹介 ◼BeyondCorp(Google) ◼ Googleで7年の知見をもとに設計された新しいセキュリティモデル ◼ VPNを使用しなくても すべての従業員が どこからでも仕事が可能 ◼ すべてのリソースへの
アクセスは必ず認証、 認可、暗号化される Copyright 2019 FUJITSU LIMITED 10 参考: https://cloud.google.com/beyondcorp/?hl=ja , https://www.atmarkit.co.jp/ait/articles/1808/16/news015.html Googleのような超巨大企業でもできている → 夢物語ではない
導入の手順 ◼Googleはどのようにしていったのか 1. 可視化 ◼ いつだれがどこにアクセスしてきたのか? → 現状を把握できていないのに縛るのはダメ ◼ セキュリティを上げるからUXは落ちますっていうのは最悪
→ デジタルツインのような環境で徹底的なシミュレーション 2. 制御 ◼ 完全に動作を把握できたら考えていくべし → 先に制御するとトラブル時の原因究明が非常に困難 Copyright 2019 FUJITSU LIMITED 11
前半のまとめ ◼クラウドネイティブな世界とは? ◼ 適切な人に適切な権限を与えられ、 その権限があればいつでもどこからでもアクセスできる世界 ◼クラウドネイティブな世界のセキュリティモデル ◼ Zero Trust Network
• コンセプト: 何も信じるな、必ず疑ってかかれ • 必要条件: 通信する相手の認証と通信路の暗号化 Copyright 2019 FUJITSU LIMITED 12
Istio Copyright 2019 FUJITSU LIMITED 13
クラウドネイティブとIstio ◼Istioとは ◼ クラウドネイティブなアプリの運用を楽にしてくれるインフラ技術 ◼どんなことができるのか ◼ サービス間のつながりの可視化と制御 ◼ Zero Trust
Networkを実現 Copyright 2019 FUJITSU LIMITED 14
Istioの機能 ◼Istioのコア機能 ◼ Traffic Management → ルーティングなどのトラフィック制御 ◼ Observability →
通信内容やトラフィック状況などの監視 ◼ Security → 認証やアクセス制限、暗号化 Copyright 2019 FUJITSU LIMITED 15 Istioのいいところ ・アプリケーションの変更なしで導入できる ・証明書の管理なしでセキュアな通信が可能
Istioのコンポーネント Copyright 2019 FUJITSU LIMITED 16 16 Control Plane Pilot
Mixer Citadel Envoy アプリケーションX Pod Data Plane Service X Service Y https, gRPC, … TLS証明書 の管理 Policy Check Telemetry収集 Envoyの 設定の送信 Envoy アプリケーションY Pod
Istioの全体イメージ図 Copyright 2019 FUJITSU LIMITED 17 サービス A サービス B
サービス C サービス D サービス E Istio Control Plane Envoy間通信の監視と制御 Envoy(Istio Data Plane) エッジプロキシ 各サービス間の通信を肩代わり
Istioでできること ◼クラウドネイティブへの道のり 1. 可視化(Observability) ◼ Istioのコア機能 2. 制御 ◼ Istio
RBAC Copyright 2019 FUJITSU LIMITED 18
Istioによる可視化 ◼何を可視化できるのか ◼ サービスとサービスのつながり • どのサービスが通信しているか • どういう状態なのか(アクセス数、サービスの負荷など) Copyright 2019
FUJITSU LIMITED 19
Istioでの可視化の例(Prometheus) Copyright 2019 FUJITSU LIMITED 20
Istioでの可視化の例(Service Mesh) ◼kialiとは? ◼ Service Meshの可視化プロジェクト ◼ URL: https://www.kiali.io/ Copyright
2019 FUJITSU LIMITED 21 可視化できるもの ・どのサービスがつがっているか ・サービスの状態はどうか
Istioでの可視化の例(分散トレーシング) Copyright 2019 FUJITSU LIMITED 22
可視化のアイデア ◼可視化のアイデア ◼ IstioではすべてのサービスにEnvoyが付属 ◼ Envoyからデータを取得すれば現状がわかる ◼Envoyから情報を取得する Copyright 2019 FUJITSU
LIMITED 23 Mixer Adapter Prometheus ・・・ App X Envoy App Y Envoy Zipkin
(余談)Mixer Adapterは自作できる ◼Mixer Adapterとは? ◼ Mixerから収集した情報を独自のBackendコンポーネントに送信するための Adapter → 任意のサービスにIstioからの情報を送信できる ◼自作にあたって
◼ AdapterとBackendはgRPCで通信 ◼ まだ開発途中 Copyright 2019 FUJITSU LIMITED 24 参考: https://github.com/istio/istio/wiki/Mixer-Out-Of-Process-Adapter-Dev-Guide
Istioで制御 ◼制御の基本 ◼ Default: all deny ◼ 必要な人やサービスに必要な分だけ権限を与える Copyright 2019
FUJITSU LIMITED 25 ユーザA Webサーバ DB GW × 管理機関 証明書 基本はDeny Webサーバならok
Istioで制御(続き) ◼Istioにおける制御モデル Copyright 2019 FUJITSU LIMITED 26 Webサーバ DB Envoy
管理機関 Citadel 証明書 Envoyで認証認可 Kubernetes Cluster Envoy 証明書の管理 ・発行や失効処理など
Istio RBACの設定例(1) ◼Istio RBACをenableにする Copyright 2019 FUJITSU LIMITED 27 enable-istio-rbac.yaml
apiVersion: "rbac.istio.io/v1alpha1" kind: ClusterRbacConfig metadata: name: default spec: mode: 'ON_WITH_EXCLUSION' exclusion: namespaces: ["istio-system","kube-system"] 名前はdefault固定 ・ON_WITH_EXCLUSIONか ON_WITH_INCLUSIONをおすすめ ・少なくともsystem関係の通信は 通るようにしたほうがいい
Istio RBACの設定例(2) ◼Serviceに対するRoleを作成 Copyright 2019 FUJITSU LIMITED 28 service-role.yaml apiVersion:
"rbac.istio.io/v1alpha1" kind: ServiceRole metadata: name: myservicerole namespace: default spec: rules: - services: ["service.default.svc.cluster.local"] methods: ["GET", "POST"] 対象となるサービス ※公式にはexact matchだけでなく、 prefixやsuffixもサポートとあるがなぜか動かず・・・ *.svc.cluster.localは動く constraintsでさらに細かな情報も設定可能 (例) version1のみに適用など 参考: https://istio.io/docs/reference/config/authorization/istio.rbac.v1alpha1/
Istio RBACの設定例(3) ◼作成したRoleをKubernetesのService Accountに適用 Copyright 2019 FUJITSU LIMITED 29 service-role-binding.yaml
apiVersion: "rbac.istio.io/v1alpha1" kind: ServiceRoleBinding metadata: name: myservicerolebinding namespace: default spec: subjects: - user: "cluster.local/ns/default/sa/myserviceaccount" # - user: "*" roleRef: kind: ServiceRole name: "myservicerole" Roleの適用先 Kubernetesの場合はサービスアカウント(正式名称) 外部公開サービスなどは"*"とする 参考: https://istio.io/docs/concepts/security/#authorization-policy
ちょっと裏側の話 ◼Istioはどうやって通信を制御しているのか ◼ Envoyのパラメータとして設定 Kubernetes CRDをapply後、Pilotが変更を検知し、それをEnvoyに伝える ◼Istio RBACのデバッグ方法 ◼ 対象PodのEnvoyのConfig情報を見る
◼ envoy.filters.http.rbacの部分を参照 Copyright 2019 FUJITSU LIMITED 30 参考: https://istio.io/docs/ops/security/debugging-authorization/ $ kubectl exec <pod-name> -c istio-proxy -- curl localhost:15000/config_dump -s > config_dump $ less condig_dump --pattern="envoy.filters.http.rbac" { "name": "envoy.filters.http.rbac", "config": { "rules": { "policies": { "myservicerole": { ・・・
デモ ◼デモの内容 ◼ kiali + Istioでどのように可視化できるのか ◼ Istio RBACで制御する方法 ◼デモアプリケーション
◼ GitHub: https://github.com/sh-miyoshi/istio-sample Copyright 2019 FUJITSU LIMITED 31
Istio導入における注意点 Copyright 2019 FUJITSU LIMITED 32
Istioのインストールについて ◼インストールは大変 ◼ コンポーネント多過ぎ ◼ オンプレだとネットワーク大変 → 最初はクラウドプロバイダーで検証がおすすめ ◼ GKEだとチェックを入れるだけでIstioを導入できる
Copyright 2019 FUJITSU LIMITED 33
本番導入にあたって ◼最初は小さく始めるべし ◼ Service Meshが必要なほど巨大な場所ではたいてい一筋縄ではいかない ◼ 限られた範囲のみ導入してテスト ↑これを繰り返す ◼Control Planeはしっかり守るべし
◼ Citadelが乗っ取られるとセキュリティは意味がなくなる ◼ Mixerが死ぬとログ・メトリクス情報がとれなくなる Copyright 2019 FUJITSU LIMITED 34
まとめ ◼クラウドネイティブな世界 = 適切な権限がある人ならいつでもどこからでもアクセスできる世界 = Zero Trust Network ◼セキュリティの考え方 ◼
まずは可視化 ◼ そのあと制御 ◼Istioでできること ◼ 可視化: コア機能 ◼ 制御: Istio RBAC Copyright 2019 FUJITSU LIMITED 35
None
外部サービスとの通信について ◼Istioの通信制御 ◼ 本来はEnvoy同士で制御 ◼Envoyがないクラウド上のサービスと通信できるのか ◼ CRDで特別に許可を与える • 参考: https://istio.io/docs/tasks/traffic-management/egress/egress-control/#envoy-
passthrough-to-external-services ※最新バージョンだとデフォルトでつながる ↑ 設定が難しくて大変なため Copyright 2019 FUJITSU LIMITED 37
マルチクラウド時代のIstio ◼クラスタ間通信 ◼ 基本的にIstioはKubernetesクラスタ内の通信を制御 ◼ 複数クラスタにまたがる場合は工夫が必要 • 一応マルチクラスタIstioはある URL: https://istio.io/docs/concepts/multicluster-deployments/
→ SaaSとかのほうが安心できる Copyright 2019 FUJITSU LIMITED 38