Azure Data Explorer 클러스터에서 아웃바운드 액세스 제한
데이터 반출과 같은 위험을 완화하려면 클러스터의 아웃바운드 액세스를 제한하는 것이 중요합니다. 악의적인 행위자가 잠재적으로 스토리지 계정에 대한 외부 테이블을 만들고 대량의 데이터를 추출할 수 있습니다. 설명선 정책을 정의하여 클러스터 수준에서 아웃바운드 액세스를 제어할 수 있습니다. 설명선 정책을 관리하면 지정된 SQL, 스토리지 또는 기타 엔드포인트에 대한 아웃바운드 액세스를 허용할 수 있습니다.
이 문서에서는 클러스터에서 호출을 추가로 제한할 수 있는 설명선 정책 확장에 대해 알아봅니다.
설명선 정책 유형
설명선 정책은 다음과 같이 나눌 수 있습니다.
- 변경할 수 없는 설명선 정책: 클러스터의 표준 정책입니다. 미리 구성되어 있으며 수정할 수 없습니다.
- 클러스터 설명선 정책: 설명선 정책 명령을 사용하여 수정할 수 있는 정책입니다.
필수 구성 요소
- Azure 구독 평가판 Azure 계정을 만듭니다.
- Azure Data Explorer 클러스터 및 데이터베이스. 클러스터 및 데이터베이스를 만듭니다.
설명선 정책 명령 실행
Azure Data Explorer 웹 UI에 로그인합니다.
왼쪽 메뉴에서 쿼리를 선택한 다음, 클러스터에 연결합니다.
쿼리 창에서 다음 쿼리를 실행하여 클러스터에서 변경할 수 없는 설명선 정책 목록을 검사합니다.
.show cluster policy callout
다음은 변경할 수 없는 설명선 정책의 예를 보여줍니다. 목록에는 외부 데이터와 같은 다른 서비스에 대한 호출을 허용하는 몇 가지 기본 규칙이 있습니다.
[
{
"CalloutType":"kusto",
"CalloutUriRegex":"[a-z0-9]{3,22}\\.(\\w+\\.)?kusto(mfa)?\\.windows\\.net/?$",
"CanCall":true
},
{
"CalloutType":"kusto",
"CalloutUriRegex":"//[a-z0-9]{3,22}\\.[a-z0-9-]{1,50}\\.(kusto\\.azuresynapse|kustodev\\.azuresynapse-dogfood)\\.net/?$",
"CanCall":true
},
{
"CalloutType":"kusto",
"CalloutUriRegex":"^https://([A-Za-z0-9]+\\.)?(ade|adx)\\.(int\\.)?(applicationinsights|loganalytics|monitor)\\.(io|azure(\\.com|\\.us|\\.cn))/",
"CanCall":true
},
{
"CalloutType":"sql",
"CalloutUriRegex":"[a-z0-9][a-z0-9\\-]{0,61}[a-z0-9]?\\.database\\.windows\\.net/?$",
"CanCall":true
},
{
"CalloutType":"sql",
"CalloutUriRegex":"[a-z0-9-]{0,61}?(-ondemand)?\\.sql\\.azuresynapse(-dogfood)?\\.net/?$",
"CanCall":true
},
{
"CalloutType":"external_data",
"CalloutUriRegex":".*",
"CanCall":true
},
{
"CalloutType":"azure_digital_twins",
"CalloutUriRegex":"[A-Za-z0-9\\-]{3,63}\\.api\\.[A-Za-z0-9]+\\.digitaltwins\\.azure\\.net/?$",
"CanCall":true
}
]
변경할 수 없는 설명선 정책 목록 비우기
클러스터에서 아웃바운드 액세스를 제한하려면 변경할 수 없는 설명선 정책 목록을 비워야 합니다. Azure CLI 또는 Azure Data Explorer API를 호출하여 다른 도구를 사용해 다음 명령을 실행하여 이 작업을 수행할 수 있습니다.
업데이트된 ARM 템플릿과 함께 Azure CLI를 사용하여 ARM 배포를 트리거합니다.
restrictOutboundNetworkAccess 속성이 Enabled로 설정된 "template.json"이라는 ARM 템플릿 파일 예제:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", ... "resources": [ { "type": "Microsoft.Kusto/Clusters", "apiVersion": "2021-02-01", ... "properties": { ... "restrictOutboundNetworkAccess": "Enabled", ... } } ... ] }
위의 템플릿을 참조하는 Azure CLI를 사용하는 호출 예제입니다.
# Replace the <...> placeholders with the correct values az deployment group create --name RestrictOutboundAccess --resource-group <resource group> --template-file ./template.json
restrictOutboundNetworkAccess
클러스터 속성을 업데이트하면 클러스터에서 변경할 수 없는 모든 정책이 제거됩니다. 이렇게 하면 다음 예제와 같이 다른 서비스에 대한 호출을 시작할 수 없습니다.다음 명령을 다시 실행하고 빈 목록을 반환하는지 확인합니다.
.show cluster policy callout | where EntityType == "Cluster immutable policy"
제한된 조건에서 설명선에 FQDN 추가
특정 FQDN에 대한 아웃바운드 액세스를 허용하려는 경우 클러스터의 allowedFqdnList
목록에 추가할 수 있습니다. Azure Data Explorer 클러스터의 ARM 템플릿을 변경해 실행하여 이 작업을 수행할 수 있습니다.
업데이트된 ARM 템플릿과 함께 Azure CLI를 사용하여 ARM 배포를 트리거합니다.
allowedFqdnList 속성이 ["some.sql.azuresynapse.net", "..."]로 설정된 "template.json"이라는 ARM 템플릿 파일 예제:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", ... "resources": [ { "type": "Microsoft.Kusto/Clusters", "apiVersion": "2021-02-01", ... "properties": { ... "restrictOutboundNetworkAccess": "Enabled", "allowedFqdnList": ["some.sql.azuresynapse.net", "..."] ... } } ... ] }
위의 템플릿을 참조하는 Azure CLI를 사용하는 호출 예제입니다.
# Replace the <...> placeholders with the correct values az deployment group create --name ConfigureAllowedFqdnList --resource-group <resource group> --template-file ./template.json
허용 목록에 FQDN을 추가하면 지정된 FQDN을 호출할 수 있습니다. 다음 명령을 실행하여 배포 결과를 확인할 수 있습니다.
.show cluster policy callout | project Policy=parse_json(Policy) | mv-expand Policy | where Policy.CalloutType == "sql"
참고
Azure Data Explorer가 내부 스토리지 계층과 통신하도록 설정된 기본 정책 세트가 있습니다. 데이터 반출의 위험을 노출하지 않습니다.