Batasi koneksi titik akhir privat lintas penyewa di Azure

Pelanggan semakin menggunakan titik akhir privat di penyewa mereka untuk terhubung ke platform Azure mereka sebagai platform as a service (PaaS) secara pribadi dan aman. Titik akhir privat dapat terhubung ke layanan di seluruh penyewa Microsoft Entra. Untuk keamanan dan kepatuhan, Anda mungkin perlu memblokir koneksi lintas penyewa Microsoft Entra di titik akhir privat Anda. Panduan ini menunjukkan opsi konfigurasi yang direkomendasikan untuk membatasi atau mencegah koneksi titik akhir privat lintas penyewa. Opsi ini membantu Anda membuat kontrol pencegahan kebocoran data (DLP) di dalam lingkungan Azure Anda.

Pengantar titik akhir privat

Gunakan titik akhir privat untuk mengontrol lalu lintas dalam lingkungan Azure Anda menggunakan perimeter jaringan yang ada. Tetapi ada skenario di mana Anda harus menyimpan koneksi titik akhir privat dalam penyewa Microsoft Entra perusahaan saja. Contoh berikut menunjukkan koneksi yang mungkin membuat risiko keamanan.

  • Koneksi A: Administrator jahat membuat titik akhir privat di jaringan virtual pelanggan. Titik akhir ini ditautkan ke layanan yang dihosting di luar lingkungan pelanggan, seperti penyewa Microsoft Entra lainnya.
  • Koneksi ion B: Administrator nakal membuat titik akhir privat di penyewa Microsoft Entra lainnya yang menautkan ke layanan yang dihosting di penyewa Microsoft Entra pelanggan.

Diagram that shows cross-tenant private endpoint connection scenarios.

Gambar 1: Ilustrasi skenario lintas penyewa titik akhir privat.

Untuk kedua skenario, Anda menentukan ID sumber daya layanan dan menyetujui koneksi titik akhir privat secara manual. Pengguna juga memerlukan akses kontrol akses berbasis peran (RBAC) untuk menjalankan tindakan ini.

Koneksi C dan D dalam Gambar 1 menunjukkan skenario yang umumnya ingin diizinkan pelanggan. Koneksi titik akhir privat disimpan dalam penyewa Microsoft Entra perusahaan. Mereka tidak mewakili risiko keamanan sehingga kedua skenario ini tidak tercakup dalam artikel ini.

Informasi berikut memberi Anda opsi untuk mencegah provisi titik akhir privat di seluruh penyewa Microsoft Entra.

Menolak titik akhir privat yang terkait dengan layanan di penyewa lain

Skenario satu: Administrator nakal memerlukan hak berikut dalam langganan di penyewa Microsoft Entra pelanggan.

  • Hak Microsoft.Network/virtualNetworks/join/action pada subnet dengan privateEndpointNetworkPolicies diset ke Dinonaktifkan.
  • Akses Microsoft.Network/privateEndpoints/write ke grup sumber daya di lingkungan pelanggan.

Dengan hak-hak ini, administrator nakal dapat membuat titik akhir privat di penyewa Microsoft Entra pelanggan. Titik akhir privat ini ditautkan ke layanan dalam langganan terpisah dan penyewa Microsoft Entra. Gambar 1 menunjukkan skenario ini sebagai koneksi A.

Untuk skenario ini, pengguna menyiapkan penyewa Microsoft Entra eksternal dan langganan Azure. Selanjutnya, mereka membuat titik akhir privat di lingkungan pelanggan dengan menentukan ID sumber daya layanan secara manual. Terakhir, administrator nakal menyetujui titik akhir privat pada layanan tertaut yang dihosting di penyewa Microsoft Entra eksternal untuk mengizinkan lalu lintas melalui koneksi.

Setelah administrator nakal menyetujui koneksi titik akhir privat, data perusahaan dapat disalin dari jaringan virtual perusahaan ke layanan Azure pada penyewa Microsoft Entra eksternal. Risiko keamanan ini hanya dapat terjadi jika akses diberikan menggunakan Azure RBAC.

