0Pricing
Azure Fundamentals · レッスン

App Service の認証とネットワーク

Web アプリで組み込みの認証プロバイダー(Entra ID、Google、GitHub)を有効にし、VNet Integration とアクセス制限を使用して受信トラフィックを制限します。

「App Service の認証とネットワーク」はCoddyKit上の無料Azure Fundamentalsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAzure Fundamentals学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Azure Fundamentalsコースには全4レッスンが含まれています。

App Service の組み込み認証

Azure App Service には、認証および承認モジュール(EasyAuth と呼ばれることもあります)が組み込まれています。このモジュールは、アプリケーションにコード変更を加えることなく、サインイン フロー、トークンの検証、セッション管理を処理します。Azure portal から直接有効にでき、複数の ID プロバイダーから選択できます。OAuth フローを自分で実装せずに API や内部ツールへすばやく認証を追加する場合に適しています。

サポートされる ID プロバイダー

App Service の認証では、標準で複数の ID プロバイダーをサポートしています。Microsoft Entra ID(企業のログイン用)、Google、Facebook、Twitter/X、GitHub、および OpenID Connect 互換プロバイダーを利用できます。選択したプロバイダーにアプリを登録してクライアント ID とシークレットを取得し、それらを App Service で構成します。複数のプロバイダーを同時に有効にできるため、ユーザーはサインイン方法を選択できます。

# Enable Microsoft Entra ID authentication via CLI
az webapp auth microsoft update \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --client-id '<Entra-App-Client-ID>' \
  --client-secret '<Client-Secret>' \
  --issuer 'https://sts.windows.net/<TenantId>/'

# Set action when unauthenticated (redirect or 401)
az webapp auth update \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --unauthenticated-client-action RedirectToLoginPage

トークン ストアとユーザー クレームへのアクセス

認証を有効にすると、App Service は検証済みトークンをトークン ストア(ユーザー セッションごとの永続ストア)に保存します。アプリケーション コードでは、EasyAuth モジュールが挿入する特殊な HTTP リクエスト ヘッダーを通じて、認証済みユーザーのクレームにアクセスできます。X-MS-CLIENT-PRINCIPAL-NAME(メールアドレス/UPN)、X-MS-CLIENT-PRINCIPAL-ID(オブジェクト ID)、および生のアクセス トークン用の X-MS-TOKEN-AAD-ACCESS-TOKEN が該当します。

// Node.js: read user identity from EasyAuth headers
app.get('/profile', (req, res) => {
  const userName = req.headers['x-ms-client-principal-name'];
  const userId = req.headers['x-ms-client-principal-id'];
  res.json({ name: userName, id: userId });
});

// Or decode the full claims JSON from the header
const principalHeader = req.headers['x-ms-client-principal'];
const claims = JSON.parse(Buffer.from(principalHeader, 'base64').toString());

送信トラフィック用の VNet Integration

VNet Integration を使用すると、App Service アプリから Azure Virtual Network 内のリソース(VM、SQL データベース、内部 API など)へ、これらのリソースをパブリック インターネットに公開することなく送信接続できます。アプリは VNet の委任されたサブネット内に仮想 NIC を取得し、VPN または ExpressRoute 経由のオンプレミス リソースを含め、VNet から到達できるすべてのリソースにアクセスできます。VNet Integration は Standard レベル以上で利用できます。

# Enable VNet Integration
az webapp vnet-integration add \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --vnet MyVNet \
  --subnet AppServiceSubnet

# Route ALL traffic through the VNet (including internet)
az webapp config appsettings set \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --settings WEBSITE_VNET_ROUTE_ALL=1

受信トラフィック用のプライベート エンドポイント

VNet Integration が送信トラフィックを処理するのに対し、プライベート エンドポイントは受信トラフィックを処理します。これにより、App Service はプライベート IP アドレスを介して VNet 内からのみアクセスできるようになります。プライベート エンドポイントが唯一のアクセス方法である場合、azurewebsites.net への外部インターネット アクセスはブロックされます。これは、パブリック インターネットに決して公開したくない内部 API や管理ポータルに使用します。

# Create a private endpoint for the web app
az network private-endpoint create \
  --name MyWebAppPE \
  --resource-group MyRG \
  --vnet-name MyVNet \
  --subnet PrivateEndpointSubnet \
  --private-connection-resource-id \
    '/subscriptions/.../providers/Microsoft.Web/sites/MyUniqueWebApp' \
  --group-id sites \
  --connection-name MyWebAppConnection

アクセス制限

App Service のアクセス制限では、受信トラフィックに対する IP の許可リストまたは拒否リストを定義できます。規則は優先度の順に評価されます(数値が小さいほど優先度が高くなります)。特定の IP 範囲(例:オフィス VPN の送信元 IP)、Azure サービス タグ(例:AzureLoadBalancer)、または特定の VNet サブネットにアクセスを制限できます。アクセス制限を使用してステージング スロットをロックダウンし、チームの IP 範囲からのみアクセスできるようにします。

# Allow only a specific IP range
az webapp config access-restriction add \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --priority 100 \
  --action Allow \
  --ip-address 203.0.113.0/24 \
  --rule-name 'OfficeRange'

