Поделиться через


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

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

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

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

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

Схема, на котором показаны сценарии подключения частной конечной точки между клиентами.

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

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

Подключения 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

Эта политика блокирует возможность создания частных конечных точек, которые находятся в подписке, отличной от самой службы. Если эти конечные точки необходимы для определенных вариантов использования, используйте исключения политики. Создайте дополнительные политики фабрики данных, чтобы убедиться, что управляемые частные конечные точки, размещенные в управляемой виртуальной сети, могут подключаться только к службам, размещенным в клиенте 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, службы ИИ Azure и SQL Server.

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

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

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

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

Фабрика данных 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')]". Мы рекомендуем это изменение для области платформы данных в клиенте или в средах, где широко используются службы с управляемыми виртуальными сетями и управляемыми частными конечными точками.

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

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

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