Ограничение подключений между арендаторами через частные конечные точки в Azure

Заказчики все чаще используют частные конечные точки в клиентах для надежного подключения к службам Azure PaaS (платформа как услуга). Частные конечные точки могут подключаться к службам в клиентах Microsoft Entra. Для обеспечения безопасности и соответствия требованиям может потребоваться заблокировать подключения между клиентами Microsoft Entra на частных конечных точках. В этом руководстве приведены рекомендуемые параметры конфигурации для ограничения или запрета подключений к частным конечным точкам между клиентами. Эти параметры помогают создавать элементы управления предотвращения утечки данных (DLP) в среде Azure.

Общие сведения о частных конечных точках

Используйте частные конечные точки для управления трафиком в среде Azure с помощью существующего периметра сети. Но существуют сценарии, в которых необходимо хранить подключения частной конечной точки только в корпоративном клиенте Microsoft Entra. В следующих примерах показаны подключения, которые могут создавать риски безопасности.

  • Подключение A. Незаконный администратор создает частные конечные точки в виртуальной сети клиента. Эти конечные точки ссылаются на службы, размещенные вне клиентской среды, например другой клиент Microsoft Entra.
  • Подключение ion B: Администратор-изгоев создает частные конечные точки в других клиентах Microsoft Entra, которые связываются со службами, размещенными в клиенте Microsoft Entra клиента.

Diagram that shows cross-tenant private endpoint connection scenarios.

Рис. 1. Иллюстрация сценариев использования частной конечной точки между клиентами.

В обоих сценариях необходимо указать идентификатор ресурса службы и вручную утвердить подключение к частной конечной точке. Пользователям также требуется доступ к управлению доступом на основе ролей (RBAC) для выполнения этих действий.

Подключение ions C и D на рис. 1 показывают сценарии, которые клиенты обычно хотят разрешить. Подключения к частной конечной точке хранятся в корпоративном клиенте Microsoft Entra. Они не представляют угрозу безопасности, поэтому эти два сценария не рассматриваются в этой статье.

Следующие сведения позволяют предотвратить подготовку частных конечных точек в клиентах Microsoft Entra.

Запретить частные конечные точки, связанные со службами в других клиентах

Сценарий один: администратор-изгоев требует следующие права в подписке в клиенте Microsoft Entra клиента.

  • Права Microsoft.Network/virtualNetworks/join/action для подсети, где для параметра privateEndpointNetworkPolicies установлено Отключено.
  • Доступ Microsoft.Network/privateEndpoints/write для группы ресурсов в среде заказчика.

С этими правами администратор может создать частную конечную точку в клиенте Microsoft Entra клиента. Эта частная конечная точка ссылается на службу в отдельной подписке и клиенте Microsoft Entra. На рисунке 1 показан этот сценарий в виде подключения A.

В этом сценарии пользователь настраивает внешний клиент Microsoft Entra и подписку Azure. Затем они создают частную конечную точку в клиентской среде, вручную указывая идентификатор ресурса службы. Наконец, администратор-изгой утверждает частную конечную точку связанной службы, размещенной во внешнем клиенте Microsoft Entra, чтобы разрешить трафик через подключение.

После того, как администратор-изгой утвердит подключение к частной конечной точке, корпоративные данные можно скопировать из корпоративной виртуальной сети в службу Azure во внешнем клиенте Microsoft Entra. Эта угроза безопасности может возникать, только если доступ был предоставлен с помощью Azure RBAC.

Устранение рисков для сценария 1

Используйте следующую Политика Azure, чтобы автоматически блокировать возможность создания частной конечной точки в корпоративном клиенте Microsoft Entra, связанном с внешней службой Azure.

"if": {
    "allOf": [
        {
            "field": "type",
            "equals": "Microsoft.Network/privateEndpoints"
        },
        {
            "anyOf": [
                {
                    "count": {
                        "field": "Microsoft.Network/privateEndpoints/manualprivateLinkServiceConnections[*]",
                        "where": {
                            "allOf": [
                                {
                                    "field": "Microsoft.Network/privateEndpoints/manualprivateLinkServiceConnections[*].privateLinkServiceId",
                                    "notEquals": ""
                                },
                                {
                                    "value": "[split(concat(first(field('Microsoft.Network/privateEndpoints/manualprivateLinkServiceConnections[*].privateLinkServiceId')), '//'), '/')[2]]",
                                    "notEquals": "[subscription().subscriptionId]"
                                }
                            ]
                        }
                    },
                    "greaterOrEquals": 1
                },
                {
                    "count": {
                        "field": "Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*]",
                        "where": {
                            "allOf": [
                                {
                                    "field": "Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*].privateLinkServiceId",
                                    "notEquals": ""
                                },
                                {
                                    "value": "[split(concat(first(field('Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*].privateLinkServiceId')), '//'), '/')[2]]",
                                    "notEquals": "[subscription().subscriptionId]"
                                }
                            ]
                        }
                    },
                    "greaterOrEquals": 1
                }
            ]
        }
    ]
},
"then": {
    "effect": "Deny"
}

