Cloudflare Accessを使ってAPIスキーマを安全に共有する
スキーマ共有
みなさん、バックエンドとフロントエンド間のスキーマ共有はどのようにしていますか?
会社での業務であればそのあたりはすでに整備されていることが多く、各々の方法で簡単に共有ができていると思います。
しかし複数人でのプライベートな開発ではなかなかそういった部分に時間が割けず、その都度チャットでやりとりしたり、Notionなどにまとめたりということも少なくないのではないでしょうか。
その問題を解決するためにCloudflare Pages
とCloudflare Access
だけで簡単に、そして安全に共有する方法を紹介します。
Open API
私たちはOpenAPIでスキーマを記述し、フロントエンドはopenapi-generator-cli
を使ってAPIクライアントを自動生成しています。
schema.ymlからHTMLを生成
そのままのスキーマでは見通しが悪いのでredoc-cliを使ってHTMLを生成していきます。
redoc-cli
はデフォルトでキレイなUIを作成してくれるのでとても便利です。
実際のコマンドは以下のようになります。
"codegen:html": "redoc-cli bundle src/libs/openapi/schema.yml --output dist/index.html"
bundle
の後にスキーマへのパスを記述し、--output
で生成先のパスを指定します。
Cloudflare Pagesにデプロイ
上記で生成したHTMLをCloudflare Pagesを使ってデプロイしていきます。
ここではGithub Actionsを使って自動でデプロイするフローを考えます。
cloudflare/wrangler-actionを使えばapiToken
とaccountId
を用意するだけで大丈夫です。
GitHubに接続する
実際にCIを動かす前にWorker&Pages
からアプリケーションを作成する必要があります。
Create
からConnect to Git
を選択するとGitHubのリポジトリと接続することができます。
Build Settingは以下のように設定しておけば問題ないでしょう。都度プロジェクトに合わせて変更してください。
APIトークン作成
CIからデプロイするためAPIトークンが必要となります。
Workers&Pages
→Manage API tokens
で設定できます。
Create Custom Token
でPermissionを以下のようにすれば問題なく動きます。
PagesにデプロイするActions
--project-name
には先ほど作成したPagesのプロジェクト名をいれます。
name: Deploy API docs to Cloudflare Pages
'on':
push:
branches:
- develop
jobs:
build_and_deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version-file: .node-version
- name: Install dependencies and build
run: npm ci && npm run codegen:html
- name: Deploy to Cloudflare Pages
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
accountId: ${{ secrets.CF_ACCOUNT_ID }}
command: pages deploy dist --project-name=<project name>
Cloudflare Accessを適用
ここまでの簡単なステップでCIからスキーマをビルドし、デプロイする流れができました。
しかし現状では誰でもページにアクセスできてしまいます。これではチーム内のスキーマが世界中に共有されてしまうのでアクセス制御する必要があります。
そこで今回はCloudflare Zero TrustのCloudflare Access
を使います。
タブのZero Trust
からプラン選択をしますが、今回はfreeプランを使用することにします。
Access groupsを作成する
タブのAccess groups
を選択し、Define group criteria
からEmailsを選択し、チームメンバーのメールアドレスを追加していきます。
Access Policyからチームを適用
グループが作成できたらPagesの画面に戻り、設定からAccess Policy
をオンにします。
オンにするとManage
というボタンが出てくるので、そこからCloudflare Accessのページへ遷移します。
そして作成したプロジェクトに先ほどのグループを適用させれば、公開されたスキーマのアクセス制御が完成します!🎉
適用後の画面
適切に設定が完了していると以下のようにアクセス時にOTPが求められるようになっています。
めでたしめでたし🎉
Discussion