Azure Container Apps で認証と認可を実装する

完了

Azure Container Apps には、最小限のコードまたはコードなしで外部のイングレス対応コンテナー アプリを安全に保護するための組み込みの認証と認可機能が用意されています。 Container Apps 用の組み込みの認証機能では、すぐに使用できる認証をフェデレーション ID プロバイダーに提供することで、時間と労力を節約できます。これにより、アプリケーションの残りの部分に専念できます。

  • Azure Container Apps は、さまざまな組み込み認証プロバイダーへのアクセスを提供します。
  • 組み込みの認証機能には、特定の言語、SDK、セキュリティの専門知識、または記述する必要があるコードは必要ありません。

この機能は HTTPS でのみ使う必要があります。 コンテナー アプリのイングレス構成で allowInsecure が無効になっていることを確認します。 サイトのコンテンツと API へのアクセス制限の有無にかかわらず、コンテナー アプリを認証に構成できます。

  • アプリのアクセスを認証済みユーザーのみに制限するには、[アクセスの制限] の設定を [認証を要求する] に設定します。
  • 認証を行うがアクセスを制限しない場合は、[アクセスの制限] 設定を [認証されていないアクセスを許可する] に設定します。

ID プロバイダー

Container Apps が使用するフェデレーション ID では、サード パーティの ID プロバイダーが代わりにユーザー ID と認証フローを管理します。 次の ID プロバイダーを既定で利用できます。

プロバイダー サインイン エンドポイント 使用方法に関するガイダンス
Microsoft ID プラットフォーム /.auth/login/aad Microsoft ID プラットフォーム
Facebook /.auth/login/facebook Facebook
GitHub /.auth/login/github GitHub
Google /.auth/login/google Google
Twitter /.auth/login/twitter Twitter
OpenID Connect プロバイダー /.auth/login/<providerName> OpenID Connect

これらのプロバイダーのいずれかを使用する場合、サインイン エンドポイントはユーザー認証と、プロバイダーからの認証トークンの検証のために使用できるようになります。 任意の数のプロバイダー オプションを、ユーザーに対して提供できます。

機能のアーキテクチャ

認証と認可のミドルウェア コンポーネントは、アプリケーションの各レプリカ上でサイドカーコンテナーとして実行されるプラットフォームの機能です。 これが有効になっている場合、すべての受信 HTTP 要求は、アプリケーションによって処理される前にセキュリティ レイヤーを通過します。

アプリ コンテナーへのトラフィックを許可する前に、ID プロバイダーと対話するサイドカー コンテナーによって要求が傍受されることを示す図。

プラットフォーム ミドルウェアは、アプリに対していくつかの処理を行います。

  • 指定された ID プロバイダーを使用してユーザーとクライアントを認証する
  • 認証されたセッションを管理します
  • HTTP 要求ヘッダーに ID 情報を挿入する

認証と承認のモジュールは、アプリケーションのコードから分離された別のコンテナーで実行されます。 セキュリティ コンテナーはインプロセスで実行されないため、特定の言語フレームワークと直接統合することはできません。 ただし、アプリに必要な関連情報は要求ヘッダーに指定します。

Authentication flow

認証フローは、プロバイダーによる違いはありませんが、プロバイダーの SDK でサインインするかどうかによって異なります。

  • プロバイダー SDK を使わない場合 (サーバー向けのフローまたはサーバー フロー): アプリケーションは、フェデレーション サインイン情報を Container Apps に委任します。 デレゲーションはブラウザーレス アプリで通常のケースであり、プロバイダーのサインイン ページをユーザーに表示します。

  • プロバイダー SDK を使う場合 (クライアント向けのフローまたはクライアント フロー): アプリケーションは、ユーザーを手動でプロバイダーにサインインさせてから、検証のために Container Apps に認証トークンを送信します。 この方法は、プロバイダーのサインイン ページをユーザーに表示しないブラウザーレス アプリの場合に一般的です。 たとえば、プロバイダーの SDK を使用してユーザーをサインインさせるネイティブ モバイル アプリがあります。