0Pricing
Azure Fundamentals · 강의

App Service 인증 및 네트워킹

웹 앱에서 기본 제공 인증 공급자(Entra ID, Google, GitHub)를 사용하도록 설정하고, VNet 통합과 액세스 제한으로 인바운드 트래픽을 제한합니다.

App Service 인증 및 네트워킹은(는) CoddyKit의 무료 Azure Fundamentals 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Azure Fundamentals 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Azure Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.

App Service의 기본 제공 인증

Azure App Service는 애플리케이션의 코드를 변경하지 않고도 로그인 흐름, 토큰 유효성 검사 및 세션 관리를 처리하는 기본 제공 인증 및 권한 부여 모듈(EasyAuth라고도 함)을 제공합니다. Azure 포털에서 직접 활성화하고 여러 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 통합

VNet 통합을 사용하면 App Service 앱이 공용 인터넷에 리소스를 노출하지 않고 Azure Virtual Network 내부의 리소스(예: VM, SQL 데이터베이스, 내부 API)에 아웃바운드 호출을 보낼 수 있습니다. 앱은 VNet의 위임된 서브넷에 가상 NIC를 할당받으며, VPN 또는 ExpressRoute를 통한 온-프레미스 리소스를 포함하여 VNet이 연결할 수 있는 모든 리소스에 접근할 수 있습니다. VNet 통합은 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 통합이 아웃바운드 트래픽을 처리하는 반면, 프라이빗 엔드포인트는 인바운드 트래픽을 처리합니다. 프라이빗 엔드포인트를 사용하면 VNet 내부에서 프라이빗 IP 주소를 통해서만 App Service에 접근할 수 있습니다. 프라이빗 엔드포인트가 유일한 접근 방법인 경우 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'

하이브리드 연결

하이브리드 연결(BizTalk에서 제공)을 사용하면 VNet 통합이나 VPN 게이트웨이 없이 App Service에서 온-프레미스 리소스에 접근할 수 있습니다. 온-프레미스에 설치된 경량 릴레이 에이전트가 Azure Service Bus에 아웃바운드 연결을 설정하고, 앱은 릴레이를 통해 연결합니다. 하이브리드 연결은 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)은 브라우저 기반 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 환경(ASE)

App Service 환경(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 통합은 가상 네트워크를 통해 아웃바운드 트래픽을 라우팅하고, 프라이빗 엔드포인트는 인바운드 트래픽을 제한합니다. 또한 관리 ID를 사용하면 다른 Azure 서비스에 암호 없이 인증할 수 있습니다. 다음으로 Azure Container Registry를 살펴봅니다.

자주 묻는 질문

“App Service 인증 및 네트워킹” 강의는 무료인가요?

네 — “App Service 인증 및 네트워킹” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Azure Fundamentals 강의 전체를 잠금 해제할 수 있습니다. Azure Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.

“App Service 인증 및 네트워킹”에서 뭘 배우나요?

웹 앱에서 기본 제공 인증 공급자(Entra ID, Google, GitHub)를 사용하도록 설정하고, VNet 통합과 액세스 제한으로 인바운드 트래픽을 제한합니다. 브라우저에서 직접 실행하는 실습 코드로 Azure Fundamentals을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Azure Fundamentals을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Azure Fundamentals은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“App Service 인증 및 네트워킹” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Azure Fundamentals 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Azure Fundamentals 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. App Service 계획 및 웹 앱 만들기
  2. 배포 슬롯 및 교체
  3. 자동 크기 조정 및 사용자 지정 도메인
  4. App Service 인증 및 네트워킹
← Azure Fundamentals(으)로 돌아가기