$30 off During Our Annual Pro Sale. View Details »

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. Cloud
    fl
    are Zero Trustを利⽤した


    セキュアな開発環境へのアクセス⼿法の確⽴
    株式会社サイバーエージェント AI事業本部

    黒崎 優太 (@kuro_m
    88
    )

    View Slide

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

    View Slide

  3. 最近書いた記事
    • サイバーエージェントのGitHub CopilotのAnalyticsデータを公開!

    利⽤開始から約3ヶ⽉でエンジニアの⽣産性は向上したのか
    https://developers.cyberagent.co.jp/blog/archives/
    9

    View Slide

  4. インターネットゼミ
    • インターネットの勉強をするゼミ


    • 社内ゼミ制度


    • サイバーエージェントの実験⽤ASであるAS
    6
    3 79 0
    を運⽤しています

    View Slide

  5. 普段の仕事
    • AI事業本部にて⼩売企業のDXを⽀援をする事業をやっています


    • スマホアプリ


    • データ分析基盤

    View Slide

  6. 本⽇話すこと
    • AI事業本部にて⼩売企業のDXを⽀援をする事業をやっています


    • スマホアプリ


    • データ分析基盤


    • 様々な取引先の様々なシステムを開発


    • 関わる⼈も様々


    • 接続先も様々


    • ⼈や役割によって違うアクセス範囲を適切に管理したい


    • 本⽇のテーマ!

    View Slide

  7. Before Cloud
    fl
    are Zero Trust

    View Slide

  8. VPN!
    • VPNによるセキュリティ担保


    • WireGuardを採⽤


    • 個⼈的に知⾒があった


    • ハマりどころがほとんどない


    • 唯⼀のハマりどころは→くらいかも
    https://kurochan-note.hatenablog.jp/entry/
    9

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. WireGuardとOpenID Connectの連携
    • 実装してみて、⼀応動いたが…


    • 便利だったようで⼀気に数⼗⼈使うようになった


    • 実装に必要な前提知識が意外と多くてメンテを誰かに引き継げる気がしなかった


    • WireGuard、OIDC CIBA Flow、nftables、netlink、Go⾔語でのこれらの動的操作


    • 固定IPだけに頼るのはイケてない


    • せっかく社内に内製IdPがあるので柔軟な認可の制御もしたい


    • VPC内アクセスとかもしたい

    View Slide

  19. After Cloud
    fl
    are Zero Trust

    View Slide

  20. 脱WireGuard
    • WireGuardの導⼊によって開発プロジェクト⽤のVPNの需要は把握


    • もっとやりたいことが増えてきた


    • 通信先によってアクセス元IPアドレスを変えたい


    • ⼈や役割によってアクセス可否を変えたい(認可をちゃんとやりたい)


    • 通信先によってVPNを切り替えるのが⾯倒


    • ちょうどいい製品を探し始めた

    View Slide

  21. 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


    • 通信量課⾦なし!!!!!!

    View Slide

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

    View Slide

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

    View Slide

  24. DNS応答の書き換え
    • Cloud
    fl
    are Zero TrustのFirewall Policyを利⽤


    • www.cyberagent.co.jp のDNSの応答を100.64.1.1に書き換える例

    View Slide

  25. DNS応答の書き換え

    View Slide

  26. 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

    View Slide

  27. 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

    View Slide

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

    View Slide

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


    • アプリを作成するとNetwork Policyが2つ⽣成される


    • AllowとBlock

    View Slide

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

    View Slide

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


    • アプリを作成するとNetwork Policyが2つ⽣成される


    • Denyするルール


    • 通信先が100.64.0.1


    • すべてブロック

    View Slide

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


    • アプリを作成するとNetwork Policyが2つ⽣成される


    • AllowとBlock


    • 認可制御したい単位でemail listを作成すれば⼈、役割に応じてアクセス制御可能!

    View Slide

  33. 認証
    • OIDCで社内IdPで認証する


    • セットアップ時に⼀回だけやればOK


    • WARP or
    1
    .
    1
    .
    1
    .
    1
    アプリでスライダをオンにするだけで接続完了!

    View Slide

  34. 認証
    • OIDCで社内IdPで認証する


    • セットアップ時に⼀回だけやればOK


    • WARP or
    1
    .
    1
    .
    1
    .
    1
    アプリでスライダをオンにするだけで接続完了!


    • クライアント側でやってもらうことがとても少ない!


    • アプリをインストールしてログインしてくださいという指⽰だけで済む


    • Split Tunnelの設定などもCloud
    fl
    are Zero Trustの管理者側で制御可能

    View Slide

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

    View Slide

  36. One more thing

    View Slide

  37. cloud
    fl
    ared + nginxの置き換え
    • サーバのセットアップが⼿動で⾯倒だった


    • 接続先が増えるごとにサーバにsshしてnginxのcon
    fi
    gを書き換えていた


    • コンテナ化して配布、構築を楽にしたい欲がでてきた


    • ついでにcloud
    fl
    aredとTCP Proxyを1つのコンテナにして起動を簡単にしたい


    • ついでに定期的にS
    3
    から設定ファイルを読んで⾃動更新してほしい


    • ついでにDNSで上書きする対象のInternal IPアドレスの管理も⾯倒なので

    IPv
    6
    single stackにして⾃動採番したい

    View Slide

  38. TCP Proxyの⾃前実装
    • Goでデーモンを実装


    • 1分に1回S
    3
    から設定ファイルをダウンロードする


    • 差分を検出したらアップデート


    • Linuxのdummyインターフェイスにlistenが必要なIPアドレスを付与


    • Goでnetlink経由でインターフェイスを制御


    • 1万個IPアドレスを振っても⽬⽴った異常はなかったので実⽤性問題なし


    • TCP Proxyは勉強がてら書いてみた


    • proxyなので流れてきたデータを右から左に受け流す感じ


    • 負荷をかけてもメモリ使⽤量は30MBいかないくらい

    View Slide

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

    View Slide

  40. TCP Proxyのアプリでcloud
    fl
    aredも管理する
    • TCP Proxyのプロセス内でcloud
    fl
    aredを起動する


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

    View Slide

  41. まとめ
    • Cloud
    fl
    are Zero Trustを使ってVPNの代替を実現しました


    • 85⼈くらいがこのシステムを活⽤しています!


    • 認可制御もできて運⽤コストも安くて⾮常に満⾜しています!


    • 他にもセキュリティ機能が⾊々あるので活⽤していきたい


    • Magic WANやMagic Transitも遊んでみたい


    • Enterprise契約が必要なので躊躇しています

    View Slide