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
Cloudflare Zero Trustを利用したセキュアな開発環境へのアクセス手法の確立
Search
Kurochan
September 06, 2023
Technology
10
3.1k
Cloudflare Zero Trustを利用したセキュアな開発環境へのアクセス手法の確立
Cloudflare Meet-up Tokyo Vol.2で発表した資料です
https://cfm-cts.connpass.com/event/291753/
Kurochan
September 06, 2023
Tweet
Share
More Decks by Kurochan
See All by Kurochan
入門 電気通信事業者
kurochan
12
5.3k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
9
5.2k
GoでTCP Proxyを実装してみよう
kurochan
1
880
サイバーエージェントの広告配信におけるIPoEトラフィックの概況
kurochan
0
410
スケールするというのはどういうことなのか
kurochan
14
4.6k
サイバーエージェントのGitHub Copilot導入と 開発生産性
kurochan
46
42k
セキュキャンを卒業してその後
kurochan
0
1.3k
サイバーエージェントの実践×実験Snowflake 導入の経緯から最新機能のトライアルまで / How Snowflake Is Used In CyberAgent - Go To the Future
kurochan
1
1k
入門Open Policy Agent: Policy as Codeを目指して / introduction-to-open-policy-agent
kurochan
0
560
Other Decks in Technology
See All in Technology
継続的にアウトカムを生み出し ビジネスにつなげる、 戦略と運営に対するタイミーのQUEST(探求)
zigorou
0
510
alecthomas/kong はいいぞ / kamakura.go#7
fujiwara3
1
300
社外コミュニティで学び社内に活かす共に学ぶプロジェクトの実践/backlogworld2024
nishiuma
0
250
Wvlet: A New Flow-Style Query Language For Functional Data Modeling and Interactive Data Analysis - Trino Summit 2024
xerial
1
110
UI State設計とテスト方針
rmakiyama
2
310
ハイテク休憩
sat
PRO
2
120
大幅アップデートされたRagas v0.2をキャッチアップ
os1ma
2
520
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
210
サービスでLLMを採用したばっかりに振り回され続けたこの一年のあれやこれや
segavvy
2
360
バクラクのドキュメント解析技術と実データにおける課題 / layerx-ccc-winter-2024
shimacos
2
1k
ずっと昔に Star をつけたはずの思い出せない GitHub リポジトリを見つけたい!
rokuosan
0
150
ゼロから創る横断SREチーム 挑戦と進化の軌跡
rvirus0817
2
260
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Scaling GitHub
holman
458
140k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Optimising Largest Contentful Paint
csswizardry
33
3k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
GitHub's CSS Performance
jonrohan
1030
460k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
We Have a Design System, Now What?
morganepeng
51
7.3k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Speed Design
sergeychernyshev
25
670
Transcript
Cloud fl are Zero Trustを利⽤した セキュアな開発環境へのアクセス⼿法の確⽴ 株式会社サイバーエージェント AI事業本部 黒崎
優太 (@kuro_m 88 )
ࠇ࡚ ༏ଠ גࣜձࣾαΠόʔΤʔδΣϯτ AIࣄۀຊ෦ @kurochan @kuro_m88 αΠόʔΤʔδΣϯτ CTO౷ׅࣨ
最近書いた記事 • サイバーエージェントのGitHub CopilotのAnalyticsデータを公開! 利⽤開始から約3ヶ⽉でエンジニアの⽣産性は向上したのか https://developers.cyberagent.co.jp/blog/archives/ 9
インターネットゼミ • インターネットの勉強をするゼミ • 社内ゼミ制度 • サイバーエージェントの実験⽤ASであるAS 6 3 79
0 を運⽤しています
普段の仕事 • AI事業本部にて⼩売企業のDXを⽀援をする事業をやっています • スマホアプリ • データ分析基盤
本⽇話すこと • AI事業本部にて⼩売企業のDXを⽀援をする事業をやっています • スマホアプリ • データ分析基盤 • 様々な取引先の様々なシステムを開発 •
関わる⼈も様々 • 接続先も様々 • ⼈や役割によって違うアクセス範囲を適切に管理したい • 本⽇のテーマ!
Before Cloud fl are Zero Trust
VPN! • VPNによるセキュリティ担保 • WireGuardを採⽤ • 個⼈的に知⾒があった • ハマりどころがほとんどない •
唯⼀のハマりどころは→くらいかも https://kurochan-note.hatenablog.jp/entry/ 9
WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita
WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita
WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita
WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita
WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita
WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita
WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita
WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita
WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita
WireGuardとOpenID Connectの連携 • 実装してみて、⼀応動いたが… • 便利だったようで⼀気に数⼗⼈使うようになった • 実装に必要な前提知識が意外と多くてメンテを誰かに引き継げる気がしなかった • WireGuard、OIDC
CIBA Flow、nftables、netlink、Go⾔語でのこれらの動的操作 • 固定IPだけに頼るのはイケてない • せっかく社内に内製IdPがあるので柔軟な認可の制御もしたい • VPC内アクセスとかもしたい
After Cloud fl are Zero Trust
脱WireGuard • WireGuardの導⼊によって開発プロジェクト⽤のVPNの需要は把握 • もっとやりたいことが増えてきた • 通信先によってアクセス元IPアドレスを変えたい • ⼈や役割によってアクセス可否を変えたい(認可をちゃんとやりたい) •
通信先によってVPNを切り替えるのが⾯倒 • ちょうどいい製品を探し始めた
Cloud fl are Zero Trust • いろんな機能があって充実している • アイデア次第で⾊々できそう •
その分最初は使い⽅を迷うかも…? • スマホ対応は必須だった • スマホアプリの開発で開発環境のAPIのアクセス制御もしたいのでブラウザ対応だけではダメ • APIで操作するためのクライアントライブラリが公式で⽤意されている • https://github.com/cloud fl are/cloud fl are-go • 安い!!!!!! • $ 3 /user • 現在85ユーザ使っているので、 $3 x 8 5 = $ 255 /month • 通信量課⾦なし!!!!!!
Cloud fl are Zero Trustの導⼊ https://developers.cyberagent.co.jp/blog/archives/ 9
Cloud fl are Zero Trustの導⼊ • 構成の概要
DNS応答の書き換え • Cloud fl are Zero TrustのFirewall Policyを利⽤ • www.cyberagent.co.jp
のDNSの応答を100.64.1.1に書き換える例
DNS応答の書き換え
cloud fl aredに中継する • cloud fl aredで100.64.0.1をlistenする • Cloud fl
are Zero Trustの設定で100.64.0.1/24をcloud fl aredに転送する • nginxで本来の宛先にTCP Proxy
TCP Proxyをさせる理由 • 普通に考えるとCloud fl are Zero TrustでHTTPの転送をしたい • 通信先はHTTPSもある
• cloud fl ared+nginxでHTTPSの転送をさせようとするとTLSを終端しないといけない • Cloud fl are Zero TrustはHTTPSの終端にも対応 • ただしCloud fl are提供のroot証明書をクライアント(PC、スマホ)にインストールが必要 • root証明書を信⽤してもらうということは通信内容の覗き⾒が可能、ログも残っちゃう • あくまでproxyがしたいのであって今回はMITMは不要 • 必要ないのにroot証明書のインストールをさせるのはセキュリティ的な懸念も • TCP(L 4 )でproxyすることで暗号化したままアクセス制御が可能に! https://developers.cloud fl
認可制御 • Cloud fl are AccessのPrivate Network Applicationを利⽤
認可制御 • Cloud fl are AccessのPrivate Network Applicationを利⽤ • アプリを作成するとNetwork
Policyが2つ⽣成される • AllowとBlock
認可制御 • Cloud fl are AccessのPrivate Network Applicationを利⽤ • アプリを作成するとNetwork
Policyが2つ⽣成される • Allowするルール • 通信先が100.64.0.1 • 認証しているユーザのメールアドレスが がいずれかのemail listに所属 • users-project-aaa-dev • users-project-bbb-admin users-project-aaa-dev users-project-bbb-admin
認可制御 • Cloud fl are AccessのPrivate Network Applicationを利⽤ • アプリを作成するとNetwork
Policyが2つ⽣成される • Denyするルール • 通信先が100.64.0.1 • すべてブロック
認可制御 • Cloud fl are AccessのPrivate Network Applicationを利⽤ • アプリを作成するとNetwork
Policyが2つ⽣成される • AllowとBlock • 認可制御したい単位でemail listを作成すれば⼈、役割に応じてアクセス制御可能!
認証 • OIDCで社内IdPで認証する • セットアップ時に⼀回だけやればOK • WARP or 1 .
1 . 1 . 1 アプリでスライダをオンにするだけで接続完了!
認証 • OIDCで社内IdPで認証する • セットアップ時に⼀回だけやればOK • WARP or 1 .
1 . 1 . 1 アプリでスライダをオンにするだけで接続完了! • クライアント側でやってもらうことがとても少ない! • アプリをインストールしてログインしてくださいという指⽰だけで済む • Split Tunnelの設定などもCloud fl are Zero Trustの管理者側で制御可能
アカウント棚卸しとemail listの同期 • OIDCでログイン & アカウント作成はできるが削除(棚卸し)ができない • 社内IdPのAPIとCloud fl are
Zero TrustのAPIを利⽤して同期 • 社内IdPのAPIで社員の異動退職に伴う失効を管理 • 社内IdPのAPIで社員に紐づくロールごとにCloud fl are Zero Trustのemail listを同期 • AWS Lambdaで3分に1回同期処理を実⾏ • たぶん⽉額コスト10円くらい
One more thing …
cloud fl ared + nginxの置き換え • サーバのセットアップが⼿動で⾯倒だった • 接続先が増えるごとにサーバにsshしてnginxのcon fi
gを書き換えていた • コンテナ化して配布、構築を楽にしたい欲がでてきた • ついでにcloud fl aredとTCP Proxyを1つのコンテナにして起動を簡単にしたい • ついでに定期的にS 3 から設定ファイルを読んで⾃動更新してほしい • ついでにDNSで上書きする対象のInternal IPアドレスの管理も⾯倒なので IPv 6 single stackにして⾃動採番したい
TCP Proxyの⾃前実装 • Goでデーモンを実装 • 1分に1回S 3 から設定ファイルをダウンロードする • 差分を検出したらアップデート
• Linuxのdummyインターフェイスにlistenが必要なIPアドレスを付与 • Goでnetlink経由でインターフェイスを制御 • 1万個IPアドレスを振っても⽬⽴った異常はなかったので実⽤性問題なし • TCP Proxyは勉強がてら書いてみた • proxyなので流れてきたデータを右から左に受け流す感じ • 負荷をかけてもメモリ使⽤量は30MBいかないくらい
IPv 6 アドレスの⾃動採番 • fd 00 ::/ 8 IPv 6
ULA(IPv 4 でいうPrivate IPに似ている)から/64で clud fl aredが利⽤するpre fi xを切り出す • 56 bitあるのでちゃんと管理しなくても乱数で決めておけばOK • fd 00 :caca::/ 64 を使う例 • ホスト名のsha 2 5 6 hashを取って上位64bitを取り出す • www.cyberagent.co.jp => ddc 95 2 9 d 2 d 9 d 21 c 4 • pre fi xとsha 25 6 hashの上位64bitをくっつける • fd 00 :caca::ddc 9 : 529 d: 2 d 9 d: 21 c 4 • Cloud fl are Zero TrustのDNS PolicyでOverride Policyを書く • www.cyberagent.co.jp => fd 0 0 :caca::ddc 9 : 529 d: 2 d 9 d: 21 c 4 • プロキシ先に関してのみCloud fl areによりIPv 6 アドレスのみ返却されるのでIPv 6 Single Stackになるが、 TCP Proxyがあるので最終的な転送先がIPv 4 アドレスであっても問題ない
TCP Proxyのアプリでcloud fl aredも管理する • TCP Proxyのプロセス内でcloud fl aredを起動する •
cloud fl aredもGoで実装されているが内部実装が変わって壊れると⾯倒なのでサブプロセス としてcloud fl aredのバイナリを起動
まとめ • Cloud fl are Zero Trustを使ってVPNの代替を実現しました • 85⼈くらいがこのシステムを活⽤しています! •
認可制御もできて運⽤コストも安くて⾮常に満⾜しています! • 他にもセキュリティ機能が⾊々あるので活⽤していきたい • Magic WANやMagic Transitも遊んでみたい • Enterprise契約が必要なので躊躇しています