Azure Cosmos DB에서 IP 방화벽 구성

적용 대상: SQL API Cassandra API Gremlin API Table API Azure Cosmos DB API for MongoDB

계정에 저장된 데이터를 보호하기 위해 Azure Cosmos DB는 강력한 HMAC(해시 기반 메시지 인증 코드)를 활용하는 비밀 기반 권한 부여 모델을 지원합니다. 또한 Azure Cosmos DB는 인바운드 방화벽 지원을 위해 IP 기반 액세스 제어를 지원합니다. 이 모델은 기존 데이터베이스 시스템의 방화벽 규칙과 유사하며 사용자 계정에 추가 보안 수준을 제공합니다. 방화벽에서는 승인된 머신 및/또는 클라우드 서비스에서만 액세스할 수 있도록 Azure Cosmos 계정을 구성할 수 있습니다. 이러한 승인된 머신 및 서비스에서 Azure Cosmos 데이터베이스에 저장된 데이터에 액세스하려면 여전히 호출자가 유효한 권한 부여 토큰을 제공해야 합니다.

IP 액세스 제어

기본적으로 요청에 유효한 권한 부여 토큰이 포함되어 있으면 인터넷에서 Azure Cosmos 계정에 액세스할 수 있습니다. IP 정책 기반 액세스 제어를 구성하려면 사용자가 지정된 Azure Cosmos 계정에 액세스하도록 허용된 클라이언트 IP 목록으로 포함할 IP 주소 또는 IP 주소 범위 집합을 CIDR(Classless Inter-Domain Routing) 형식으로 제공해야 합니다. 이 구성이 적용되면 이 허용되는 목록 이외의 머신에서 보내는 모든 요청은 403(금지됨) 응답을 받습니다. IP 방화벽을 사용하는 경우 계정에 액세스하려면 Azure Portal을 허용하는 것이 좋습니다. 데이터 탐색기를 사용하고 Azure Portal에 표시되는 계정에 대한 메트릭을 검색하려면 액세스 권한이 필요합니다. Data Explorer를 사용하는 경우 Azure Portal에서 계정에 액세스하도록 허용하는 것 외에도 방화벽 설정을 업데이트하여 현재 IP 주소를 방화벽 규칙에 추가해야 합니다. 방화벽 변경 내용이 전파되는 데 최대 15분이 걸릴 수 있으며 이 기간 동안에는 방화벽이 일관되지 않은 동작을 발생시킬 수 있습니다.

서브넷 및 VNET 액세스 제어를 사용하여 IP 기반 방화벽을 결합할 수 있습니다. 결합하면 공용 IP가 있는 모든 원본에 대한 액세스 및/또는 VNET 내 특정 서브넷으로부터의 액세스를 제한할 수 있습니다. 서브넷 및 VNET 기반 액세스 제어 사용에 대해 자세히 알아보려면 가상 네트워크에서 Azure Cosmos DB 리소스에 액세스를 참조하세요.

요약하면, Azure Cosmos 계정에 액세스하려면 권한 부여 토큰이 항상 필요합니다. IP 방화벽 및 VNET ACL(액세스 제어 목록)을 설정하지 않은 경우 권한 부여 토큰을 사용하여 Azure Cosmos 계정에 액세스할 수 있습니다. Azure Cosmos 계정에서 IP 방화벽과 VNET ACL 중 하나 또는 모두 설정되면 지정한(및 권한 부여 토큰 사용) 원본에서 발생하는 요청만 유효한 응답을 가져옵니다.

IP 방화벽을 사용하여 Azure Cosmos DB 계정에 저장된 데이터를 보호할 수 있습니다. Azure Cosmos DB는 인바운드 방화벽 지원을 위해 IP 기반 액세스 제어를 지원합니다. 다음 방법 중 하나를 사용하여 Azure Cosmos DB 계정에서 IP 방화벽을 설정할 수 있습니다.

  • Azure Portal에서
  • Azure Resource Manager 템플릿을 사용하여 선언적으로
  • ipRangeFilter 속성을 업데이트하여 Azure CLI 또는 Azure PowerShell을 통해 프로그래밍 방식으로

Azure Portal을 사용하여 IP 방화벽 구성

Azure Portal에서 IP 액세스 제어 정책을 설정하려면 Azure Cosmos DB 계정 페이지로 이동하고 탐색 메뉴에서 방화벽 및 가상 네트워크를 선택합니다. 다음에서 액세스 허용 값을 선택한 네트워크로 변경한 다음, 저장을 선택합니다.

Screenshot showing how to open the Firewall page in the Azure portal

