Slide 1

Slide 1 text

Cloud fl are Zero Trustを利⽤した セキュアな開発環境へのアクセス⼿法の確⽴ 株式会社サイバーエージェント AI事業本部 
 黒崎 優太 (@kuro_m 88 )

Slide 2

Slide 2 text

ࠇ࡚ ༏ଠ גࣜձࣾαΠόʔΤʔδΣϯτ AIࣄۀຊ෦ @kurochan @kuro_m88 αΠόʔΤʔδΣϯτ CTO౷ׅࣨ

Slide 3

Slide 3 text

最近書いた記事 • サイバーエージェントのGitHub CopilotのAnalyticsデータを公開! 
 利⽤開始から約3ヶ⽉でエンジニアの⽣産性は向上したのか https://developers.cyberagent.co.jp/blog/archives/ 9

Slide 4

Slide 4 text

インターネットゼミ • インターネットの勉強をするゼミ • 社内ゼミ制度 • サイバーエージェントの実験⽤ASであるAS 6 3 79 0 を運⽤しています

Slide 5

Slide 5 text

普段の仕事 • AI事業本部にて⼩売企業のDXを⽀援をする事業をやっています • スマホアプリ • データ分析基盤

Slide 6

Slide 6 text

本⽇話すこと • AI事業本部にて⼩売企業のDXを⽀援をする事業をやっています • スマホアプリ • データ分析基盤 • 様々な取引先の様々なシステムを開発 • 関わる⼈も様々 • 接続先も様々 • ⼈や役割によって違うアクセス範囲を適切に管理したい • 本⽇のテーマ!

Slide 7

Slide 7 text

Before Cloud fl are Zero Trust

Slide 8

Slide 8 text

VPN! • VPNによるセキュリティ担保 • WireGuardを採⽤ • 個⼈的に知⾒があった • ハマりどころがほとんどない • 唯⼀のハマりどころは→くらいかも https://kurochan-note.hatenablog.jp/entry/ 9

Slide 9

Slide 9 text

WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita

Slide 10

Slide 10 text

WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita

Slide 11

Slide 11 text

WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita

Slide 12

Slide 12 text

WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita

Slide 13

Slide 13 text

WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita

Slide 14

Slide 14 text

WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita

Slide 15

Slide 15 text

WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita

Slide 16

Slide 16 text

WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita

Slide 17

Slide 17 text

WireGuardとOpenID Connectの連携 https://speakerdeck.com/kurochan/wireguardtoopenid-connectfalselian-xi-wogoteshi-zhuang-sitemita

Slide 18

Slide 18 text

WireGuardとOpenID Connectの連携 • 実装してみて、⼀応動いたが… • 便利だったようで⼀気に数⼗⼈使うようになった • 実装に必要な前提知識が意外と多くてメンテを誰かに引き継げる気がしなかった • WireGuard、OIDC CIBA Flow、nftables、netlink、Go⾔語でのこれらの動的操作 • 固定IPだけに頼るのはイケてない • せっかく社内に内製IdPがあるので柔軟な認可の制御もしたい • VPC内アクセスとかもしたい

Slide 19

Slide 19 text

After Cloud fl are Zero Trust

Slide 20

Slide 20 text

脱WireGuard • WireGuardの導⼊によって開発プロジェクト⽤のVPNの需要は把握 • もっとやりたいことが増えてきた • 通信先によってアクセス元IPアドレスを変えたい • ⼈や役割によってアクセス可否を変えたい(認可をちゃんとやりたい) • 通信先によってVPNを切り替えるのが⾯倒 • ちょうどいい製品を探し始めた

Slide 21

Slide 21 text

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 • 通信量課⾦なし!!!!!!

Slide 22

Slide 22 text

Cloud fl are Zero Trustの導⼊ https://developers.cyberagent.co.jp/blog/archives/ 9

Slide 23

Slide 23 text

Cloud fl are Zero Trustの導⼊ • 構成の概要

Slide 24

Slide 24 text