Эта политика запрещает создание любых частных конечных точек за пределами подписки связанной службы, например подключения A и D. Политика также позволяет использовать manualPrivateLinkServiceConnections и privateLinkServiceConnections.

Эту политику можно обновить, чтобы частные конечные точки были созданы только в определенном наборе подписок. Это изменение можно внести, добавив list параметр и используя конструкцию "notIn": "[parameters('allowedSubscriptions')]" . Но этот подход не рекомендуется, так как это означает, что вам придется постоянно поддерживать список подписок для этой политики. При создании новой подписки в клиенте идентификатор подписки должен быть добавлен в параметр.

Вместо этого назначьте политику группе управления верхнего уровня, а затем используйте исключения, где это необходимо.

Рекомендации по сценарию 1

Эта политика блокирует возможность создания частных конечных точек, которые находятся в подписке, отличной от самой службы. Если эти конечные точки необходимы для определенных вариантов использования, используйте исключения политики. Создайте дополнительные политики для фабрики данных и Azure Synapse, чтобы убедиться, что управляемые частные конечные точки, размещенные в управляемой виртуальной сети, могут подключаться только к службам, размещенным в клиенте Microsoft Entra.

Запретить подключения из частных конечных точек, созданных в других клиентах

Сценарий два: администратор-изгоев требует доступа на запись в службу в клиентской среде, для которой должна быть создана частная конечная точка.

С этим правом администратор может создать частную конечную точку во внешнем клиенте и подписке Microsoft Entra. Эта конечная точка ссылается на службу в клиенте Microsoft Entra клиента. На рисунке 1 показан этот сценарий в качестве подключения B.

В этом сценарии администратор-изгоев должен сначала настроить внешний частный клиент Microsoft Entra и подписку Azure. Затем они создают частную конечную точку в своей среде, вручную указывая идентификатор ресурса и идентификатор группы службы в корпоративном клиенте Microsoft Entra. Наконец, они утверждают частную конечную точку в связанной службе, чтобы разрешить трафик через подключение между клиентами Microsoft Entra.

После того, как администратор или владелец службы утвердит частную конечную точку, доступ к данным осуществляется из внешней виртуальной сети.

Устранение рисков для сценария 2

Используйте политики для конкретных служб, чтобы предотвратить этот сценарий в клиенте заказчика. Подключения к частным конечным точкам — это подресурсы соответствующих служб, которые отображаются в разделе их свойств. Запретить несоответствующие подключения с помощью следующего определения политики:

"if": {
    "allOf": [
        {
            "field": "type",
            "equals": "Microsoft.Storage/storageAccounts/privateEndpointConnections"
        },
        {
            "field": "Microsoft.Storage/storageAccounts/privateEndpointConnections/privateLinkServiceConnectionState.status",
            "equals": "Approved"
        },
        {
            "anyOf": [
                {
                    "field": "Microsoft.Storage/storageAccounts/privateEndpointConnections/privateEndpoint.id",
                    "exists": false
                },
                {
                    "value": "[split(concat(field('Microsoft.Storage/storageAccounts/privateEndpointConnections/privateEndpoint.id'), '//'), '/')[2]]",
                    "notEquals": "[subscription().subscriptionId]"
                }
            ]
        }
    ]
},
"then": {
    "effect": "Deny"
}

Эта политика показывает пример для службы хранилища Azure. Репликация того же определения политики для других служб, таких как Key Vault, когнитивные службы и SQL Server. Обратите внимание, что служба приложение Azure в настоящее время не поддерживает это устранение рисков.

Чтобы повысить управляемость, объедините политики конкретной службы в инициативу. Политика запрещает утверждение подключений частной конечной точки для частных конечных точек, размещенных за пределами подписки соответствующей службы. Она не запрещает отклонение или удаление подключений к частным конечным точкам, и это то поведение, которое требуется заказчикам. Эта политика не затрагивает рабочие процессы автоматического утверждения, такие как подключение C.

Но утверждение соответствующих подключений к частной конечной точке на портале блокируется с помощью этого метода. Это связано с тем, что пользовательский интерфейс портала не отправляет идентификатор ресурса подключенной частной конечной точки в полезных данных. Рекомендуется использовать Azure Resource Manager, Azure PowerShell или Azure CLI для утверждения подключения к частной конечной точке.