IP 액세스 제어가 켜지면 Azure Portal에서는 IP 주소, IP 주소 범위 및 스위치를 지정하는 기능을 제공합니다. 스위치를 사용하면 다른 Azure 서비스 및 Azure Portal에 액세스할 수 있습니다. 이러한 스위치에 대한 세부 정보는 다음 섹션에 나와 있습니다.

참고

Azure Cosmos DB 계정에 대해 IP 액세스 제어 정책을 사용하도록 설정한 후에는 허용되는 IP 주소 범위 목록 이외의 머신에서 시도하는 Azure Cosmos DB 계정에 대한 모든 요청이 거부됩니다. 액세스 제어의 무결성을 보장하기 위해 포털에서 Azure Cosmos DB 리소스를 찾아보는 기능도 차단됩니다.

Azure Portal의 요청 허용

프로그래밍 방식으로 IP 액세스 제어 정책을 사용하도록 설정할 경우 Azure Portal의 IP 주소를 ipRangeFilter 속성에 추가해야 액세스가 유지됩니다. 포털 IP 주소는 다음과 같습니다.

지역 IP 주소
독일 51.4.229.218
중국 139.217.8.252
US Gov 52.244.48.71
다른 모든 하위 지역 104.42.195.92,40.76.54.131,52.176.6.30,52.169.50.45,52.187.184.26

다음 스크린샷에 표시된 대로 Azure Portal에서 액세스하도록 허용 옵션을 선택하여 Azure Portal에 대한 액세스에 대한 요청을 사용하도록 설정할 수 있습니다.

Screenshot showing how to enable Azure portal access

글로벌 Azure 데이터 센터 또는 Azure 내 다른 원본의 요청 허용

고정 IP를 제공하지 않는 서비스(예: Azure Stream Analytics 및 Azure Functions)에서 Azure Cosmos DB 계정에 액세스하는 경우 IP 방화벽을 사용하여 액세스를 제한할 수 있습니다. 다음 스크린샷에 표시된 것처럼 Azure 데이터 센터 내에서 연결 허용 옵션을 선택하여 Azure 내의 다른 소스에서 액세스할 수 있습니다.

Screenshot showing how to accept connections from Azure datacenters

이 옵션을 사용하면 IP 주소 0.0.0.0이 허용된 IP 주소 목록에 추가됩니다. 0.0.0.0 주소는 Azure 데이터 센터 IP 범위에서 Azure Cosmos DB 계정에 대한 요청을 제한합니다. 이 설정은 Azure Cosmos DB 계정에 대해 다른 IP 범위의 액세스를 허용하지 않습니다.

참고

이 옵션은 Azure에 배포된 다른 고객 구독의 요청을 비롯한 Azure의 모든 요청을 허용하도록 방화벽을 구성합니다. 이 옵션에서 허용된 IP 목록은 광범위하므로 방화벽 정책의 효율성을 제한합니다. 요청이 정적 IP 또는 가상 네트워크의 서브넷에서 발생하지 않는 경우에만 이 옵션을 사용합니다. Azure Portal은 Azure에 배포되기 때문에 이 옵션을 선택하면 자동으로 Azure Portal에서 액세스하도록 허용합니다.

현재 IP의 요청

개발을 간소화하기 위해 Azure Portal을 통해 클라이언트 머신의 IP를 식별하여 허용된 목록에 추가할 수 있습니다. 그러면 머신에서 실행되는 앱은 Azure Cosmos DB 계정에 액세스할 수 있습니다.

포털은 클라이언트 IP 주소를 자동으로 검색합니다. 이 주소는 머신의 클라이언트 IP 주소이거나 네트워크 게이트웨이의 IP 주소일 수 있습니다. 프로덕션에 대한 워크로드를 수행하기 전에 이 IP 주소를 제거해야 합니다.

현재 IP를 IP 목록에 추가하려면 내 현재 IP 추가를 선택합니다. 그런 다음 저장을 선택합니다.

Screenshot showing a how to configure firewall settings for the current IP

클라우드 서비스의 요청

Azure에서 클라우드 서비스는 Azure Cosmos DB를 사용하여 중간 계층 서비스 논리를 호스팅하는 일반적인 방법입니다. 클라우드 서비스에서 Azure Cosmos DB 계정에 액세스할 수 있게 하려면 IP 액세스 제어 정책을 구성하여 클라우드 서비스의 공용 IP 주소를 Azure Cosmos DB 계정에 연결된 허용된 IP 주소 목록에 추가해야 합니다. 이렇게 하면 클라우드 서비스의 모든 역할 인스턴스가 Azure Cosmos DB 계정에 액세스할 수 있습니다.

다음 스크린샷처럼 Azure Portal에서 클라우드 서비스의 IP 주소를 검색할 수 있습니다.

Screenshot showing the public IP address for a cloud service displayed in the Azure portal

역할 인스턴스를 추가하여 클라우드 서비스를 스케일 아웃할 때 이러한 새 인스턴스는 동일한 클라우드 서비스에 포함되므로 자동으로 Azure Cosmos DB 계정에 대한 액세스 권한을 갖습니다.

가상 머신의 요청

Azure Cosmos DB를 사용하여 중간 계층 서비스를 호스트하는 데 가상 머신 또는 가상 머신 확장 집합을 사용할 수도 있습니다. 가상 머신에서 액세스할 수 있도록 Cosmos DB 계정을 구성하려면 IP 액세스 제어 정책을 구성하여 가상 머신 및/또는 가상 머신 확장 집합의 공용 IP 주소를 Azure Cosmos DB 계정에 허용되는 IP 주소 중 하나로 구성해야 합니다.

다음 스크린샷처럼 Azure Portal에서 가상 머신의 IP 주소를 검색할 수 있습니다.

Screenshot showing a public IP address for a virtual machine displayed in the Azure portal

그룹에 가상 머신 인스턴스를 추가하면 Azure Cosmos DB 계정에 대한 액세스 권한을 자동으로 부여합니다.

인터넷의 요청

인터넷에 있는 컴퓨터에서 Azure Cosmos DB 계정에 액세스하는 경우 머신의 클라이언트 IP 주소 또는 IP 주소 범위를 사용자 계정의 허용되는 IP 주소 목록에 추가해야 합니다.

방화벽에 아웃바운드 규칙 추가

방화벽 설정에 추가할 아웃바운드 IP 범위의 현재 목록에 액세스하려면 Azure IP 범위 및 서비스 태그 다운로드를 참조하세요.

목록을 자동화하려면 서비스 태그 검색 API 사용을 참조하세요.

Resource Manager 템플릿을 사용하여 IP 방화벽 구성

Azure Cosmos DB 계정에 대한 액세스 제어를 구성하려면 Resource Manager 템플릿이 허용된 IP 범위 배열로 ipRules 속성을 지정하는지 확인합니다. 이미 배포된 Cosmos 계정에 IP 방화벽을 구성하는 경우 locations 배열이 현재 배포된 것과 일치하는지 확인합니다. locations 배열과 기타 속성을 동시에 수정할 수 없습니다. Azure Cosmos DB용 Azure Resource Manager 템플릿에 대한 자세한 내용과 샘플은 Azure Cosmos DB용 Azure Resource Manager 템플릿을 참조하세요.

중요

ipRules 속성은 API 버전 2020-04-01에 도입되었습니다. 이전 버전에서는 쉼표로 구분된 IP 주소 목록인 ipRangeFilter 속성이 대신 노출되었습니다.

아래 예는 API 버전 2020-04-01 이상에서 ipRules 속성이 노출되는 방식을 보여 줍니다.

{
  "type": "Microsoft.DocumentDB/databaseAccounts",
  "name": "[variables('accountName')]",
  "apiVersion": "2020-04-01",
  "location": "[parameters('location')]",
  "kind": "GlobalDocumentDB",
  "properties": {
    "consistencyPolicy": "[variables('consistencyPolicy')[parameters('defaultConsistencyLevel')]]",
    "locations": "[variables('locations')]",
    "databaseAccountOfferType": "Standard",
    "enableAutomaticFailover": "[parameters('automaticFailover')]",
    "ipRules": [
      {
        "ipAddressOrRange": "40.76.54.131"
      },
      {
        "ipAddressOrRange": "52.176.6.30"
      },
      {
        "ipAddressOrRange": "52.169.50.45"
      },
      {
        "ipAddressOrRange": "52.187.184.26"
      }
    ]
  }
}

다음은 2020-04-01 이전의 모든 API 버전에 대한 동일한 예입니다.

{
  "type": "Microsoft.DocumentDB/databaseAccounts",
  "name": "[variables('accountName')]",
  "apiVersion": "2019-08-01",
  "location": "[parameters('location')]",
  "kind": "GlobalDocumentDB",
  "properties": {
    "consistencyPolicy": "[variables('consistencyPolicy')[parameters('defaultConsistencyLevel')]]",
    "locations": "[variables('locations')]",
    "databaseAccountOfferType": "Standard",
    "enableAutomaticFailover": "[parameters('automaticFailover')]",
    "ipRangeFilter":"40.76.54.131,52.176.6.30,52.169.50.45,52.187.184.26"
  }
}

Azure CLI를 사용하여 IP 액세스 제어 정책 구성

다음 명령은 IP 액세스 제어를 사용하여 Azure Cosmos DB 계정을 만드는 방법을 보여줍니다.

# Create a Cosmos DB account with default values and IP Firewall enabled
resourceGroupName='MyResourceGroup'
accountName='mycosmosaccount'
ipRangeFilter='192.168.221.17,183.240.196.255,40.76.54.131'

# Make sure there are no spaces in the comma-delimited list of IP addresses or CIDR ranges.
az cosmosdb create \
    -n $accountName \
    -g $resourceGroupName \
    --locations regionName='West US 2' failoverPriority=0 isZoneRedundant=False \
    --locations regionName='East US 2' failoverPriority=1 isZoneRedundant=False \
    --ip-range-filter $ipRangeFilter

PowerShell을 사용하여 IP 액세스 제어 정책 구성

다음 스크립트는 IP 액세스 제어를 사용하여 Azure Cosmos DB 계정을 만드는 방법을 보여줍니다.

# Create a Cosmos DB account with default values and IP Firewall enabled
$resourceGroupName = "myResourceGroup"
$accountName = "mycosmosaccount"
$ipRules = @("192.168.221.17","183.240.196.255","40.76.54.131")

$locations = @(
    @{ "locationName"="West US 2"; "failoverPriority"=0; "isZoneRedundant"=False },
    @{ "locationName"="East US 2"; "failoverPriority"=1, "isZoneRedundant"=False }
)

# Make sure there are no spaces in the comma-delimited list of IP addresses or CIDR ranges.
$CosmosDBProperties = @{
    "databaseAccountOfferType"="Standard";
    "locations"=$locations;
    "ipRules"=$ipRules
}

New-AzResource -ResourceType "Microsoft.DocumentDb/databaseAccounts" `
    -ApiVersion "2020-04-01" -ResourceGroupName $resourceGroupName `
    -Name $accountName -PropertyObject $CosmosDBProperties

IP 액세스 제어 정책 관련 문제 해결

다음 옵션을 사용하여 IP 액세스 제어 정책 관련 문제를 해결할 수 있습니다.

Azure portal

Azure Cosmos DB 계정에 대해 IP 액세스 제어 정책을 사용하도록 설정하면 허용되는 IP 주소 범위 목록 이외의 머신에서 시도하는 계정에 대한 모든 요청이 차단됩니다. 컨테이너 탐색 및 문서 쿼리와 같은 포털 데이터 평면 작업을 사용하도록 설정하려면 포털의 방화벽 창을 사용하여 Azure Portal 액세스를 명시적으로 허용해야 합니다.

SDK

허용 목록에 없는 머신에서 SDK를 사용하여 Azure Cosmos DB 리소스에 액세스하는 경우 일반적인 403 사용 권한 없음 응답이 추가 정보 없이 반환됩니다. 계정에 대해 허용된 IP 목록을 확인하고 Azure Cosmos DB 계정에 올바른 정책 구성이 적용되는지 확인합니다.

차단된 요청의 원본 IP

Azure Cosmos DB 계정에 진단 로깅을 사용하도록 설정합니다. 이러한 로그는 각 요청 및 응답을 보여줍니다. 방화벽 관련 메시지가 403 반환 코드와 함께 로깅됩니다. 이러한 메시지를 필터링하면 차단된 요청에 대한 원본 IP를 확인할 수 있습니다. Azure Cosmos DB 진단 로깅을 확인합니다.

Azure Cosmos DB에 대해 서비스 엔드포인트를 설정한 서브넷의 요청

Azure Cosmos DB에 대한 서비스 엔드포인트가 활성화된 가상 네트워크에 위치한 서브넷의 요청은 가상 네트워크 및 서브넷 ID를 Azure Cosmos DB 계정에 전송합니다. 이러한 요청에는 원본의 공용 IP가 없으므로 IP 필터에 의해 거부됩니다. 가상 네트워크에 있는 특정 서브넷의 액세스를 허용하려면 Azure Cosmos DB 계정의 가상 네트워크 및 서브넷 기반 액세스를 구성하는 방법에 설명된 대로 액세스 제어 목록을 추가합니다. 방화벽 규칙을 적용하는 데 최대 15분이 걸릴 수 있으며 이 기간 동안에는 방화벽에서 일관되지 않은 동작을 발생시킬 수 있습니다.

허용된 주소 목록의 개인 IP 주소

개인 IP 주소를 포함하는 허용된 주소 목록을 사용하여 Azure Cosmos 계정을 만들거나 업데이트하지 못합니다. 목록에 개인 IP 주소가 지정되어 있지 않은지 확인합니다.

다음 단계

Azure Cosmos DB 계정에 대한 가상 네트워크 서비스 엔드포인트를 구성하려면 다음 문서를 참조하세요.