DNS応答の書き換え • Cloud fl are Zero TrustのFirewall Policyを利⽤ • www.cyberagent.co.jp のDNSの応答を100.64.1.1に書き換える例

Slide 25

Slide 25 text

DNS応答の書き換え

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

認可制御 • Cloud fl are AccessのPrivate Network Applicationを利⽤

Slide 29

Slide 29 text

認可制御 • Cloud fl are AccessのPrivate Network Applicationを利⽤ • アプリを作成するとNetwork Policyが2つ⽣成される • AllowとBlock

Slide 30

Slide 30 text

認可制御 • 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

Slide 31

Slide 31 text

認可制御 • Cloud fl are AccessのPrivate Network Applicationを利⽤ • アプリを作成するとNetwork Policyが2つ⽣成される • Denyするルール • 通信先が100.64.0.1 • すべてブロック

Slide 32

Slide 32 text

認可制御 • Cloud fl are AccessのPrivate Network Applicationを利⽤ • アプリを作成するとNetwork Policyが2つ⽣成される • AllowとBlock • 認可制御したい単位でemail listを作成すれば⼈、役割に応じてアクセス制御可能!

Slide 33

Slide 33 text

認証 • OIDCで社内IdPで認証する • セットアップ時に⼀回だけやればOK • WARP or 1 . 1 . 1 . 1 アプリでスライダをオンにするだけで接続完了!

Slide 34

Slide 34 text

認証 • OIDCで社内IdPで認証する • セットアップ時に⼀回だけやればOK • WARP or 1 . 1 . 1 . 1 アプリでスライダをオンにするだけで接続完了! • クライアント側でやってもらうことがとても少ない! • アプリをインストールしてログインしてくださいという指⽰だけで済む • Split Tunnelの設定などもCloud fl are Zero Trustの管理者側で制御可能

Slide 35

Slide 35 text

アカウント棚卸しと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円くらい

Slide 36

Slide 36 text

One more thing …

Slide 37

Slide 37 text

cloud fl ared + nginxの置き換え • サーバのセットアップが⼿動で⾯倒だった • 接続先が増えるごとにサーバにsshしてnginxのcon fi gを書き換えていた • コンテナ化して配布、構築を楽にしたい欲がでてきた • ついでにcloud fl aredとTCP Proxyを1つのコンテナにして起動を簡単にしたい • ついでに定期的にS 3 から設定ファイルを読んで⾃動更新してほしい • ついでにDNSで上書きする対象のInternal IPアドレスの管理も⾯倒なので 
 IPv 6 single stackにして⾃動採番したい

Slide 38

Slide 38 text

TCP Proxyの⾃前実装 • Goでデーモンを実装 • 1分に1回S 3 から設定ファイルをダウンロードする • 差分を検出したらアップデート • Linuxのdummyインターフェイスにlistenが必要なIPアドレスを付与 • Goでnetlink経由でインターフェイスを制御 • 1万個IPアドレスを振っても⽬⽴った異常はなかったので実⽤性問題なし • TCP Proxyは勉強がてら書いてみた • proxyなので流れてきたデータを右から左に受け流す感じ • 負荷をかけてもメモリ使⽤量は30MBいかないくらい

Slide 39

Slide 39 text

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 アドレスであっても問題ない

Slide 40

Slide 40 text

TCP Proxyのアプリでcloud fl aredも管理する • TCP Proxyのプロセス内でcloud fl aredを起動する • cloud fl aredもGoで実装されているが内部実装が変わって壊れると⾯倒なのでサブプロセス としてcloud fl aredのバイナリを起動

Slide 41

Slide 41 text

まとめ • Cloud fl are Zero Trustを使ってVPNの代替を実現しました • 85⼈くらいがこのシステムを活⽤しています! • 認可制御もできて運⽤コストも安くて⾮常に満⾜しています! • 他にもセキュリティ機能が⾊々あるので活⽤していきたい • Magic WANやMagic Transitも遊んでみたい • Enterprise契約が必要なので躊躇しています