できること
Azure Static Web AppsはMicrosoft Entra ID・GitHub・Twitterによるソーシャル認証をconfigファイルだけで組み込めます。`staticwebapp.config.json`の`auth`セクションにプロバイダーを設定し、`routes`でロール制限を追加するだけで、ログイン済みユーザーのみが特定のパスにアクセスできる構成が実現します。
IPアドレス制限はAzure Static Web Appsのプライベートエンドポイント機能(Standard+プラン)を使うことで設定できます。特定のVNetやIPレンジからのみアクセスを許可する設定により、社内ネットワークからの閲覧に限定したレビュー環境を構築できます。
- 相手がログインなしで開ける状態か確認する
- PCとスマホで最低1回ずつ表示を確認する
- 内部情報・個人情報・不要な外部送信が残っていないか見る
- レビュー期限と修正時の差し替え方を決めておく
できないこと
パスワードだけで誰でも閲覧できる「シンプルなパスワード保護」はAzure Static Web Apps標準機能にありません。Microsoftアカウントを持たない外部のクライアントに対して、URLとパスワードだけでアクセスを許可する仕組みを作るにはカスタムのFunctions実装が必要です。
閲覧期限の自動無効化機能も存在しません。プレビュー環境はPRのcloseと連動して削除できますが、本番チャンネルに近い長期運用のレビュー環境では期限が存在しません。「〇月〇日以降はアクセスできないようにしてください」という要件を満たすには、Logic AppsまたはAzure Functionsでブランチ削除を自動化するスクリプトが必要です。
認証と期限の違い
認証の欠落を補う方法として、Azure Functionsでカスタム認証エンドポイントを実装し、パスワードの検証をサーバー側で行うアーキテクチャがあります。Static Web AppsはFunctionsとのシームレスな統合をサポートするため、同じazure static web appsプロジェクト内にFunctionsを追加してAPIルートに認証ミドルウェアを組み込む設計が可能です。ただし実装には数時間〜半日の工数が発生します。
期限管理の欠落を補う最小工数の方法として、Azure Logic Appsのスケジューラーを使ってレビュー用ブランチのAzure Rest API(`DELETE /staticSites/{name}/builds/{id}`)を特定日時に自動実行する設定があります。ノーコードで設定できますが、AzureポータルでのLogic Apps作成とAPIの認証設定に30分〜1時間かかります。
- 誰でも見てよい: URL共有のみでもよいが、検索除外は確認する
- 特定の相手だけ: パスワードまたはメール認証を使う
- 会社内だけ: 会社ドメイン認証を検討する
- 短期レビュー: 期限を設定して古いURLを残さない
差し替え・レビュー運用
「Azure Static Web Apps + Azure Functions」で認証・期限を自前実装する場合、実装・テスト・メンテナンスのコストに加えて、将来の担当者がアーキテクチャを理解するための学習コストも発生します。レビュー頻度が月に数件で、レビュー専用に保守が必要なFunctions実装を持つことの費用対効果を慎重に判断することが重要です。
外部の認証付き共有サービスで補完する場合、Azure側の既存アーキテクチャを変更せずに「ビルド成果物をアップロードするだけ」のシンプルな運用が実現します。Azure Static Web Appsを本番デプロイ専用に純化することで、インフラの複雑さが下がり、本番環境のトラブルシューティングが容易になります。
- 確認してほしい観点を3つ以内に絞る
- 期限と返信先を明記する
- 修正後も同じURLで見られるか伝える
- 最終版と途中版が混ざらないようタイトルを付ける
向いているケース早見表
Azure側で認証・期限を追加実装するのが向いているのは、すでにAzure Functionsがプロジェクトに組み込まれており、同一チームの開発者がFunctionsを保守できるケースです。カスタム認証の実装が既存のFunctionsと同一コードベースに収まるため、管理コストが増加しにくくなります。
外部の認証付き共有サービスで補完するのが向いているのは、FunctionsやLogic Appsを追加でセットアップするコストを払う余裕がなく、「今日中にクライアントに確認URLを送る必要がある」というスピード優先の場面です。ビルド成果物のzipをアップロードするだけで認証付きURLが即座に発行されるため、Azureの追加設定ゼロで要件を満たせます。
よくある質問
Azure Static Web Appsでソーシャルロールをカスタム招待APIを使って設定する際、招待リンクの有効期限はどのくらいですか?
Azure Static Web Appsのロール招待リンクは発行から1時間で失効します。1時間以内に受け手がリンクをクリックしてログインしないとロールが付与されず、再発行が必要になります。
Azure Functions + Static Web Appsでカスタムパスワード認証を実装した場合、パスワードのハッシュ化はどのように行うべきですか?
bcryptまたはArgon2を使ったハッシュ化を推奨します。FunctionsはNode.jsランタイムで`bcryptjs`パッケージを使えるため、パスワードの平文保存は絶対に避け、bcryptHash + saltの形式でデータベースに保存します。
Azure Static Web Appsのプレビュー環境を削除してもCloudFront相当のCDNキャッシュが残る場合はありますか?
Azure Static Web AppsはAzure CDN(Microsoft Frontdoorベース)を使います。プレビュー環境を削除するとオリジンが消えるため、キャッシュのTTLが切れるか手動パージするまでの数分〜数時間、古いコンテンツが返る可能性があります。即時削除が必要な場合はAzure CDNのパージAPIを実行してください。