Azure Functions 보안 설정

여러 측면에서 서버리스 함수의 안전한 개발, 배포 및 운영 계획은 웹 기반 또는 클라우드 호스팅 애플리케이션과 유사합니다. Azure App Service는 함수 앱에 대한 호스팅 인프라를 제공합니다. 이 문서에서는 함수 코드를 실행하기 위한 보안 전략과 App Service가 함수를 보호하는 데 어떻게 도움이 되는지 제공합니다.

Azure VM, 스토리지, 네트워크 연결, 웹 프레임워크, 관리 및 통합 기능을 포함한 App Service의 플랫폼 구성 요소는 적극적으로 보호되고 강화됩니다. App Service는 다음 사항을 확인하기 위해 지속적으로 활발한 준수 확인을 수행합니다.

  • 사용자의 앱 리소스는 다른 고객의 Azure 리소스로부터 보호됩니다.
  • 새로 검색된 취약성을 처리하기 위해 VM 인스턴스 및 런타임 소프트웨어가 정기적으로 업데이트됩니다.
  • 앱과 다른 Azure 리소스(예: SQL Database) 간의 비밀(예: 연결 문자열) 통신이 Azure 내에서 유지되며 네트워크 경계를 벗어나지 않습니다. 비밀은 저장될 때 항상 암호화됩니다.
  • 하이브리드 연결과 같은 App Service 연결 기능을 통한 모든 통신이 암호화됩니다.
  • Azure PowerShell, Azure CLI, Azure SDK, REST API와 같은 원격 관리 도구와의 연결이 모두 암호화됩니다.
  • 24시간 위협 관리를 통해 맬웨어, DDoS(배포된 서비스 거부), MITM(메시지 가로채기) 및 기타 위협으로부터 인프라와 플랫폼을 보호합니다.

Azure의 인프라 및 플랫폼 보안에 대한 자세한 내용은 Azure 보안 센터를 참조하세요.

Microsoft 클라우드 보안 벤치마크를 따르는 보안 권장 사항 세트는 Azure Functions에 대한 Azure 보안 기준을 참조하세요.

보안 작업

이 섹션에서는 함수 앱을 최대한 안전하게 구성하고 실행하는 방법을 안내합니다.

Defender for Cloud

클라우드용 Defender는 포털에서 함수 앱과 통합됩니다. 잠재적인 구성 관련 보안 취약성에 대한 빠른 평가를 무료로 제공합니다. 전용 플랜으로 실행되는 함수 앱은 추가 비용으로 클라우드용 Defender의 강화된 보안 함수를 사용할 수도 있습니다. 자세히 알아보려면 Azure App Service 웹 앱 및 API 보호를 참조하세요.

로그 및 모니터

작업 모니터링과 로깅 분석을 통해 공격을 탐지하는 방법입니다. Functions는 함수 앱에 대한 로그, 성능 및 오류 데이터를 수집하는 Application Insights와 통합됩니다. Application Insights는 성능 이상을 자동으로 감지하며, 문제를 진단하고 함수가 어떻게 사용되는지 이해할 수 있는 강력한 분석 도구를 포함하고 있습니다. 자세히 알아보려면 Azure Functions 모니터링을 참조하세요.

Functions는 또한 더욱 쉬운 분석을 위해 함수 앱 로그를 시스템 이벤트와 통합할 수 있도록 Azure Monitor 로그와 통합됩니다. 진단 설정을 사용하여 Logs Analytics 작업 영역 등 사용자가 선택한 대상으로 함수에 대한 플랫폼 로그 및 메트릭의 스트리밍 내보내기를 구성할 수 있습니다. 자세한 내용은 Azure Monitor 로그를 사용한 Azure Functions 모니터링을 참조하세요.

엔터프라이즈 수준 위협 감지 및 응답 자동화의 경우 로그 및 이벤트를 Logs Analytics 작업 영역으로 스트리밍합니다. 그런 다음 Microsoft Sentinel을 이 작업 영역에 연결할 수 있습니다. 자세한 내용은 Microsoft Sentinel이란을 참조하세요.

