Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Missing private link DNS zones #481

Merged
merged 16 commits into from
Oct 26, 2022
Merged

Missing private link DNS zones #481

merged 16 commits into from
Oct 26, 2022

Conversation

bentaylorwork
Copy link
Contributor

Overview/Summary

Adds Private Endpoint DNS zones for Purview and Synapse. The DNS zones are present in the ARM version of the ESLZ with a reference to them here:

https://github.com/Azure/Enterprise-Scale/blob/3b35eb22471e23436e5a0bb4cddc224b2edec686/eslzArm/eslzArm.json#L862

This PR fixes/adds/changes/removes

  1. Adds private DNS zones for the following data related private endpoints:
  • privatelink.azuresynapse.net
  • privatelink.dev.azuresynapse.net
  • privatelink.purview.azure.com
  • privatelink.purviewstudio.azure.com

Breaking Changes

Testing Evidence

Terraform plans and apply work locally

As part of this Pull Request I have

  • [X ] Checked for duplicate Pull Requests
  • Associated it with relevant issues, for tracking and closure.
  • Ensured my code/branch is up-to-date with the latest changes in the main branch
  • Performed testing and provided evidence.
  • Updated relevant and associated documentation.
  • Updated the "What's New?" wiki page (located in the Enterprise-Scale repo in the directory: /docs/wiki/whats-new.md)

@krowlandson krowlandson self-requested a review October 7, 2022 11:25
@krowlandson krowlandson self-assigned this Oct 7, 2022
@krowlandson
Copy link
Contributor

Thank you for raising this @bentaylorwork

I will test and review the code changes, but just wanted to check whether you would be willing to add any other missing services as documented in the Azure services DNS zone configuration document?

This will be a breaking change due to the associated input variable schema update so before we release this we will need to get them all updated.

There are also some interesting new additions to these, specifically the new static web apps URI which requires a partitionId value:

image

Although we could support this, it will require some additional configuration settings adding to take a list of required parititionId values.

As we have limited policy coverage in this space, an alternative approach may be to exclude this one and ask users to provide the full URI using the config.private_dns_zones input variable.

We might also be better including this as a broader set of changes as we move to Terraform v1.3.0 so we can include these additional inputs optional() to reduce impact on existing customers.

Thoughts please @sitarant @jtracey93 @matt-FFFFFF ?

Copy link
Contributor

@krowlandson krowlandson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks great, and thank you for your contribution @bentaylorwork 🚀

Please take a look at the feedback and let me know if you would be happy to add to this or would need someone else to add the other services as mentioned in my PR comment

@@ -42,7 +42,7 @@ Default: `{}`
<br>

