比較

Azure Static Web Appsでは足りない認証・期限管理をどう補うか

Azure Static Web Appsは静的コンテンツのデプロイと配信に優れていますが、社外レビューや限定公開で必要な「特定のユーザーだけ・期限付きで・アクセス証跡付きで」という要件は標準機能では不十分です。何が欠けているか、どのように補えるかを具体的に整理します。

できること

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を実行してください。

関連記事

比較

Azure Static Web Appsから一時共有URLへ切り替えるタイミング

レビュワーの属性やセキュリティ要件によって、Azure Static Web Appsから認証付き一時URLへ切り替えるタイミングは変わります。どの条件が揃ったら切り替えを検討すべきかを判断できるよう整理しました。

5分で読める
比較

Vercel Dropでは足りない認証・期限管理をどう補うか

Vercel Dropに認証・期限機能がないことを把握しつつも代替手段が見つからないWebデザイナー・エンジニア向けに、ギガサイト便など認証付きHTML共有サービスを活用した補完方法を具体的に解説した記事です。

5分で読める
「比較」の記事をもっと見る →