Azure Data Explorer クラスターからの送信アクセスを制限する
クラスターの送信アクセスを制限することは、データ流出などのリスクを軽減するために重要です。 悪意のあるアクターは、ストレージ アカウントへの外部テーブルを作成し、大量のデータを抽出する可能性があります。 コールアウト ポリシーを定義することで、クラスター レベルで送信アクセスを制御できます。 コールアウト ポリシーを管理すると、指定した SQL、ストレージ、またはその他のエンドポイントへの送信アクセスを許可できます。
この記事では、クラスターからのコールアウトをさらに制限できるコールアウト ポリシーの拡張機能について説明します。
コールアウト ポリシーの種類
コールアウト ポリシーは、次のように分割できます。
- 変更できないコールアウト ポリシー: これらはクラスターの標準ポリシーです。 事前に構成されており、変更できません。
- クラスター コールアウト ポリシー: これらは、コールアウト ポリシー コマンドを使用して変更できるポリシーです。
前提条件
- Azure サブスクリプション。 無料の Azure アカウントを作成します。
- Azure Data Explorer クラスターとデータベース。 クラスターとデータベースを作成します。
コールアウト ポリシー コマンドを実行する
Azure Data Explorer の Web 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"
Note
Azure Data Explorer が内部ストレージ レイヤーと通信するための既定のポリシー セットが設定されています。 データ流出のリスクはありません。