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
WireGuardとOpenID Connectの連携をGoで実装してみた
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kurochan
August 19, 2021
Technology
3.3k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WireGuardとOpenID Connectの連携をGoで実装してみた
社内勉強会で発表した資料です
https://github.com/kurochan/oidc-wireguard-vpn/
Kurochan
August 19, 2021
More Decks by Kurochan
See All by Kurochan
ABEMAのバグバウンティの取り組み
kurochan
1
1k
2026年の個人的テーマ: 「計算機を燃やせ🔥」
kurochan
1
150
つなぐ、届ける、変える- コンテンツ配信の最前線ト——ク
kurochan
0
140
サイバーエージェント流クラウドコスト削減施策「みんなで金塊堀太郎」
kurochan
4
3.2k
AWS Elemental MediaPackageと格闘🤼
kurochan
2
110
サイバーエージェントでのSlack活用事例 @ 2025
kurochan
5
250
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
370
入門 電気通信事業者
kurochan
13
5.8k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
9
6.3k
Other Decks in Technology
See All in Technology
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
180
From Prompt Engineering to Loop Engineering
shibuiwilliam
1
280
Lightning近況報告
kozy4324
0
230
#エンジニアBooks 30分でわかる 「技術記事を書く技術」 / engineer-books 2026-06-30
jnchito
1
130
「勝手に広まる」人気 AI エージェントを爆速で作ろう!(AWS Summit Japan 2026講演資料)
minorun365
PRO
10
2.6k
FPGAの開発コンペでZephyrを使ってみた
iotengineer22
0
210
AI 不只幫你寫 Code: 當專案從 300 暴增到 1500, 我們如何撐住 DevOps
appleboy
0
280
サイバーエージェントにおけるAI推進戦略と変革への取り組み
shotatsuge
0
600
IaC コードを資産へ:AWS CDK 社内ライブラリと横断展開 / aws-summit-japan-2026
gotok365
10
1.6k
AI-DLCを “そのまま導入しなかった”話 ~組織に合わせてアジャストした 私たちの実践共有~
hiroramos4
PRO
1
440
ぼっちではじめた登壇が「51名」「241件」の発信に化けた
subroh0508
1
330
打造你的 AI 工作流:Agent Skill + MCP 實戰工作坊
appleboy
0
140
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.5k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Deep Space Network (abreviated)
tonyrice
0
210
Embracing the Ebb and Flow
colly
88
5.1k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.3k
How to Ace a Technical Interview
jacobian
281
24k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Music & Morning Musume
bryan
47
7.2k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
440
Paper Plane (Part 1)
katiecoart
PRO
0
9.3k
Transcript
WireGuardとOpenID Connectの連携を Goで実装してみた 株式会社サイバーエージェント AI事業本部 黒崎 優太 (@kuro_m )
黒崎 優太 • 株式会社サイバーエージェント AI事業本部 アプリ運⽤センター • ⼩売業界 x DXの事業をやっています
• バックエンドエンジニア 直近はAWSとかGCPとかセキュリティまわりの 仕事をしていました @kuro_m @kurochan #times_kurochan
VPNを作ってみました
VPNサーバが欲しくなった経緯 • AI事業本部内のDX本部に異動しました • 詳しくはこれを⾒てください • https://speakerdeck.com/kurochan/retail-dx-project
聞こえてくる会話 • 🧑💻「xxxのシステムにアクセスするために出社しないといけないんですよね…」
聞こえてくる会話 • 🧑💻「xxxのシステムにアクセスするために出社しないといけないんですよね…」 • 👩💻「固定IPじゃないといけないらしくて、⾃宅のIPはすぐ変わっちゃうし…」
聞こえてくる会話 • 🧑💻「xxxのシステムにアクセスするために出社しないといけないんですよね…」 • 👩💻「固定IPじゃないといけないらしくて、⾃宅のIPはすぐ変わっちゃうし…」 • 🧑💻「xxxのスマホアプリの検証にもIPアドレス制限が…」
VPNサーバの需要があるらしい • 様々な企業やシステムと連携しつつ開発する業態 • 何かしらの認証/暗号化 + IPアドレス制限という仕組みはよく出てくる • 個⼈的にはIPアドレス制限に頼りすぎずゼロトラストな環境は作っていきたい
VPNサーバを作ってみる • VPNサーバの実現⽅法は⾊々ありそう • OSSもあるし、商⽤VPNもありそう • アカウントの棚卸し業務をやりたくない • サイバーエージェントには内製の認証基盤がある •
OpenID Connectもあるよ • アプリ運⽤センターに異動してきてGo⾔語を書く必要が • 直近広告事業で6年半くらいScalaを書いていた • Go⾔語よく知らない… • Go⾔語の勉強がてら作ってみる
作ったものの概要
WireGuard + OpenID Connect • 簡単に構築ができて、社内のID基盤とも連携できるのを⽬指す • 固定IP + 通信の暗号化のためにWireGuard
VPN • 社内のID基盤を使った認証をするためにOpenID Connect • https://github.com/kurochan/oidc-wireguard-vpn/
WireGuard • [CB ] WireGuard:次世代耐乱⽤性カーネルネットワークトンネル by Jason Donenfeld • https://www.slideshare.net/codeblue_jp/cb
-donenfeld-ja
WireGuard • https://www.slideshare.net/codeblue_jp/cb -donenfeld-ja
WireGuard • Linux, Windows, iOS, Androidで動くOSSのVPN • 最近のLinuxだとカーネルに組み込まれています • 構築,
設定も簡単 • 単体で使うのももちろんおすすめ
OpenID Connect • OAuth . (認可) + 認証のしくみ • WEBサイトの間でのIDを連携するのに特化
• シングルサインオンが実現できます
OpenID Connect CIBA Flow • OpenID Connectは「Webサイト」に特化している • WireGuardのように、ブラウザアプリケーションではないアプリも認証したい •
CIBA = Client Initiated Backchannel Authentication • クライアント側から認証を開始して、裏側(何かしらの⽅法)で認証/認可をする • VPN接続しようとしたらSlack経由で認証/認可のリクエストが⾶んでくるなど
WireGuardに追加の認証を挟む • WireGuardは⾮常にシンプルなVPNなので、 処理をフックするような仕組みはありません!💥 • WireGuardで認証したあと、VPNの接続は確⽴したが、通信はブロックすると いう状態を作る • OpenID Connectで認証認可が成功したら通信を通す
認証認可前
WireGuardに追加の認証を挟む • WireGuardは⾮常にシンプルなVPNなので、 処理をフックするような仕組みはありません!💥 • WireGuardで認証したあと、VPNの接続は確⽴したが、通信はブロックすると いう状態を作る • OpenID Connectで認証認可が成功したら通信を通す
認証認可後
nftables • Linuxのネットワークファイアウォールであるnetfliterを管理する • iptablesを置き換えるフレームワーク • iptablesも裏側でnetfliterを使っている場合も
WireGuard + OpenID Connect + nftables • なんかいけそう! • WireGuardのVPNが通ったとしても、退職や部署異動するとOpenID
Connect で認可されなくなる • WireGuardのサーバ側の設定は定期棚卸しくらいでよくなる
使い⽅(ユーザ向け) • クライアントの設定する • PCもスマホもだいたい⼀緒
使い⽅(ユーザ向け) • VPN接続する
使い⽅(ユーザ向け) • Slackに通知がくるので認可する
VPN経由で通信ができる
実装の紹介
netlink • github.com/vishvananda/netlink • Linuxのネットワークインターフェイスを作ったり設定をいじる仕組み
WireGuard • github.com/WireGuard/wgctrl-go • WireGuardのインターフェイスの詳細設定をする • 秘密鍵やVPNクライアントの公開鍵のペアなど
WireGuardで新規接続を検知する • 最後にセッション(鍵交換など)を更新した時間がわかるので、その時刻の⽐較 をすると新規接続を検知できそう
追加認証をしていない⼈の通信をブロックする • github.com/google/nftables • nftablesでフィルタルールを動的に制御する
nftables • ルールの追加の例
nftables • ルールの追加の例
OpenID Connect CIBA Flow • github.com/okzk/go-ciba • OIDC CIBA Flowを簡単に実現できる
• 社内IdPとここで連携しています
OpenID Connect CIBA Flow • github.com/okzk/go-ciba • OIDC CIBA Flowを簡単に実現できる
• 社内IdPとここで連携しています
追加認証をしていない⼈の通信を許可する • nftablesのセットを操作する
追加認証をしていない⼈の通信を許可する • nftablesのセットを操作する
追加認証をしていない⼈の通信を許可する • nftablesのセットを操作する
gracefulなシャットダウン • プロセスを停⽌させた時に余計なネットワークの設定などが残っていてほしく ない • プロセス停⽌のシグナルをフックする • シグナルもチャネルとして扱える • シグナルを何かしら受け取るまで無限にブロックさせておいて、
シグナルを受け取ったらシャットダウン処理をする
作ってみた感想 • 便利そうな気がするので育てていきたい • yamlファイルで設定しないでDBを使うとweb UIとかから設定投⼊ができそう • Linuxと連携させる部分はScalaよりだいぶ書きやすかった • テストの書き⽅や⾒通しのいい設計はプロダクト開発をやりつつ
勉強していきたい
None