📝

CloudflareとmdBookとIdPでMarkdownドキュメントをサクッと限定公開する

に公開

こんにちは、@key60228です。

ビジネスメンバーを含めた社内の一部の人向けにMarkdownでサクッとドキュメントを公開したいな〜〜なんか良い方法ないかな〜〜と考えながらCloudflareコンソールポチポチしてたら実現出来ちゃったので記事に残します。

やりたいこと

  • ドキュメントをgit管理下におきたい (≒ Markdownで書きたい)
  • ドキュメントをどこかにホスティングしたい
  • ホスティングしたドキュメントを閲覧できる人を制限したい (閲覧する人の属性はDeveloper、ML/DS、その他ビジネスメンバーと幅広い)

How to

ドキュメントの準備

  1. User Guideを参照に、mdBookをインストールします。

  2. mdbook init ${project name} でmdBookプロジェクトを作成します。

  3. Markdownでドキュメントを書きます。 (これも詳細はUser Guideを参照してください)

  4. mdbook build でmdBookプロジェクトをビルドします。

  5. 終わり。簡単ですね。

Cloudflare Pagesの作成

  1. コンソールから Use direct upload なPages Projectを作成します。

Project作成

  1. 一旦適当なアセットをアップロードしてデプロイします。

一時アセットのアップロード

  1. 終わり。簡単ですね。

モック

Cloudflare Zero Trustの設定

  1. コンソールからZero Trust DashboardのAccessを開き、IdPを追加します。

Zero Trust Dashboard

  1. ここは連携したいIdPに合わせて設定すればOKですが、今回はサイバーエージェントの社内認証/認可基盤であるPERMANとOIDCで連携させたいため、OpenID Connectにします。

IdPの追加

  1. IdPの設定を行います。この辺りは各IdPや認証プロトコルによって異なるため割愛します。

IdPの設定

  1. Zero Trust Dashboardに戻り、AccessのPolicyを作成します。

Policyの作成

  1. Login Methods Selectorのruleを追加し、先ほど設定したIdPをValueに指定します。

Policyの設定

  1. 再度Dashboardに戻り、Applicationを作成します。今回は Self-hosted にします。

Applicationの作成

  1. 作成したCloudflare PagesのDomainをPublic hostnameに指定し、先ほど作成したPolicyを選択します。Login methodsはPERMANのみ許可します。

Applicationの設定1

Applicationの設定2

  1. 先ほど作成したCloudflare Pagesのドメインにアクセスしてみると、サインインが求められるようになっているのが分かります。

サインイン要求

  1. 最後にCloudflare Pagesに本来ホスティングしたいmdBookプロジェクトをアップロードして完了です。ほんのちょっとだけ手間でしたね。

ドキュメントページ

考えたけど要件を満たさなかったこと

GitHub PagesのPrivate Pages

最初に考えましたが、今回閲覧させたい人の中にはGitHubアカウントを持っていない人たちも含まれているため不採用としました。

各クラウドベンダーのStorageなど

S3&CloudFront&Lambda@Edgeなどでも実現可能かとは考えましたが、やりたいことに対してやや大袈裟感が否めず見送り。

One-time PIN

Cloudflare Zero TrustのOne-time PINだけでも限定公開は可能ですが、閲覧可能ユーザーの管理をCloudflareではなくIdP側に集約したかったためカスタムAccess設定を行うことにしました。

その他

VercelやNetlifyなども一瞬考えましたが、既にプロダクトでもCloudflareを使用していることから、今回はCloudflareにしました。

終わりに

今回はジャスト検証だったのでPages&コンソールポチポチ&手動アップロードな記事になってしまいましたが、Workersでの再立ち上げ、CI/CDの整備、IaC化まで出来たらまた記事書こうと思います (2回目)。

宣伝

AI Shiftではエンジニアの採用に力を入れています!
少しでも興味を持っていただけましたら、カジュアル面談でお話しませんか?
(オンライン・19時以降の面談も可能です!)

【面談フォームはこちら】
https://hrmos.co/pages/cyberagent-group/jobs/1826557091831955459

AI Shift Tech Blog

Discussion