가시성에 대한 보안 권장 사항은 Azure Functions용 Azure 보안 기준을 참조하세요.

HTTPS 필요

기본적으로 클라이언트는 HTTP 또는 HTTPS를 모두 사용하여 함수 엔드포인트에 연결할 수 있습니다. HTTPS는 SSL/TLS 프로토콜을 사용하여 암호화 및 인증된 보안 연결을 제공하므로 HTTP를 HTTPS로 리디렉션해야 합니다. 방법을 알아보려면 HTTPS 적용을 참조하세요.

HTTPS가 필요한 경우 최신 TLS 버전도 필요합니다. 방법을 알아보려면 TLS 버전 적용을 참조하세요.

자세한 정보는 보안 연결(TLS)을 참조하세요.

함수 액세스 키

함수에서는 키를 사용해 개발 중에 HTTP 함수 엔드포인트 액세스를 더 어렵게 만들 수 있습니다. HTTP 트리거 함수의 HTTP 액세스 수준이 anonymous로 설정되지 않는 경우 요청에는 API 액세스 키가 포함되어야 합니다.

키가 기본 보안 메커니즘을 제공하는 동안 프로덕션에서 HTTP 엔드포인트를 보호하기 위해 다른 옵션을 고려할 수 있습니다. 예를 들어, 공용 앱에 공유 암호를 배포하는 것은 좋지 않습니다. 공용 클라이언트에서 함수가 호출되는 경우 다른 보안 메커니즘 구현을 고려하는 것이 좋습니다. 자세히 알아보려면 프로덕션 환경에서 HTTP 엔드포인트 보호를 참조하세요.

함수 키 값을 갱신하는 경우 함수를 호출하는 모든 클라이언트에 업데이트된 키 값을 수동으로 다시 배포해야 합니다.

권한 부여 범위(함수 수준)

함수 수준 키에는 두 가지 액세스 범위가 있습니다.

  • 함수: 이러한 키는 정의된 특정 함수에만 적용됩니다. API 키로 사용되면 이 키를 통해 해당 함수에만 액세스할 수 있습니다.

  • 호스트: 호스트 범위가 있는 키를 사용하여 함수 앱 내의 모든 함수에 액세스할 수 있습니다. API 키로 사용되면 이 키를 통해 함수 앱 내의 모든 함수에 액세스할 수 있습니다.

각 키의 이름은 참조될 수 있도록 지정되며 함수 및 호스트 수준에서는 "default"라는 기본 키가 있습니다. function 키는 호스트 키보다 우선합니다. 두 키가 동일한 이름으로 정의되면 항상 함수 키가 사용됩니다.

마스터 키(관리자 수준)

각 함수 앱에는 _master라는 관리자 수준 호스트 키도 있습니다. 마스터 키는 앱의 모든 함수에 대한 호스트 수준 액세스를 제공할 뿐만 아니라 런타임 REST API에 대한 관리 액세스도 제공합니다. 이 키는 해지할 수 없습니다. 액세스 수준을 admin으로 설정하면 요청에서 마스터 키를 사용해야 하며, 다른 키를 사용하면 액세스가 실패합니다.

주의

함수 앱에서는 마스터 키를 통해 높은 권한이 부여되므로, 이 키를 제3자와 공유하거나 네이티브 클라이언트 애플리케이션에 배포해서는 안 됩니다. 따라서 관리자 액세스 수준을 선택하는 경우 주의해야 합니다.

시스템 키

특정 확장에는 웹후크 엔드포인트에 액세스하도록 시스템 관리 키가 필요할 수 있습니다. 시스템 키는 내부 구성 요소에 의해 호출되는 확장별 함수 엔드포인트용으로 설계되었습니다. 예를 들어 Event Grid 트리거의 경우 트리거 엔드포인트 호출 시 구독에서 시스템 키를 사용해야 합니다. Durable Functions는 또한 시스템 키를 사용하여 Durable Task 확장 API를 호출합니다.

시스템 키의 범위는 확장에 따라 결정되지만 일반적으로 전체 함수 앱에 적용됩니다. 시스템 키는 특정 확장에 의해서만 생성될 수 있으며 해당 값을 명시적으로 설정할 수 없습니다. 다른 키와 마찬가지로 포털에서 또는 키 API를 사용하여 키에 대한 새 값을 생성할 수 있습니다.

키 비교

다음 표에서는 다양한 종류의 액세스 키에 대한 사용을 비교합니다.

작업 범위 유효한 키
함수 실행 특정 함수 함수
함수 실행 모든 함수 함수 또는 호스트
관리자 엔드포인트 호출 함수 앱 호스트(마스터 전용)
Durable Task 확장 API 호출 함수 앱1 시스템2
확장별 웹후크 호출(내부) 함수 앱1 시스템2

1범위는 확장에 의해 결정됩니다.
2확장에 따라 특정 이름이 설정됩니다.

액세스 키에 대해 자세히 알아보려면 HTTP 트리거 바인딩 문서를 참조하세요.

비밀 리포지토리

기본적으로 키는 AzureWebJobsStorage 설정에서 제공하는 계정의 Blob Storage 컨테이너에 저장됩니다. AzureWebJobsSecretStorageType 설정을 사용하여 이 동작을 재정의하고 다른 위치에 키를 저장할 수 있습니다.

위치 Description
두 번째 스토리지 계정 blob AzureWebJobsSecretStorageSas의 SAS URL을 기반으로 다른 스토리지 계정의 Blob Storage에 키를 저장합니다.
파일 시스템 files 키는 Functions v1.x의 기본값인 파일 시스템에 유지됩니다.
Azure Key Vault keyvault AzureWebJobsSecretStorageKeyVaultUri에 설정된 키 자격 증명 모음은 키를 저장하는 데 사용됩니다.
Kubernetes 비밀 kubernetes AzureWebJobsKubernetesSecretName에 설정된 리소스는 키를 저장하는 데 사용됩니다. Kubernetes에서 함수 런타임을 실행하는 경우에만 지원됩니다. Azure Functions Core Tools는 Kubernetes에 배포할 때 값을 자동으로 생성합니다.

키 스토리지에 Key Vault를 사용할 때 필요한 앱 설정은 관리 ID 형식에 따라 다릅니다. Functions 런타임 버전 3.x는 시스템 할당 관리 ID만 지원합니다.

설정 이름 시스템 할당 사용자 할당 앱 등록
AzureWebJobsSecretStorageKeyVaultUri
AzureWebJobsSecretStorageKeyVaultClientId X
AzureWebJobsSecretStorageKeyVaultClientSecret X X
AzureWebJobsSecretStorageKeyVaultTenantId X X

인증/권한 부여

함수 키가 원치 않는 액세스에 대해 약간의 위험 완화를 제공할 수 있지만 함수 엔드포인트를 실제로 보호하는 유일한 방법은 함수에 액세스하는 클라이언트의 양성 인증을 구현하는 것입니다. 그런 다음 ID를 기준으로 권한 부여 결정을 내릴 수 있습니다.

App Service 인증/권한 부여를 사용하도록 설정

App Service 플랫폼에서는 Microsoft Entra ID 및 기타 여러 타사 ID 공급자를 사용하여 클라이언트를 인증할 수 있습니다. 이 전략을 사용하여 함수용 사용자 지정 권한 부여 규칙을 구현할 수 있으며, 함수 코드에서 사용자 정보를 사용할 수 있습니다. 자세히 알아보려면 Azure App Service에서 인증 및 권한 부여클라이언트 ID 사용을 참조하세요.

Azure APIM(API Management)를 사용하여 요청 인증

