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

Azure AD対応の認証プロキシサーバをGoで作っている話

Azure AD対応の認証プロキシサーバをGoで作っている話

YAEGASHI Takeshi

November 13, 2021
Tweet

More Decks by YAEGASHI Takeshi

Other Decks in Technology

Transcript

  1. Azure AD対応の
    認証プロキシサーバを
    Goで作っている話
    2021/11/13 Go Conference 2021 Autumn
    八重樫 剛史 Takeshi Yaegashi

    View Slide

  2. 自己紹介
    八重樫 剛史 Takeshi Yaegashi
    株式会社バンダイナムコスタジオ所属
    Linux・Unix・OSS・Go 言語が好きなエンジニア
    組み込みシステム開発、ゲームサーバ開発、 CI/CD インフラ開発、
    開発環境のクラウドシフトなどの業務に従事
    活動場所
    ホームページ・ブログ https://l0w.dev
    GitHub https://github.com/yaegashi
    Twitter https://twitter.com/hogegashi

    View Slide

  3. クラウドの静的ウェブアプリ (SWA)
    ● 静的ウェブアプリの流行
    ○ Hugo のような Static Site Generator で作る静的ウェブサイト
    ○ TypeScript や React で作るシングルページアプリ
    ● 静的ウェブアプリに適したクラウドサービス
    ○ GitHub Pages
    ○ GitLab Pages
    ○ Netlify
    ○ Azure Static Web Apps / App Service
    ○ AWS Amplify
    ○ Google Firebase Hosting

    View Slide

  4. クラウドの社内向け静的ウェブアプリ
    ● 全てのユーザーについて認証・認可が必要
    ○ IPアドレス・イントラネット・ VPNに頼るアクセス制御は甘え (ゼロトラストセキュリティ )
    ○ 特定の会社や部署だけに見せる、といった細かいレベルで制御したいことがよくある
    ○ Web サイトの一部分だけに認証をかけたいということも
    ● 細かい認可のニーズに対応できるサービスがない
    ○ 例えばAzure App Serviceにおいてはユーザー認証なら自動的にやってくれるが (Easy-Auth)、
    認可についてはWebアプリが自分自身で判断する必要がある
    ○ アプリごとになんらかの認可のためのコードを書く必要があり敷居が高い
    ○ 認証だけでなく認可までコードを書かずに設定できる Webサーバがほしい

    View Slide

  5. pswa - Protected Static Web Apps
    ● Go による認証・認可つきの Web コンテンツ・プロキシサーバ
    ● Simple web content/proxy server that embodies enterprise zero trust security
    ● https://github.com/yaegashi/pswa
    ● Docker image: ghcr.io/yaegashi/pswa

    View Slide

  6. pswa 特徴
    ● Azure Active Directory の OpenID Connect によるユーザーの認証・認可
    (Azure AD 以外の IdP にも対応を検討中)
    ● 認証ユーザーの ID トークンに含まれる groups クレームからロールを定義
    ロールを使ってルートごとのアクセス認可設定
    ● ルートごとにリライト・リダイレクト・プロキシが設定可能
    ● /index.html などへのフォールバックが設定可能
    シングルページアプリのホストにも利用できる

    View Slide

  7. pswa.config.json - 設定ファイルの例
    ● routes: ルートパスとアクセスを許可
    するロール、リライトやリダイレクトな
    どの処理を定義
    ● roles: ロールの名前とそれに属する
    AzureAD グループのオブジェクトIDを
    定義
    ● Azure Static Web Apps で使用する
    staticwebapps.config.json に似せた
    {
    "routes": [
    {
    "route": "/admin/*",
    "allowedRoles": ["admin"]
    },
    {
    "route": "/internal/*",
    "allowedRoles": ["authenticated"]
    },
    {
    "route": "/api/*",
    "proxy": "http://backend:8080/api"
    }
    ],
    "roles": [
    {
    "role": "admin",
    "members": [
    "34a36796-6043-4dea-85e1-c6ad121a54d4",
    "06fe36df-51ab-49d9-aa3e-2b0034c2cbd1",
    "5bafeeac-804c-4ea4-95c6-11696535c8cb"
    ]
    }
    ]
    }

    View Slide

  8. pswa - デモ
    ● https://pswademo1.azurewebsites.net/
    ● Azure App Service の Linux B1 に ghcr.io/yaegashi/pswa コンテナをデプロイ
    ● Hugo で作った静的サイトを Visual Studio Code 拡張でアップロード

    View Slide

  9. pswa のコンポーネント
    ● github.com/coreos/go-oidc - OpenID Connect RP
    ○ IdP の .well-known/openid-configuration を取得してエンドポイントを自動設定
    ○ JWKS による ID トークンの署名検証
    ● github.com/gobwas/glob - Route path pattern matching
    ○ "*.{jpg,gif,png}" のようなパターンマッチは標準ライブラリではできない
    ● go.uber.org/zap - Logger
    ● github.com/felixge/httpsnoop - HTTP access logging
    ● github.com/gorilla/sessions - Session cookie store

    View Slide

  10. pswa 開発進捗
    ● 典型的な登壇ドリブン開発(CFPを出してから考える)
    ● 構想は一年以上、開発期間はまだ一週間
    ● 各所に明確なニーズがあるので2021年中に完成させたい

    View Slide

  11. おわり
    ● 認証・認可機能が充実した Web コンテンツ・プロキシサーバを作ってます
    ● コメントやプルリクいただけるとうれしいです
    ● ご清聴ありがとうございました

    View Slide