Ograniczanie dostępu wychodzącego z klastra usługi Azure Data Explorer
Ograniczenie dostępu wychodzącego klastra jest ważne, aby ograniczyć ryzyko, takie jak eksfiltracja danych. Złośliwy aktor może potencjalnie utworzyć tabelę zewnętrzną na koncie magazynu i wyodrębnić duże ilości danych. Dostęp wychodzący można kontrolować na poziomie klastra, definiując zasady objaśnień. Zarządzanie zasadami objaśnień umożliwia zezwalanie na dostęp wychodzący do określonych punktów końcowych SQL, storage lub innych punktów końcowych.
W tym artykule dowiesz się, jak rozszerzenie do zasad objaśnień, które umożliwia dalsze ograniczanie wywołań z klastra.
Typy zasad objaśnień
Zasady objaśnienie można podzielić w następujący sposób:
- Niezmienne zasady objaśnień: są to standardowe zasady klastra. Są one wstępnie skonfigurowane i nie można ich modyfikować.
- Zasady objaśnień klastra: są to zasady, które można modyfikować przy użyciu poleceń zasad objaśnień.
Wymagania wstępne
- Subskrypcja platformy Azure. Utwórz bezpłatne konto platformy Azure.
- Baza danych i klaster usługi Azure Data Explorer. Utwórz klaster i bazę danych.
Uruchamianie poleceń zasad objaśnień
Zaloguj się do internetowego interfejsu użytkownika usługi Azure Data Explorer.
W menu po lewej stronie wybierz pozycję Zapytanie, a następnie połącz się z klastrem.
W oknie zapytania uruchom następujące zapytanie, aby sprawdzić listę niezmiennych zasad objaśnienia w klastrze:
.show cluster policy callout
Poniżej przedstawiono przykład niezmiennych zasad objaśnienia. Zwróć uwagę, że na liście istnieje kilka domyślnych reguł, które umożliwiają wykonywanie wywołań do innych usług, takich jak dane zewnętrzne.
[
{
"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
}
]
Opróżnij listę niezmiennych zasad objaśnień
Aby ograniczyć dostęp wychodzący do z klastra, należy opróżnić listę niezmiennych zasad objaśnień. Możesz to zrobić, uruchamiając następujące polecenie przy użyciu interfejsu wiersza polecenia platformy Azure lub innych narzędzi, wywołując interfejsy API usługi Azure Data Explorer.
Wyzwalanie wdrożenia usługi ARM przy użyciu interfejsu wiersza polecenia platformy Azure ze zaktualizowanym szablonem usługi ARM:
Przykładowy plik szablonu usługi ARM o nazwie "template.json" z właściwością restrictOutboundNetworkAccess ustawioną na wartość Włączone:
{ "$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", ... } } ... ] }
Przykładowe wywołanie przy użyciu interfejsu wiersza polecenia platformy Azure odwołującego się do powyższego szablonu.
# Replace the <...> placeholders with the correct values az deployment group create --name RestrictOutboundAccess --resource-group <resource group> --template-file ./template.json
Zaktualizowanie właściwości klastra
restrictOutboundNetworkAccess
spowoduje usunięcie wszystkich niezmiennych zasad w klastrze. Zapobiega to inicjowaniu wywołań do innych usług, jak pokazano w poniższym przykładzie.Uruchom ponownie następujące polecenie i sprawdź, czy zwraca pustą listę:
.show cluster policy callout | where EntityType == "Cluster immutable policy"
Dodawanie nazw FQDN do objaśnień w ograniczonych warunkach
Jeśli chcesz zezwolić na dostęp wychodzący do określonej nazwy FQDN, możesz dodać go do allowedFqdnList
listy klastra. Możesz to zrobić, uruchamiając polecenie, wprowadzając zmiany w szablonie usługi ARM klastra usługi Azure Data Explorer.
Wyzwalanie wdrożenia usługi ARM przy użyciu interfejsu wiersza polecenia platformy Azure ze zaktualizowanym szablonem usługi ARM:
Przykładowy plik szablonu usługi ARM o nazwie "template.json" z właściwością allowedFqdnList ustawioną na wartość ["some.sql.azuresynapse.net", "..."]:
{ "$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", "..."] ... } } ... ] }
Przykładowe wywołanie przy użyciu interfejsu wiersza polecenia platformy Azure odwołującego się do powyższego szablonu.
# Replace the <...> placeholders with the correct values az deployment group create --name ConfigureAllowedFqdnList --resource-group <resource group> --template-file ./template.json
Dodając nazwę FQDN do listy dozwolonych, będzie można wykonywać wywołania określonej nazwy FQDN. Wynik wdrożenia można sprawdzić, wykonując następujące polecenie:
.show cluster policy callout | project Policy=parse_json(Policy) | mv-expand Policy | where Policy.CalloutType == "sql"
Uwaga
Istnieje zestaw domyślnych zasad ustawionych dla usługi Azure Data Explorer do komunikowania się z wewnętrzną warstwą magazynu. Nie narażają się na ryzyko eksfiltracji danych.