APIM은 수신 요청에 사용할 수 있는 여러 가지 API 보안 옵션을 제공합니다. 자세히 알아보려면 API Management 인증 정책을 참조하세요. APIM을 적용하면 APIM 인스턴스의 IP 주소에서 보내는 요청만 수락하도록 함수 앱을 구성할 수 있습니다. 자세히 알아보려면 IP 주소 제한을 참조하세요.

사용 권한

모든 애플리케이션 또는 서비스와 마찬가지로 가능한 가장 낮은 권한으로 함수 앱을 실행하는 것이 목표입니다.

사용자 관리 권한

함수는 기본 제공 Azure RBAC(역할 기반 액세스 제어)를 지원합니다. Functions는 Azure 역할로서 Contributor, Owner, Reader를 지원합니다.

권한은 함수 앱 수준에서 적용됩니다. 대부분의 함수 앱 수준 작업을 수행하려면 기여자 역할이 필요합니다. 또한 Application Insights에서 로그 데이터를 볼 수 있도록 모니터링 읽기 권한자 권한과 함께 기여자 역할이 필요합니다. 소유자 역할만 함수 앱을 삭제할 수 있습니다.

권한으로 함수 구성

애플리케이션 설정에 저장된 연결 문자열 및 기타 자격 증명은 함수 앱의 모든 함수에 연결된 리소스에 대한 동일한 권한 집합을 제공합니다. 이러한 자격 증명을 사용하지 않는 함수를 별도의 함수 앱으로 이동하여 특정 자격 증명에 액세스할 수 있는 함수의 수를 최소화하는 것이 좋습니다. 항상 함수 체이닝과 같은 기술을 사용하여 다른 함수 앱에 있는 함수 사이에서 데이터를 전달할 수 있습니다.

관리 ID

Microsoft Entra ID의 관리 ID를 사용하면 앱이 Azure Key Vault 등의 다른 Microsoft Entra 보호 리소스에 쉽게 액세스할 수 있습니다. ID는 Azure 플랫폼에서 관리하며 비밀을 프로비전하거나 회전할 필요가 없습니다. Microsoft Entra ID의 관리 ID에 대한 자세한 내용은 Azure 리소스의 관리 ID를 참조하세요.

애플리케이션에 두 가지 형식의 ID를 부여할 수 있습니다.

  • 시스템 할당 ID는 애플리케이션에 연결되어 있어 해당 앱을 삭제하면 이 ID도 삭제됩니다. 앱에는 하나의 시스템 할당 ID만 있을 수 있습니다.
  • 사용자 할당 ID는 앱에 할당할 수 있는 독립 실행형 Azure 리소스입니다. 앱에는 여러 사용자 할당 ID가 있을 수 있습니다.

관리 ID는 일부 트리거와 바인딩에서의 연결에 대한 비밀 대신 사용할 수 있습니다. ID 기반 연결을 참조하세요.

자세한 내용은 App Service 및 Azure Functions에 대한 관리 ID를 사용하는 방법을 참조하세요.

CORS 액세스 제한

CORS(원본 간 리소스 공유)는 다른 도메인에서 실행 중인 웹 앱이 HTTP 트리거 엔드포인트로 요청할 수 있도록 허용하는 방법입니다. App Service는 HTTP 요청에 필요한 CORS 헤더를 제공하기 위한 기본 지원을 제공합니다. CORS 규칙은 함수 앱 수준에서 정의됩니다.

모든 사이트가 엔드포인트에 액세스할 수 있도록 하는 와일드카드를 사용하려는 경우 사이트 간 스크립팅 공격을 방지하는 데 도움이 되는 CORS의 목적이 무효화됩니다. 대신 엔드포인트에 액세스해야 하는 각 웹 앱의 도메인에 대해 별도의 CORS 항목을 추가합니다.

암호 관리

코드를 실행해야 하는 다양한 서비스 및 리소스에 연결할 수 있도록 함수 앱은 연결 문자열 및 서비스 키와 같은 비밀에 액세스할 수 있어야 합니다. 이 섹션에서는 함수에 필요한 암호를 저장하는 방법을 설명합니다.

함수 코드에 비밀을 저장하지 마세요.

애플리케이션 설정

기본적으로 함수 앱 및 바인딩에서 사용하는 연결 문자열과 비밀을 애플리케이션 설정으로 저장합니다. 이렇게 하면 함수 코드 및 함수에서 사용하는 다양한 바인딩에서 이러한 자격 증명을 사용할 수 있습니다. 애플리케이션 설정(키) 이름은 실제 값을 검색하는 데 사용되며, 이 실제 값은 비밀입니다.

예를 들어 모든 함수 앱에는 런타임에 사용하는 연결된 스토리지 계정이 필요합니다. 기본적으로 이 스토리지 계정에 대한 연결은 AzureWebJobsStorage라는 애플리케이션 설정에 저장됩니다.

앱 설정 및 연결 문자열은 Azure에 암호화되어 저장됩니다. 앱이 시작될 때 앱의 프로세스 메모리에 삽입되기 전에만 암호 해독됩니다. 암호화 키는 정기적으로 회전합니다. 대신 비밀의 보안 스토리지를 관리하려면 앱 설정이 Azure Key Vault에 대한 참조여야 합니다.

로컬 컴퓨터에서 함수를 개발할 때 local.settings.json 파일에서 설정을 기본값으로 암호화할 수도 있습니다. 자세한 내용은 로컬 설정 파일 암호화를 참조하세요.

Key Vault 참조

애플리케이션 설정은 대부분의 함수에 충분하지만 여러 서비스에서 동일한 비밀을 공유하고자 할 수 있습니다. 이 경우 비밀의 중복 스토리지로 인해 잠재적인 취약성이 발생합니다. 보다 안전한 방법은 중앙 비밀 스토리지 서비스와 비밀 대신 이 서비스에 대한 참조 사용입니다.

Azure Key Vault는 액세스 정책 및 감사 기록에 대한 전체 제어와 함께 중앙 집중식 비밀 관리를 제공하는 서비스입니다. 애플리케이션 설정에서 연결 문자열 또는 키 대신 Key Vault 참조를 사용할 수 있습니다. 자세히 알아보려면 App Service 및 Azure Functions의 Key Vault 참조 사용을 참조하세요.

ID 기반 연결

일부 리소스에 연결하기 위해 비밀 대신 ID를 사용할 수 있습니다. 이는 비밀 관리를 요구하지 않는다는 이점이 있으며, 보다 세분화된 액세스 제어 및 감사를 제공합니다.

Microsoft Entra 인증을 지원하는 Azure 서비스에 연결하는 코드를 작성하는 경우, 비밀 또는 연결 문자열 대신 ID를 사용하도록 선택할 수 있습니다. 각 서비스의 설명서에 두 연결 방법에 대한 세부 정보가 있습니다.

ID 기반 연결을 사용하여 일부 Azure Functions 트리거와 바인딩 확장을 구성할 수 있습니다. 현재 여기에는 Azure BlobAzure 큐 확장이 포함됩니다. ID 사용을 위해 확장을 구성하는 방법에 대한 자세한 내용은 Azure Functions에서 ID 기반 연결을 사용하는 방법을 참조하세요.

사용 할당량 설정

사용 계획에서 실행 중인 함수에 사용 할당량을 설정하는 것이 좋습니다. 함수 앱에서 함수의 총 실행 수에 대해 일일 GB-초 제한을 설정하면 제한에 도달하는 순간 실행이 중지됩니다. 이는 잠재적으로 함수를 실행하는 악성 코드를 완화하는 데 도움이 될 수 있습니다. 함수의 사용량을 예측하는 방법을 알아보려면 사용 계획 비용 예측을 참조하세요.

데이터 유효성 검사

함수에서 사용하는 트리거 및 바인딩은 추가 데이터 유효성 검사를 제공하지 않습니다. 코드는 트리거 또는 입력 바인딩에서 수신한 데이터의 유효성을 검사해야 합니다. 업스트림 서비스가 손상된 경우 유효성 검사가 완료되지 않은 입력이 함수를 통해 전달되지 않아야 합니다. 예를 들어 함수가 관계형 데이터베이스에 있는 Azure Storage 큐에서 데이터를 저장하는 경우 데이터의 유효성을 검사하고 명령을 매개 변수화하여 SQL 삽입 공격을 방지해야 합니다.

함수에 들어오는 데이터가 이미 유효성 검사를 받았거나 삭제된 것으로 간주하지 마세요. 또한 출력 바인딩에 기록되는 데이터가 유효한지 확인하는 것이 좋습니다.

오류 처리

기본적인 것으로 보이지만 함수에서 양호한 오류 처리를 작성하는 것이 중요합니다. 처리되지 않은 오류는 호스트에 대해 버블링되며 런타임에 의해 처리됩니다. 바인딩마다 오류를 다르게 처리합니다. 자세한 내용은 Azure Functions 오류 처리를 참조하세요.

원격 디버깅 사용 안 함

함수를 적극적으로 디버깅하는 경우를 제외하고 원격 디버깅을 사용하지 않도록 설정되어 있는지 확인합니다. 포털에서 함수 앱 구성일반 설정에서 원격 디버깅을 사용하지 않도록 설정할 수 있습니다.

CORS 액세스 제한

Azure Functions는 CORS(원본 간 리소스 공유)를 지원합니다. CORS는 포털Azure CLI를 통해 구성됩니다. CORS에 허용된 원본 목록은 함수 앱 수준에서 적용됩니다. CORS를 사용하면 응답에 Access-Control-Allow-Origin 헤더가 포함됩니다. 자세한 내용은 크로스-원본 자원 공유(CORS)를 참조하십시오.

허용된 원본 목록에서 와일드카드를 사용하지 마세요. 대신 요청을 가져올 특정 도메인을 나열합니다.

암호화된 데이터 저장

Azure Storage는 미사용 스토리지 계정의 모든 데이터를 암호화합니다. 자세한 내용은 미사용 데이터에 대한 Azure Storage 암호화를 참조하세요.

기본적으로 데이터는 Microsoft 관리형 키로 암호화됩니다. 암호화 키에 대한 추가 제어를 위해 Blob 및 파일 데이터의 암호화에 사용할 고객 관리 키를 제공할 수 있습니다. 스토리지 계정에 액세스하려면 이러한 키가 함수에 대한 Azure Key Vault에 있어야 합니다. 자세한 내용은 고객 관리형 키를 사용하여 미사용 암호화를 참조하세요.

함수 앱은 종종 추가 리소스에 따라 달라지므로 이러한 외부 리소스를 보호하는 것도 앱 보안의 일부입니다. 최소한 대부분의 함수 앱에는 Application Insights 및 Azure Storage에 대한 종속성이 포함됩니다. 이러한 리소스를 보호하는 것과 관련된 지침을 자세히 확인하려면 Azure Monitor용 Azure 보안 기준Storage용 Azure 보안 기준을 참조하세요.

Important

스토리지 계정은 중요한 앱 데이터를 저장하는 데 사용되며, 이러한 중요 앱 데이터에 애플리케이션 코드 자체가 포함되는 경우도 있습니다. 다른 앱이나 사용자가 스토리지 계정에 액세스하는 행위를 제한해야 합니다.

또한 애플리케이션 논리가 의존하는 어떠한 리소스 유형이라도 그와 관련된 지침을 참조해야 하며 이러한 리소스 유형에는 트리거 및 바인딩과 함수 코드가 모두 포함됩니다.

안전한 배포

Azure Functions 도구를 통합하면 로컬 함수 프로젝트 코드를 Azure에 쉽게 게시할 수 있습니다. Azure Functions 토폴로지에 대한 보안을 고려할 때 배포가 작동하는 방식을 이해하는 것이 중요합니다.

배포 자격 증명

App Service 배포에는 배포 자격 증명 집합이 필요합니다. 이러한 배포 자격 증명은 함수 앱 배포의 보안을 유지하는 데 사용됩니다. 배포 자격 증명은 App Service 플랫폼에서 관리하며, 미사용 시에는 암호화됩니다.

배포 자격 증명은 두 가지 종류가 있습니다.

  • 사용자 수준 자격 증명 - 전체 Azure 계정에 대한 자격 증명 집합입니다. 모든 구독에서 Azure 계정에 액세스할 수 있는 권한이 있는 모든 앱의 App Service에 배포하는 데 사용할 수 있습니다. 포털 GUI(예: 앱 리소스 페이지개요속성)에 표시되는 기본 집합입니다. RBAC(역할 기반 액세스 제어) 또는 공동 관리자 권한을 통해 사용자에게 앱 액세스 권한이 부여되면 해당 사용자는 액세스가 취소될 때까지 자신의 사용자 수준 자격 증명을 사용할 수 있습니다. 이러한 자격 증명을 다른 Azure 사용자와 공유하지 마세요.

  • 앱 수준 자격 증명 - 각 앱마다 하나씩의 자격 증명 집합입니다. 해당 앱에만 배포하는 데 사용할 수 있습니다. 각 앱의 자격 증명은 앱 생성 시 자동으로 생성됩니다. 수동으로 구성할 수 없지만, 언제든지 다시 설정할 수 있습니다. RBAC를 통해 사용자에게 앱 수준 자격 증명에 대한 액세스 권한을 부여하려면 해당 사용자가 앱에서 기여자 이상이어야 합니다(웹 사이트 기여자 기본 제공 역할 포함). 읽기 권한자는 게시할 수 없으므로 자격 증명에 액세스할 수 없습니다.

현재 Key Vault는 배포 자격 증명에 대해 지원되지 않습니다. 배포 자격 증명 관리에 대해 자세히 알아보려면 Azure App Service에 대한 배포 자격 증명 구성을 참조하세요.

FTP 미사용

기본적으로 각 함수 앱은 FTP 엔드포인트 사용이 설정됩니다. FTP 엔드포인트는 배포 자격 증명을 사용하여 액세스됩니다.

FTP는 함수 코드 배포에 대해 권장되지 않습니다. FTP 배포는 수동 작업이며, 트리거를 동기화해야 합니다. 자세히 알아보려면 FTP 배포를 참조하세요.

FTP 사용을 계획하지 않은 경우 포털에서 사용하지 않도록 설정해야 합니다. FTP 사용을 선택한 경우 FTPS를 적용해야 합니다.

SCM 엔드포인트 보안

모든 함수 앱에는 배포 및 기타 App Service 사이트 확장에서 사용하는 scm 서비스 엔드포인트가 있습니다. 함수 앱에 대한 SCM 엔드포인트는 항상 https://<FUNCTION_APP_NAME.scm.azurewebsites.net> 형식의 URL입니다. 네트워크 격리를 사용하여 함수를 보호하는 경우에도 이 엔드포인트를 고려해야 합니다.

별도의 SCM 엔드포인트를 통해 가상 네트워크에서 격리 또는 실행 중인 함수 앱에 대한 배포 및 기타 고급 도구 기능을 제어할 수 있습니다. SCM 엔드포인트는 기본 인증(배포 자격 증명 사용) 및 Azure Portal 자격 증명을 사용한 SSO(Single Sign-On)을 모두 지원합니다. 자세한 내용은 Kudu 서비스 액세스를 참조하세요.

지속적인 보안 유효성 검사

개발 프로세스의 모든 단계에서 보안을 고려해야 하므로 지속적인 배포 환경에서도 보안 유효성 검사를 구현하는 것이 좋습니다. 이를 DevSecOps라고도 합니다. 배포 파이프라인에 Azure DevOps를 사용하여 배포 프로세스에 유효성 검사를 통합할 수 있습니다. 자세한 내용은 CI/CD 파이프라인에 지속적인 보안 유효성 검사를 추가하는 방법을 참조하세요.

네트워크 보안

함수 앱에 대한 네트워크 액세스를 제한하면 함수 엔드포인트에 액세스할 수 있는 사용자를 제어할 수 있습니다. Functions는 App Service 인프라를 활용하여 함수가 인터넷 라우팅 가능한 주소를 사용하지 않으면서 리소스에 액세스하거나 함수 엔드포인트에 대한 인터넷 액세스를 제한할 수 있습니다. 이러한 네트워킹 옵션에 대해 자세히 알아보려면 Azure Functions 네트워킹 옵션을 참조하세요.

액세스 제한 설정

액세스 제한을 통해 앱에 대한 트래픽을 제어하는 허용/거부 규칙의 목록을 정의할 수 있습니다. 규칙은 우선 순위에 따라 평가됩니다. 규칙이 정의되어 있지 않은 경우 앱은 모든 주소의 트래픽을 허용합니다. 자세히 알아보려면 Azure App Service 액세스 제한을 참조하세요.

스토리지 계정 보호

함수 앱을 만들 때 Blob, 큐 및 Table Storage을 지원하는 범용 Azure Storage 계정을 만들거나 연결해야 합니다. 이 스토리지 계정은 서비스 엔드포인트 또는 프라이빗 엔드포인트로 보호되는 계정으로 바꿀 수 있습니다. 자세한 내용은 스토리지 계정을 가상 네트워크로 제한을 참조하세요.

프라이빗 사이트 액세스

Azure 프라이빗 엔드포인트는 Azure Private Link를 기반으로 하는 서비스에 비공개로 안전하게 연결하는 네트워크 인터페이스입니다. 프라이빗 엔드포인트는 가상 네트워크의 프라이빗 IP 주소를 사용하여 효과적으로 가상 네트워크에 서비스를 제공합니다.

프리미엄App Service 계획에서 호스팅되는 함수에 프라이빗 엔드포인트를 사용할 수 있습니다.

프라이빗 엔드포인트를 호출하려면 DNS 조회가 프라이빗 엔드포인트로 확인되는지 확인해야 합니다. 이러한 동작은 다음 방법 중 하나로 적용할 수 있습니다.

  • Azure DNS 프라이빗 영역과 통합합니다. 가상 네트워크에 사용자 지정 DNS 서버가 없으면 자동으로 수행됩니다.
  • 앱에서 사용하는 DNS 서버에서 프라이빗 엔드포인트를 관리합니다. 이렇게 하려면 프라이빗 엔드포인트 주소를 알고 있어야 하며, A 레코드를 사용하여 해당 주소에 도달하려는 엔드포인트를 가리켜야 합니다.
  • Azure DNS 프라이빗 영역으로 전달하도록 자체 DNS 서버를 구성합니다.

자세히 알아보려면 Web Apps용 프라이빗 엔드포인트 사용을 참조하세요.

격리로 함수 앱 배포

ASE(Azure App Service Environment)는 함수를 실행할 전용 호스팅 환경을 제공합니다. ASE 사용 시에는 모든 수신 요청을 인증하는 데 사용할 수 있는 단일 프런트 엔드 게이트웨이를 구성할 수 있습니다. 자세한 내용은 App Service Environment용 WAF(웹 애플리케이션 방화벽) 구성을 참조하세요.

게이트웨이 서비스 사용

Azure Application GatewayAzure Front Door와 같은 게이트웨이 서비스를 통해 WAF(웹 애플리케이션 방화벽)를 설정할 수 있습니다. WAF 규칙은 함수에 대한 추가 보호 계층을 제공하는 감지된 공격을 모니터링 또는 차단하는 데 사용됩니다. WAF를 설정하려면 함수 앱이 ASE에서 실행되거나 프라이빗 엔드포인트(미리 보기)를 사용해야 합니다. 자세히 알아보려면 프라이빗 엔드포인트 사용을 참조하세요.

다음 단계