# Allow Azure Front Door service tag
az webapp config access-restriction add \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --priority 200 \
  --action Allow \
  --service-tag AzureFrontDoor.Backend \
  --rule-name 'FrontDoor'

Hybrid Connections

Hybrid Connections(BizTalk に由来)を使用すると、VNet Integration や VPN ゲートウェイを必要とせずに、App Service からオンプレミス リソースへアクセスできます。オンプレミスにインストールした軽量なリレー エージェントが Azure Service Bus への送信接続を確立し、アプリはそのリレー経由で接続します。Hybrid Connections は TCP レベルで動作し、任意のポートをサポートします。そのため、Azure に移行できない従来のオンプレミス データベースや API への接続に役立ちます。

# Add a Hybrid Connection to reach on-prem SQL
az webapp hybrid-connection add \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --namespace myServiceBusNS \
  --hybrid-connection on-prem-sql-relay

# The Hybrid Connection Manager agent must be installed
# and configured on the on-premises server to complete the relay

App Service のマネージド ID

App Service アプリにマネージド IDを割り当てると、資格情報をどこにも保存せずに、他の Azure サービス(Key Vault、Blob Storage、SQL Database)への認証が可能になります。Azure が ID の資格情報を自動的に管理します。アプリのライフサイクルに関連付けられたシステム割り当て ID、または複数のアプリで共有できるユーザー割り当て IDを使用します。対象リソースで、その ID に RBAC ロールを付与します。

# Enable system-assigned managed identity
az webapp identity assign \
  --name MyUniqueWebApp \
  --resource-group MyRG

# Grant the identity access to Key Vault secrets
az keyvault set-policy \
  --name MyKeyVault \
  --object-id $(az webapp identity show \
      --name MyUniqueWebApp \
      --resource-group MyRG \
      --query principalId -o tsv) \
  --secret-permissions get list

CORS の有効化

Cross-Origin Resource Sharing(CORS)は、ブラウザーから App Service アプリの API を呼び出せるドメインを制御します。CORS の設定で許可するオリジンを構成します。認証が必要な API では、本番環境でワイルドカード(*)を返さないでください。App Service の組み込み CORS サポートは Access-Control-Allow-Origin レスポンス ヘッダーを自動的に追加するため、単純なケースではアプリケーション コードに CORS ミドルウェアを実装する必要がありません。

# Allow specific origin
az webapp cors add \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --allowed-origins https://www.contoso.com

# View current CORS settings
az webapp cors show \
  --name MyUniqueWebApp \
  --resource-group MyRG

# Remove a CORS origin
az webapp cors remove \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --allowed-origins https://old.contoso.com

App Service Environment(ASE)

App Service Environment(ASE)は、独自の VNet 内で実行される、完全に分離された専用の App Service デプロイです。最高レベルのネットワーク分離、スケーラビリティ(最大 200 インスタンス)、コンプライアンス要件への適合性を提供します。ASE v3 では専用のパブリック IP が不要になり、プライベート エンドポイントをネイティブにサポートします。一方で、コストが大幅に高くなります。ASE は、厳格な分離要件があるエンタープライズ ワークロード向けです。

セキュリティのベスト プラクティスのまとめ

安全な App Service デプロイを実現するには、HTTPS のみを強制し、アクセス制限で受信 IP を制限し、マネージド IDを有効にして構成内のシークレットを避け、Key Vaultにシークレットを保存して Key Vault 参照を使用し、TLS の最小バージョン 1.2を適用し、脅威検出のために Defender for App Serviceを有効にします。また、アプリ リソースに関するAzure Security Center の推奨事項を定期的に確認します。

# Enforce HTTPS and minimum TLS version
az webapp update \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --https-only true

az webapp config set \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --min-tls-version '1.2' \
  --ftps-state Disabled

クイック チェック

このレッスンで学んだ Microsoft Azure Fundamentals(AZ-900)の概念について理解度を確認します。

レッスンのまとめ

このレッスンでは、組み込み認証(EasyAuth)によってコードを変更せずに ID プロバイダーのログインを追加できること、VNet Integrationによって送信トラフィックを仮想ネットワーク経由でルーティングし、プライベート エンドポイントによって受信トラフィックを制限できること、そしてマネージド IDによって他の Azure サービスへのパスワードレス認証が可能になることを学びました。次は Azure Container Registry について説明します。

よくある質問

「App Service の認証とネットワーク」レッスンは無料ですか?

はい。「App Service の認証とネットワーク」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Azure Fundamentalsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Azure Fundamentalsコースには全4レッスンが含まれています。

「App Service の認証とネットワーク」で何を学びますか?

Web アプリで組み込みの認証プロバイダー(Entra ID、Google、GitHub)を有効にし、VNet Integration とアクセス制限を使用して受信トラフィックを制限します。 ブラウザで直接実行するハンズオンコードでAzure Fundamentalsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Azure Fundamentalsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAzure Fundamentalsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「App Service の認証とネットワーク」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAzure Fundamentalsレッスンでコードを書いて実行できますか?

はい。すべてのAzure Fundamentalsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. App Service プランと Web App の作成
  2. デプロイ スロットとスワップ
  3. 自動スケーリングとカスタム ドメイン
  4. App Service の認証とネットワーク
← Azure Fundamentalsに戻る