Mitigasi untuk skenario satu

Gunakan Azure Policy berikut untuk secara otomatis memblokir kemampuan untuk membuat titik akhir privat di penyewa Microsoft Entra perusahaan yang ditautkan ke layanan Azure luar.

"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"
}

Kebijakan ini menolak titik akhir pribadi yang dibuat di luar langganan layanan terkait, seperti koneksi A dan D. Kebijakan ini juga memberikan fleksibilitas untuk menggunakan manualPrivateLinkServiceConnections dan privateLinkServiceConnections.

Anda dapat memperbarui kebijakan ini sehingga titik akhir privat hanya dibuat dalam sekumpulan langganan tertentu. Anda dapat membuat perubahan ini dengan menambahkan list parameter dan menggunakan "notIn": "[parameters('allowedSubscriptions')]" konstruksi. Tetapi pendekatan ini tidak disarankan, karena itu berarti Anda harus terus mempertahankan daftar langganan untuk kebijakan ini. Setiap kali langganan baru dibuat di dalam penyewa Anda, ID langganan harus ditambahkan ke parameter .

Sebagai gantinya, tetapkan kebijakan ke grup manajemen tingkat atas, lalu gunakan pengecualian jika diperlukan.

Pertimbangan untuk skenario satu

Kebijakan ini memblokir kemampuan untuk membuat titik akhir privat yang berada dalam langganan yang berbeda dari layanan itu sendiri. Jika titik akhir ini diperlukan untuk kasus penggunaan tertentu, gunakan pengecualian kebijakan. Buat lebih banyak kebijakan untuk Data Factory dan Azure Synapse untuk memastikan bahwa titik akhir privat terkelola yang dihosting di jaringan virtual terkelola hanya dapat terhubung ke layanan yang dihosting dalam penyewa Microsoft Entra Anda.

Tolak koneksi dari titik akhir privat yang dibuat di penyewa lain

Skenario dua: Administrator nakal memerlukan akses tulis pada layanan di lingkungan pelanggan tempat titik akhir privat harus dibuat.

Dengan hak ini, administrator nakal dapat membuat titik akhir privat di penyewa dan langganan Microsoft Entra eksternal. Titik akhir ini menautkan ke layanan di penyewa Microsoft Entra pelanggan. Gambar 1 menunjukkan skenario ini sebagai koneksi B.

Dalam skenario ini, administrator nakal harus terlebih dahulu mengonfigurasi penyewa Microsoft Entra privat eksternal dan langganan Azure. Selanjutnya, mereka membuat titik akhir privat di lingkungan mereka dengan menentukan ID sumber daya dan ID grup layanan secara manual di penyewa Microsoft Entra perusahaan. Terakhir, mereka menyetujui titik akhir privat pada layanan tertaut untuk memungkinkan lalu lintas melalui koneksi di seluruh penyewa Microsoft Entra.

Setelah administrator nakal atau pemilik layanan menyetujui titik akhir privat, data diakses dari jaringan virtual eksternal.

Mitigasi untuk skenario satu

Gunakan kebijakan khusus layanan untuk mencegah skenario ini di seluruh penyewa pelanggan. Koneksi titik akhir privat adalah subsumber daya dari masing-masing layanan dan muncul di bawah bagian properti mereka. Tolak koneksi yang tidak sesuai dengan menggunakan definisi kebijakan berikut:

"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"
}

Kebijakan ini menunjukkan contoh bagi Azure Storage. Replikasi definisi kebijakan yang sama untuk layanan lain seperti Key Vault, layanan kognitif, dan SQL Server. Perhatikan bahwa Azure App Service saat ini tidak mendukung mitigasi ini.

Untuk lebih meningkatkan pengelolaan, bundel kebijakan khusus layanan ke dalam inisiatif. Kebijakan tersebut menolak persetujuan koneksi titik akhir privat ke titik akhir privat yang di-{i>hosting

Tetapi persetujuan koneksi titik akhir privat yang sesuai dalam portal diblokir dengan metode ini. Pemblokiran ini terjadi karena UI portal tidak mengirim ID sumber daya titik akhir privat yang tersambung dalam {i>payloadAzure Resource Manager, Azure PowerShell, atau Azure CLI untuk menyetujui koneksi titik akhir privat.

Selain itu, tetapkan kebijakan ke grup manajemen tingkat atas dan gunakan pengecualian jika diperlukan.

Pertimbangan untuk skenario satu

Azure Synapse Analytics dan Azure Data Factory menawarkan jaringan virtual terkelola dan titik akhir privat terkelola. Karena kemampuan baru ini, kebijakan tersebut memblokir penggunaan layanan ini secara aman dan privat.

Disarankan agar Anda menggunakan efek Audit alih-alih efek Tolak dalam definisi kebijakan yang Anda gunakan dalam skenario dua mitigasi. Perubahan ini membantu Anda melacak titik akhir privat yang dibuat di langganan dan penyewa terpisah. Anda juga dapat menggunakan pengecualian kebijakan untuk cakupan platform data masing-masing.

Azure Data Factory

Untuk mengatasi skenario satu pada jaringan virtual terkelola Azure Data Factory, gunakan definisi kebijakan berikut:

"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')]"
}

Kebijakan ini menolak titik akhir privat terkelola yang ditautkan ke layanan, yang dihosting di luar langganan Data Factory. Anda dapat mengubah kebijakan ini untuk mengizinkan koneksi ke layanan yang dihosting list dalam sekumpulan langganan dengan menambahkan parameter dan dengan menggunakan "notIn": "[parameters('allowedSubscriptions')]" konstruksi. Sebaiknya perubahan ini untuk cakupan platform data di dalam penyewa atau lingkungan di mana layanan dengan jaringan virtual terkelola dan titik akhir privat terkelola banyak digunakan.

Disarankan agar Anda menetapkan kebijakan ini ke grup manajemen tingkat atas dan menggunakan pengecualian jika diperlukan. Untuk platform data, buat perubahan ini dan tetapkan kebijakan ke kumpulan langganan platform data.

Azure Synapse

Azure Synapse juga menggunakan jaringan virtual terkelola. Sebaiknya terapkan kebijakan serupa dengan kebijakan Data Factory untuk skenario satu. Azure Synapse tidak menyediakan alias kebijakan untuk titik akhir privat terkelola. Tetapi ada fitur pencegahan penyelundupan data, yang dapat diberlakukan untuk ruang kerja menggunakan kebijakan berikut:

"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"
}

Kebijakan ini memberlakukan penggunaan fitur penyelundupan data Azure Synapse. Dengan Azure Synapse, Anda dapat menolak titik akhir privat apa pun yang berasal dari layanan yang di-{i>hostinghosting

Kebijakan ini sekarang tersedia sebagai bawaan.

  • Ruang kerja Azure Synapse harus mengizinkan lalu lintas data keluar hanya ke target yang disetujui.

    ID definisi: /providers/Microsoft.Authorization/policyDefinitions/3484ce98-c0c5-4c83-994b-c5ac24785218

  • Titik akhir privat terkelola Azure Synapse hanya boleh tersambung ke sumber daya di penyewa Microsoft Entra yang disetujui.

    ID definisi: /providers/Microsoft.Authorization/policyDefinitions/3a003702-13d2-4679-941b-937e58c443f0

Disarankan agar Anda menetapkan kebijakan ke grup manajemen tingkat atas dan menggunakan pengecualian jika diperlukan.

Langkah berikutnya

Sangat penting untuk memahami model konektivitas yang direkomendasikan untuk konektivitas masuk dan keluar ke dan dari internet publik. Artikel berikutnya meninjau pertimbangan desain, rekomendasi desain, dan konten yang direkomendasikan untuk konten lebih lanjut.