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

Cloudflare Zero Trustを利用したセキュアな開発環境へのアクセス手法の確立

Kurochan
September 06, 2023

Cloudflare Zero Trustを利用したセキュアな開発環境へのアクセス手法の確立

Cloudflare Meet-up Tokyo Vol.2で発表した資料です
https://cfm-cts.connpass.com/event/291753/

Kurochan

September 06, 2023
Tweet

More Decks by Kurochan

Other Decks in Technology

Transcript

  1. 本⽇話すこと • AI事業本部にて⼩売企業のDXを⽀援をする事業をやっています • スマホアプリ • データ分析基盤 • 様々な取引先の様々なシステムを開発 •

    関わる⼈も様々 • 接続先も様々 • ⼈や役割によって違うアクセス範囲を適切に管理したい • 本⽇のテーマ!
  2. WireGuardとOpenID Connectの連携 • 実装してみて、⼀応動いたが… • 便利だったようで⼀気に数⼗⼈使うようになった • 実装に必要な前提知識が意外と多くてメンテを誰かに引き継げる気がしなかった • WireGuard、OIDC

    CIBA Flow、nftables、netlink、Go⾔語でのこれらの動的操作 • 固定IPだけに頼るのはイケてない • せっかく社内に内製IdPがあるので柔軟な認可の制御もしたい • VPC内アクセスとかもしたい
  3. 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 • 通信量課⾦なし!!!!!!
  4. 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
  5. 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
  6. 認可制御 • 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
  7. 認可制御 • Cloud fl are AccessのPrivate Network Applicationを利⽤ • アプリを作成するとNetwork

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

    Policyが2つ⽣成される • AllowとBlock • 認可制御したい単位でemail listを作成すれば⼈、役割に応じてアクセス制御可能!
  9. 認証 • OIDCで社内IdPで認証する • セットアップ時に⼀回だけやればOK • WARP or 1 .

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

    1 . 1 . 1 アプリでスライダをオンにするだけで接続完了! • クライアント側でやってもらうことがとても少ない! • アプリをインストールしてログインしてくださいという指⽰だけで済む • Split Tunnelの設定などもCloud fl are Zero Trustの管理者側で制御可能
  11. アカウント棚卸しと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円くらい
  12. cloud fl ared + nginxの置き換え • サーバのセットアップが⼿動で⾯倒だった • 接続先が増えるごとにサーバにsshしてnginxのcon fi

    gを書き換えていた • コンテナ化して配布、構築を楽にしたい欲がでてきた • ついでにcloud fl aredとTCP Proxyを1つのコンテナにして起動を簡単にしたい • ついでに定期的にS 3 から設定ファイルを読んで⾃動更新してほしい • ついでにDNSで上書きする対象のInternal IPアドレスの管理も⾯倒なので 
 IPv 6 single stackにして⾃動採番したい
  13. TCP Proxyの⾃前実装 • Goでデーモンを実装 • 1分に1回S 3 から設定ファイルをダウンロードする • 差分を検出したらアップデート

    • Linuxのdummyインターフェイスにlistenが必要なIPアドレスを付与 • Goでnetlink経由でインターフェイスを制御 • 1万個IPアドレスを振っても⽬⽴った異常はなかったので実⽤性問題なし • TCP Proxyは勉強がてら書いてみた • proxyなので流れてきたデータを右から左に受け流す感じ • 負荷をかけてもメモリ使⽤量は30MBいかないくらい
  14. 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 アドレスであっても問題ない
  15. TCP Proxyのアプリでcloud fl aredも管理する • TCP Proxyのプロセス内でcloud fl aredを起動する •

    cloud fl aredもGoで実装されているが内部実装が変わって壊れると⾯倒なのでサブプロセス としてcloud fl aredのバイナリを起動
  16. まとめ • Cloud fl are Zero Trustを使ってVPNの代替を実現しました • 85⼈くらいがこのシステムを活⽤しています! •

    認可制御もできて運⽤コストも安くて⾮常に満⾜しています! • 他にもセキュリティ機能が⾊々あるので活⽤していきたい • Magic WANやMagic Transitも遊んでみたい • Enterprise契約が必要なので躊躇しています