Кроме того, назначьте политику группе управления верхнего уровня и используйте исключения, если это необходимо.

Рекомендации по сценарию 2

Azure Synapse Analytics и Фабрика данных Azure предлагают управляемые виртуальные сети и управляемые частные конечные точки. Из-за этих новых возможностей политика блокирует безопасное и частное использование этих служб.

Рекомендуется использовать эффект аудита вместо эффекта "Запретить" в определении политики, используемом в сценарии двух мер. Это изменение помогает отслеживать создание частных конечных точек в отдельных подписках и клиентах. Кроме того, можно использовать исключения из политик для соответствующих областей платформы данных.

Azure Data Factory

Чтобы преодолеть сценарий в управляемой виртуальной сети Фабрика данных Azure, используйте следующее определение политики:

"if": {
    "allOf": [
        {
            "field": "type",
            "equals": "Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints"
        },
        {
            "anyOf": [
                {
                    "field": "Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints/privateLinkResourceId",
                    "exists": false
                },
                {
                    "value": "[split(field('Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints/privateLinkResourceId'), '/')[2]]",
                    "notEquals": "[subscription().subscriptionId]"
                }
            ]
        }
    ]
},
"then": {
    "effect": "[parameters('effect')]"
}

Эта политика запрещает управляемые частные конечные точки, связанные со службами, размещенными вне подписки фабрики данных. Эту политику можно изменить, чтобы разрешить подключения к службам, размещенным в наборе подписок, добавив параметр list и использовав конструкцию "notIn": "[parameters('allowedSubscriptions')]". Мы рекомендуем это изменение для области платформы данных в клиенте или в средах, где широко используются службы с управляемыми виртуальными сетями и управляемыми частными конечными точками.

Рекомендуется назначить эту политику группе управления верхнего уровня и использовать исключения, если это необходимо. Для платформы данных внесите эти изменения и назначьте политику набору подписок платформы данных.

Azure Synapse

Azure Synapse также использует управляемые виртуальные сети. Мы рекомендуем применить аналогичную политику к Фабрике данных для сценария 1. Azure Synapse не предоставляет псевдоним политики для управляемых частных конечных точек. Но существует функция предотвращения кражи данных, которая может быть применена для рабочих областей с помощью следующей политики:

"if": {
    "allOf": [
        {
            "field": "type",
            "equals": "Microsoft.Synapse/workspaces"
        },
        {
            "anyOf": [
                {
                    "field": "Microsoft.Synapse/workspaces/managedVirtualNetworkSettings.preventDataExfiltration",
                    "exists": false
                },
                {
                    "field": "Microsoft.Synapse/workspaces/managedVirtualNetworkSettings.preventDataExfiltration",
                    "notEquals": true
                },
                {
                    "count": {
                        "field": "Microsoft.Synapse/workspaces/managedVirtualNetworkSettings.allowedAadTenantIdsForLinking[*]",
                        "where": {
                            "field": "Microsoft.Synapse/workspaces/managedVirtualNetworkSettings.allowedAadTenantIdsForLinking[*]",
                            "notEquals": "[subscription().tenantId]"
                        }
                    },
                    "greaterOrEquals": 1
                }
            ]
        }
    ]
},
"then": {
    "effect": "Deny"
}

Эта политика обеспечивает применение функции защиты от кражи данных в Azure Synapse. С помощью Azure Synapse можно запретить любую частную конечную точку из службы, размещенной за пределами клиента. Можно также запретить любую частную конечную точку, размещенную за пределами указанного набора идентификаторов клиента. Эта политика позволяет создавать управляемые частные конечные точки, связанные со службами, размещенными в клиенте клиента.

Эти политики теперь доступны как встроенные.

  • Рабочие области Azure Synapse должны разрешать исходящий трафик только к утвержденным целевым объектам.

    Идентификатор определения: /providers/Microsoft.Authorization/policyDefinitions/3484ce98-c0c5-4c83-994b-c5ac24785218

  • Управляемые частные конечные точки Azure Synapse должны подключаться только к ресурсам в утвержденных клиентах Microsoft Entra.

    Идентификатор определения: /providers/Microsoft.Authorization/policyDefinitions/3a003702-13d2-4679-941b-937e58c443f0

Рекомендуется назначить политику группе управления верхнего уровня и использовать исключения, где это необходимо.

Следующие шаги

Важно изучить рекомендуемые модели подключения для входящего и исходящего подключения к общедоступному Интернету. В следующей статье рассматриваются вопросы проектирования, рекомендации по проектированию и рекомендованное содержимое для дальнейшего ознакомления.