<!-- markdownlint-disable-next-line MD013 -->
[**configure_connectivity_resources**][configure_connectivity_resources] `object({ settings = object({ hub_networks = list( object({ enabled = bool config = object({ address_space = list(string) location = string link_to_ddos_protection_plan = bool dns_servers = list(string) bgp_community = string subnets = list( object({ name = string address_prefixes = list(string) network_security_group_id = string route_table_id = string }) ) virtual_network_gateway = object({ enabled = bool config = object({ address_prefix = string gateway_sku_expressroute = string gateway_sku_vpn = string advanced_vpn_settings = object({ enable_bgp = bool active_active = bool private_ip_address_allocation = string default_local_network_gateway_id = string vpn_client_configuration = list( object({ address_space = list(string) aad_tenant = string aad_audience = string aad_issuer = string root_certificate = list( object({ name = string public_cert_data = string }) ) revoked_certificate = list( object({ name = string public_cert_data = string }) ) radius_server_address = string radius_server_secret = string vpn_client_protocols = list(string) vpn_auth_types = list(string) }) ) bgp_settings = list( object({ asn = number peer_weight = number peering_addresses = list( object({ ip_configuration_name = string apipa_addresses = list(string) }) ) }) ) custom_route = list( object({ address_prefixes = list(string) }) ) }) }) }) azure_firewall = object({ enabled = bool config = object({ address_prefix = string enable_dns_proxy = bool dns_servers = list(string) sku_tier = string base_policy_id = string private_ip_ranges = list(string) threat_intelligence_mode = string threat_intelligence_allowlist = list(string) availability_zones = object({ zone_1 = bool zone_2 = bool zone_3 = bool }) }) }) spoke_virtual_network_resource_ids = list(string) enable_outbound_virtual_network_peering = bool }) }) ) vwan_hub_networks = list( object({ enabled = bool config = object({ address_prefix = string location = string sku = string routes = list( object({ address_prefixes = list(string) next_hop_ip_address = string }) ) expressroute_gateway = object({ enabled = bool config = object({ scale_unit = number }) }) vpn_gateway = object({ enabled = bool config = object({ bgp_settings = list( object({ asn = number peer_weight = number instance_0_bgp_peering_address = list( object({ custom_ips = list(string) }) ) instance_1_bgp_peering_address = list( object({ custom_ips = list(string) }) ) }) ) routing_preference = string scale_unit = number }) }) azure_firewall = object({ enabled = bool config = object({ enable_dns_proxy = bool dns_servers = list(string) sku_tier = string base_policy_id = string private_ip_ranges = list(string) threat_intelligence_mode = string threat_intelligence_allowlist = list(string) availability_zones = object({ zone_1 = bool zone_2 = bool zone_3 = bool }) }) }) spoke_virtual_network_resource_ids = list(string) enable_virtual_hub_connections = bool }) }) ) ddos_protection_plan = object({ enabled = bool config = object({ location = string }) }) dns = object({ enabled = bool config = object({ location = string enable_private_link_by_service = object({ azure_automation_webhook = bool azure_automation_dscandhybridworker = bool azure_sql_database_sqlserver = bool azure_synapse_analytics_sqlserver = bool azure_synapse_analytics_sql = bool storage_account_blob = bool storage_account_table = bool storage_account_queue = bool storage_account_file = bool storage_account_web = bool azure_data_lake_file_system_gen2 = bool azure_cosmos_db_sql = bool azure_cosmos_db_mongodb = bool azure_cosmos_db_cassandra = bool azure_cosmos_db_gremlin = bool azure_cosmos_db_table = bool azure_database_for_postgresql_server = bool azure_database_for_mysql_server = bool azure_database_for_mariadb_server = bool azure_key_vault = bool azure_kubernetes_service_management = bool azure_search_service = bool azure_container_registry = bool azure_app_configuration_stores = bool azure_backup = bool azure_site_recovery = bool azure_event_hubs_namespace = bool azure_service_bus_namespace = bool azure_iot_hub = bool azure_relay_namespace = bool azure_event_grid_topic = bool azure_event_grid_domain = bool azure_web_apps_sites = bool azure_machine_learning_workspace = bool signalr = bool azure_monitor = bool cognitive_services_account = bool azure_file_sync = bool azure_data_factory = bool azure_data_factory_portal = bool azure_cache_for_redis = bool }) private_link_locations = list(string) public_dns_zones = list(string) private_dns_zones = list(string) enable_private_dns_zone_virtual_network_link_on_hubs = bool enable_private_dns_zone_virtual_network_link_on_spokes = bool }) }) }) location = any tags = any advanced = any })`
[**configure_connectivity_resources**][configure_connectivity_resources] `object({ settings = object({ hub_networks = list( object({ enabled = bool config = object({ address_space = list(string) location = string link_to_ddos_protection_plan = bool dns_servers = list(string) bgp_community = string subnets = list( object({ name = string address_prefixes = list(string) network_security_group_id = string route_table_id = string }) ) virtual_network_gateway = object({ enabled = bool config = object({ address_prefix = string gateway_sku_expressroute = string gateway_sku_vpn = string advanced_vpn_settings = object({ enable_bgp = bool active_active = bool private_ip_address_allocation = string default_local_network_gateway_id = string vpn_client_configuration = list( object({ address_space = list(string) aad_tenant = string aad_audience = string aad_issuer = string root_certificate = list( object({ name = string public_cert_data = string }) ) revoked_certificate = list( object({ name = string public_cert_data = string }) ) radius_server_address = string radius_server_secret = string vpn_client_protocols = list(string) vpn_auth_types = list(string) }) ) bgp_settings = list( object({ asn = number peer_weight = number peering_addresses = list( object({ ip_configuration_name = string apipa_addresses = list(string) }) ) }) ) custom_route = list( object({ address_prefixes = list(string) }) ) }) }) }) azure_firewall = object({ enabled = bool config = object({ address_prefix = string enable_dns_proxy = bool dns_servers = list(string) sku_tier = string base_policy_id = string private_ip_ranges = list(string) threat_intelligence_mode = string threat_intelligence_allowlist = list(string) availability_zones = object({ zone_1 = bool zone_2 = bool zone_3 = bool }) }) }) spoke_virtual_network_resource_ids = list(string) enable_outbound_virtual_network_peering = bool }) }) ) vwan_hub_networks = list( object({ enabled = bool config = object({ address_prefix = string location = string sku = string routes = list( object({ address_prefixes = list(string) next_hop_ip_address = string }) ) expressroute_gateway = object({ enabled = bool config = object({ scale_unit = number }) }) vpn_gateway = object({ enabled = bool config = object({ bgp_settings = list( object({ asn = number peer_weight = number instance_0_bgp_peering_address = list( object({ custom_ips = list(string) }) ) instance_1_bgp_peering_address = list( object({ custom_ips = list(string) }) ) }) ) routing_preference = string scale_unit = number }) }) azure_firewall = object({ enabled = bool config = object({ enable_dns_proxy = bool dns_servers = list(string) sku_tier = string base_policy_id = string private_ip_ranges = list(string) threat_intelligence_mode = string threat_intelligence_allowlist = list(string) availability_zones = object({ zone_1 = bool zone_2 = bool zone_3 = bool }) }) }) spoke_virtual_network_resource_ids = list(string) enable_virtual_hub_connections = bool }) }) ) ddos_protection_plan = object({ enabled = bool config = object({ location = string }) }) dns = object({ enabled = bool config = object({ location = string enable_private_link_by_service = object({ azure_automation_webhook = bool azure_automation_dscandhybridworker = bool azure_sql_database_sqlserver = bool azure_synapse = bool azure_synapse_dev = bool azure_synapse_analytics_sqlserver = bool azure_synapse_analytics_sql = bool storage_account_blob = bool storage_account_table = bool storage_account_queue = bool storage_account_file = bool storage_account_web = bool azure_data_lake_file_system_gen2 = bool azure_cosmos_db_sql = bool azure_cosmos_db_mongodb = bool azure_cosmos_db_cassandra = bool azure_cosmos_db_gremlin = bool azure_cosmos_db_table = bool azure_database_for_postgresql_server = bool azure_database_for_mysql_server = bool azure_database_for_mariadb_server = bool azure_key_vault = bool azure_kubernetes_service_management = bool azure_search_service = bool azure_container_registry = bool azure_app_configuration_stores = bool azure_backup = bool azure_site_recovery = bool azure_event_hubs_namespace = bool azure_service_bus_namespace = bool azure_iot_hub = bool azure_relay_namespace = bool azure_event_grid_topic = bool azure_event_grid_domain = bool azure_web_apps_sites = bool azure_machine_learning_workspace = bool signalr = bool azure_monitor = bool cognitive_services_account = bool azure_file_sync = bool azure_data_factory = bool azure_data_factory_portal = bool azure_cache_for_redis = bool azure_purview = bool azure_purview_studio = bool }) private_link_locations = list(string) public_dns_zones = list(string) private_dns_zones = list(string) enable_private_dns_zone_virtual_network_link_on_hubs = bool enable_private_dns_zone_virtual_network_link_on_spokes = bool }) }) }) location = any tags = any advanced = any })`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I appreciate this is a tricky one to format in markdown, but please can you check the spacing to avoid large gaps like the below:

image

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be resolved in latest commit.

azure_data_factory = true
azure_data_factory_portal = true
azure_cache_for_redis = true
azure_automation_webhook = true
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like you've introduced a "double-indentation" on these lines (4 spaces, rather than 2).

Please can you double check and update accordingly?

Whilst we don't have linting on code snippets in markdown (yet), we would like to ensure the code reflects what would pass terraform fmt checks.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be resolved in latest commit.

@@ -1288,6 +1288,8 @@ locals {
azure_sql_database_sqlserver = ["privatelink.database.windows.net"]
azure_synapse_analytics_sqlserver = ["privatelink.database.windows.net"]
azure_synapse_analytics_sql = ["privatelink.sql.azuresynapse.net"]
azure_synapse = ["privatelink.azuresynapse.net"]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would this be better referred to as azure_synapse_studio?

@mboswell and @marvinbuss please can you input on this one, but also a broader view on the current state of our data product coverage? i.e. are the azure_synapse_analytics_sqlserver and azure_synapse_analytics_sql entries still relevant as the former no longer seems to be mentioned in the docs? 😄

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @krowlandson,
Sorry, I just saw that you tagged me in this comment. privatelink.database.windows.net is not relevant for Synapse. This is only relevant for Azure SQL Servers.

Synapse only requires:

  1. For SQL endpoints: privatelink.sql.azuresynapse.net
  2. For dev endpoints: privatelink.dev.azuresynapse.net
  3. For Data Explorer endpoints: privatelink.kusto.azuresynapse.net
  4. For Synapse Studio: privatelink.azuresynapse.net

Feel free to rename one of the variables to azure_synapse_studio accordingly.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @krowlandson,
Sorry, I just saw that you tagged me in this comment. privatelink.database.windows.net is not relevant for Synapse. This is only relevant for Azure SQL Servers.

Synapse only requires:

  1. For SQL endpoints: privatelink.sql.azuresynapse.net
  2. For dev endpoints: privatelink.dev.azuresynapse.net
  3. For Data Explorer endpoints: privatelink.kusto.azuresynapse.net
  4. For Synapse Studio: privatelink.azuresynapse.net

Feel free to rename one of the variables to azure_synapse_studio accordingly.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool, thank you for the confirmation @marvinbuss 👍🏻

I thought it was odd that the docs were updated, as the module reflects what the docs said at the time of authoring this capability, so we definitely need to fix this then 😄

@krowlandson
Copy link
Contributor

I've done a quick review of the DNS zone diff and see the following which we should include in a release:

Private link resource type / Subresource Status
Azure Automation / (Microsoft.Automation/automationAccounts) / Webhook, DSCAndHybridWorker no changes needed
Azure SQL Database (Microsoft.Sql/servers) / sqlServer no changes needed
Azure SQL Managed Instance (Microsoft.Sql/managedInstances) needs testing to verify works with privatelink.{dnsPrefix}.database.windows.net format
Azure Synapse Analytics (Microsoft.Synapse/workspaces) / Sql no changes needed
Azure Synapse Analytics (Microsoft.Synapse/workspaces) / SqlOnDemand missing, but same zone name as Sql subresource
Azure Synapse Analytics (Microsoft.Synapse/workspaces) / Dev included in this PR
Azure Synapse Studio (Microsoft.Synapse/privateLinkHubs) / Web included in this PR
Storage account (Microsoft.Storage/storageAccounts) / Blob (blob, blob_secondary) no changes needed
Storage account (Microsoft.Storage/storageAccounts) / Table (table, table_secondary) no changes needed
Storage account (Microsoft.Storage/storageAccounts) / Queue (queue, queue_secondary) no changes needed
Storage account (Microsoft.Storage/storageAccounts) / File (file, file_secondary) no changes needed
Storage account (Microsoft.Storage/storageAccounts) / Web (web, web_secondary) no changes needed
Azure Data Lake File System Gen2 (Microsoft.Storage/storageAccounts) / Data Lake File System Gen2 (dfs, dfs_secondary) no changes needed
Azure Cosmos DB (Microsoft.AzureCosmosDB/databaseAccounts) / Sql no changes needed
Azure Cosmos DB (Microsoft.AzureCosmosDB/databaseAccounts) / MongoDB no changes needed
Azure Cosmos DB (Microsoft.AzureCosmosDB/databaseAccounts) / Cassandra no changes needed
Azure Cosmos DB (Microsoft.AzureCosmosDB/databaseAccounts) / Gremlin no changes needed
Azure Cosmos DB (Microsoft.AzureCosmosDB/databaseAccounts) / Table no changes needed
Azure Batch (Microsoft.Batch/batchAccounts) / batchAccount missing
Azure Batch (Microsoft.Batch/batchAccounts) / nodeManagement missing
Azure Database for PostgreSQL - Single server (Microsoft.DBforPostgreSQL/servers) / postgresqlServer no changes needed
Azure Database for MySQL (Microsoft.DBforMySQL/servers) / mysqlServer no changes needed
Azure Database for MariaDB (Microsoft.DBforMariaDB/servers) / mariadbServer no changes needed
Azure Key Vault (Microsoft.KeyVault/vaults) / vault no changes needed
Azure Key Vault (Microsoft.KeyVault/managedHSMs) / Managed HSMs missing
Azure Kubernetes Service - Kubernetes API (Microsoft.ContainerService/managedClusters) / management need to validate region format is correct and check requirements for {subzone}.privatelink.{region}.azmk8s.io zone
Azure Search (Microsoft.Search/searchServices) / searchService no changes needed
Azure Container Registry (Microsoft.ContainerRegistry/registries) / registry need to test whether regional zones work as expected for {region}.privatelink.azurecr.io
Azure App Configuration (Microsoft.AppConfiguration/configurationStores) / configurationStores no changes needed
Azure Backup (Microsoft.RecoveryServices/vaults) / AzureBackup no changes needed
Azure Site Recovery (Microsoft.RecoveryServices/vaults) / AzureSiteRecovery need to check as zone is now documented as being regional, i.e. privatelink.{region}.siterecovery.windowsazure.com
Azure Event Hubs (Microsoft.EventHub/namespaces) / namespace no changes needed
Azure Service Bus (Microsoft.ServiceBus/namespaces) / namespace no changes needed
Azure IoT Hub (Microsoft.Devices/IotHubs) / iotHub no changes needed
Azure Relay (Microsoft.Relay/namespaces) / namespace no changes needed
Azure Event Grid (Microsoft.EventGrid/topics) / topic no changes needed
Azure Event Grid (Microsoft.EventGrid/domains) / domain no changes needed
Azure Web Apps (Microsoft.Web/sites) / sites no changes needed
Azure Machine Learning (Microsoft.MachineLearningServices/workspaces) / amlworkspace no changes needed
SignalR (Microsoft.SignalRService/SignalR) / signalR no changes needed
Azure Monitor (Microsoft.Insights/privateLinkScopes) / azuremonitor missing privatelink.blob.core.windows.net zone
Cognitive Services (Microsoft.CognitiveServices/accounts) / account no changes needed
Azure File Sync (Microsoft.StorageSync/storageSyncServices) / afs need to check as zone is now documented as being regional, i.e. privatelink.{region}.afs.azure.net
Azure Data Factory (Microsoft.DataFactory/factories) / dataFactory no changes needed
Azure Data Factory (Microsoft.DataFactory/factories) / portal no changes needed
Azure Cache for Redis (Microsoft.Cache/Redis) / redisCache no changes needed
Azure Cache for Redis Enterprise (Microsoft.Cache/RedisEnterprise) / redisEnterprise missing
Microsoft Purview (Microsoft.Purview) / account included in this PR
Microsoft Purview (Microsoft.Purview) / portal included in this PR
Azure Digital Twins (Microsoft.DigitalTwins) / digitalTwinsInstances missing
Azure HDInsight (Microsoft.HDInsight) missing
Azure Arc (Microsoft.HybridCompute) / hybridcompute missing
Azure Media Services (Microsoft.Media) / keydelivery, liveevent, streamingendpoint missing
Azure Data Explorer (Microsoft.Kusto) missing
Azure Static Web Apps (Microsoft.Web/staticSites) / staticSites missing
Azure Migrate (Microsoft.Migrate) / migrate projects, assessment project and discovery site missing
Azure Managed HSM (Microsoft.Keyvault/managedHSMs) / managedhsm missing
Azure API Management (Microsoft.ApiManagement/service) / gateway missing
Microsoft PowerBI (Microsoft.PowerBI/privateLinkServicesForPowerBI) missing
Azure Bot Service (Microsoft.BotService/botServices) / Bot missing
Azure Bot Service (Microsoft.BotService/botServices) / Token missing

@bentaylorwork
Copy link
Contributor Author

I can take a look at adding some of the missing Private DNS Zones early next week.

Do you want me to add them to this PR or open a new one?

@krowlandson
Copy link
Contributor

I can take a look at adding some of the missing Private DNS Zones early next week.

Do you want me to add them to this PR or open a new one?

That's great, thank you. I think it would be good to include in a single PR so we know what they are all covered off when merging to main and cutting our next release.

Something else that will need updating is the test framework settings here:

enable_private_link_by_service = {
azure_automation_webhook = false
azure_automation_dscandhybridworker = false
azure_sql_database_sqlserver = false
azure_synapse_analytics_sqlserver = false
azure_synapse_analytics_sql = false
storage_account_blob = true
storage_account_table = true
storage_account_queue = true
storage_account_file = true
storage_account_web = true
azure_data_lake_file_system_gen2 = false
azure_cosmos_db_sql = false
azure_cosmos_db_mongodb = false
azure_cosmos_db_cassandra = false
azure_cosmos_db_gremlin = false
azure_cosmos_db_table = false
azure_database_for_postgresql_server = false
azure_database_for_mysql_server = false
azure_database_for_mariadb_server = false
azure_key_vault = false
azure_kubernetes_service_management = false
azure_search_service = false
azure_container_registry = false
azure_app_configuration_stores = false
azure_backup = true
azure_site_recovery = true
azure_event_hubs_namespace = false
azure_service_bus_namespace = false
azure_iot_hub = false
azure_relay_namespace = false
azure_event_grid_topic = false
azure_event_grid_domain = false
azure_web_apps_sites = false
azure_machine_learning_workspace = false
signalr = false
azure_monitor = false
cognitive_services_account = false
azure_file_sync = false
azure_data_factory = false
azure_data_factory_portal = false
azure_cache_for_redis = false
}

🪨

@bentaylorwork
Copy link
Contributor Author

I have dealt with all the private link dns zones apart from the ones in bold below. I will try and get to them in the next few days.

Private link resource type / Subresource Status
Azure Automation / (Microsoft.Automation/automationAccounts) / Webhook, DSCAndHybridWorker no changes needed
Azure SQL Database (Microsoft.Sql/servers) / sqlServer no changes needed
Azure SQL Managed Instance (Microsoft.Sql/managedInstances) needs testing to verify works with privatelink.{dnsPrefix}.database.windows.net format
Azure Synapse Analytics (Microsoft.Synapse/workspaces) / Sql no changes needed
Azure Synapse Analytics (Microsoft.Synapse/workspaces) / SqlOnDemand missing, but same zone name as Sql subresource
Azure Synapse Analytics (Microsoft.Synapse/workspaces) / Dev included in this PR
Azure Synapse Studio (Microsoft.Synapse/privateLinkHubs) / Web included in this PR
Storage account (Microsoft.Storage/storageAccounts) / Blob (blob, blob_secondary) no changes needed
Storage account (Microsoft.Storage/storageAccounts) / Table (table, table_secondary) no changes needed
Storage account (Microsoft.Storage/storageAccounts) / Queue (queue, queue_secondary) no changes needed
Storage account (Microsoft.Storage/storageAccounts) / File (file, file_secondary) no changes needed
Storage account (Microsoft.Storage/storageAccounts) / Web (web, web_secondary) no changes needed
Azure Data Lake File System Gen2 (Microsoft.Storage/storageAccounts) / Data Lake File System Gen2 (dfs, dfs_secondary) no changes needed
Azure Cosmos DB (Microsoft.AzureCosmosDB/databaseAccounts) / Sql no changes needed
Azure Cosmos DB (Microsoft.AzureCosmosDB/databaseAccounts) / MongoDB no changes needed
Azure Cosmos DB (Microsoft.AzureCosmosDB/databaseAccounts) / Cassandra no changes needed
Azure Cosmos DB (Microsoft.AzureCosmosDB/databaseAccounts) / Gremlin no changes needed
Azure Cosmos DB (Microsoft.AzureCosmosDB/databaseAccounts) / Table no changes needed
Azure Batch (Microsoft.Batch/batchAccounts) / batchAccount included in this PR
Azure Batch (Microsoft.Batch/batchAccounts) / nodeManagement included in this PR
Azure Database for PostgreSQL - Single server (Microsoft.DBforPostgreSQL/servers) / postgresqlServer no changes needed
Azure Database for MySQL (Microsoft.DBforMySQL/servers) / mysqlServer no changes needed
Azure Database for MariaDB (Microsoft.DBforMariaDB/servers) / mariadbServer no changes needed
Azure Key Vault (Microsoft.KeyVault/vaults) / vault no changes needed
Azure Key Vault (Microsoft.KeyVault/managedHSMs) / Managed HSMs included in this PR
Azure Kubernetes Service - Kubernetes API (Microsoft.ContainerService/managedClusters) / management need to validate region format is correct and check requirements for {subzone}.privatelink.{region}.azmk8s.io zone
Azure Search (Microsoft.Search/searchServices) / searchService no changes needed
Azure Container Registry (Microsoft.ContainerRegistry/registries) / registry need to test whether regional zones work as expected for {region}.privatelink.azurecr.io
Azure App Configuration (Microsoft.AppConfiguration/configurationStores) / configurationStores no changes needed
Azure Backup (Microsoft.RecoveryServices/vaults) / AzureBackup no changes needed
Azure Site Recovery (Microsoft.RecoveryServices/vaults) / AzureSiteRecovery need to check as zone is now documented as being regional, i.e. privatelink.{region}.siterecovery.windowsazure.com
Azure Event Hubs (Microsoft.EventHub/namespaces) / namespace no changes needed
Azure Service Bus (Microsoft.ServiceBus/namespaces) / namespace no changes needed
Azure IoT Hub (Microsoft.Devices/IotHubs) / iotHub no changes needed
Azure Relay (Microsoft.Relay/namespaces) / namespace no changes needed
Azure Event Grid (Microsoft.EventGrid/topics) / topic no changes needed
Azure Event Grid (Microsoft.EventGrid/domains) / domain no changes needed
Azure Web Apps (Microsoft.Web/sites) / sites no changes needed
Azure Machine Learning (Microsoft.MachineLearningServices/workspaces) / amlworkspace no changes needed
SignalR (Microsoft.SignalRService/SignalR) / signalR no changes needed
Azure Monitor (Microsoft.Insights/privateLinkScopes) / azuremonitor **Looks like this is all ready included under the var storage_account_blob **
Cognitive Services (Microsoft.CognitiveServices/accounts) / account no changes needed
Azure File Sync (Microsoft.StorageSync/storageSyncServices) / afs need to check as zone is now documented as being regional, i.e. privatelink.{region}.afs.azure.net
Azure Data Factory (Microsoft.DataFactory/factories) / dataFactory no changes needed
Azure Data Factory (Microsoft.DataFactory/factories) / portal no changes needed
Azure Cache for Redis (Microsoft.Cache/Redis) / redisCache no changes needed
Azure Cache for Redis Enterprise (Microsoft.Cache/RedisEnterprise) / redisEnterprise included in this PR
Microsoft Purview (Microsoft.Purview) / account included in this PR
Microsoft Purview (Microsoft.Purview) / portal included in this PR
Azure Digital Twins (Microsoft.DigitalTwins) / digitalTwinsInstances included in this PR
Azure HDInsight (Microsoft.HDInsight) included in this PR
Azure Arc (Microsoft.HybridCompute) / hybridcompute included in this PR
Azure Media Services (Microsoft.Media) / keydelivery, liveevent, streamingendpoint included in this PR
Azure Data Explorer (Microsoft.Kusto) included in this PR
Azure Static Web Apps (Microsoft.Web/staticSites) / staticSites missing - https://github.com/MicrosoftDocs/azure-docs/issues/93952 - might be best to get the user to provide a list of partition ids then when a full list is available it can be added in and merged with the user provided list - thoughts?
Azure Migrate (Microsoft.Migrate) / migrate projects, assessment project and discovery site included in this PR
Azure Managed HSM (Microsoft.Keyvault/managedHSMs) / managedhsm included in this PR
Azure API Management (Microsoft.ApiManagement/service) / gateway included in this PR
Microsoft PowerBI (Microsoft.PowerBI/privateLinkServicesForPowerBI) included in this PR
Azure Bot Service (Microsoft.BotService/botServices) / Bot included in this PR
Azure Bot Service (Microsoft.BotService/botServices) / Token included in this PR

@bentaylorwork bentaylorwork changed the title Added Purview + Synapse private link DNS zones Missing private link DNS zones Oct 13, 2022
@krowlandson
Copy link
Contributor

I have dealt with all the private link dns zones apart from the ones in bold below. I will try and get to them in the next few days.

This is awesome stuff... thank you @bentaylorwork !!

I will try to make some time tomorrow to provide feedback on current progress as a couple of minor things I would like to change for consistency, but also to clarify some of the thinking around where services share an underlying namespace 👍🏻

@krowlandson
Copy link
Contributor

/azp run update

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@krowlandson
Copy link
Contributor

@bentaylorwork ... I've made some updates so we can keep this progressing, however I need to validate why this is happening on our Update task:

image

I believe it's due to your PR coming from the main branch in your fork.

Working locally, I observed the same permissions error when trying to push to just HEAD. To resolve this I had to push to HEAD:main on your fork so I may be able to fix this with an update to our push logic. Please bear with me while I look into this!

@krowlandson
Copy link
Contributor

/azp run update

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@krowlandson
Copy link
Contributor

@bentaylorwork... just to provide a quick summary of the updates I've made to this PR:

  • Renamed/split a few of the services for consistency with our existing pattern
  • Re-ordered to alphabetical for easier future maintenance (it was either that, or match the order from the table in the reference MS docs page)
  • Added some more context to the Wiki page for DNS settings as this needed completing anyway. This included adding a couple of notes for the DNS zones which require user input for {dnsPrefix} and {partitionId} so these are covered for now.
  • Updated all of the test suite to use the new minimum supported provider version
  • Updated the git push logic to provide support for PRs coming from the main branch of a fork

Super excited for this contribution, and thank you again for your help!

I'll hold off completing my review and merging to give you a day or two to see if there's anything else you would like to add / change / suggest 👍🏻

@krowlandson
Copy link
Contributor

/azp run unit

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@krowlandson
Copy link
Contributor

/azp run update

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@krowlandson
Copy link
Contributor

/azp run unit

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

Copy link
Contributor

@krowlandson krowlandson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Although we have a few further DNS related updates we want to implement, I think this is a great start and gets us past a significant milestone in this work.

Thank you for your contribution @bentaylorwork 💯

LGTM 🚀

@krowlandson krowlandson merged commit 86712dd into Azure:main Oct 26, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants