Plantilla de ARM para el soporte de firewall de la cuenta de almacenamiento del área de trabajo

En esta página se proporciona la plantilla de ARM y una descripción de los campos necesarios para la compatibilidad del firewall con la cuenta de almacenamiento del área de trabajo. El soporte del firewall para la cuenta de almacenamiento de su área de trabajo está controlado por la propiedad de la plantilla ARM storageAccountFirewall, que debe establecerse en Enabled.

Para determinadas configuraciones de área de trabajo, como habilitar el perfil de seguridad de cumplimiento, es posible que tenga que personalizar la plantilla de ARM. Si tiene alguna pregunta sobre la plantilla de ARM, envíe un ticket de soporte de Azure. También puede usar Terraform para administrar las configuraciones del área de trabajo. Vea el proveedor azurerm_databricks_workspace de Terraform, con la propiedad compliance_security_profile_enabled incluida.

Campos de la plantilla de ARM

En esta tabla se enumeran los campos y sus descripciones para la siguiente plantilla de ARM para la compatibilidad del firewall con la cuenta de almacenamiento del área de trabajo.

Campo Descripción
Suscripción Suscripción de Azure para usar.
Grupo de recursos Grupo de recursos que se va a usar. Normalmente, este es el grupo de recursos de la red virtual.
Nombre del área de trabajo Nombre del área de trabajo. Si usa un área de trabajo existente, debe coincidir exactamente con el nombre del área de trabajo existente.
Nombre del grupo de recursos administrados Grupo de recursos administrado para el área de trabajo. Se rellena automáticamente en el formulario con un nombre predeterminado. Cámbielo si su organización quiere personalizar el nombre del grupo de recursos administrado.
Nombre de cuenta de almacenamiento La cuenta de almacenamiento del espacio de trabajo de Azure en tu grupo de recursos administrado. Se rellena automáticamente en el formulario con un nombre predeterminado. Cámbielo si su organización quiere personalizar el nombre del grupo de recursos administrado.
Identificador de la Red Virtual VNet del Área de Trabajo Identificador de recurso para tu VNet. Para un área de trabajo existente, puede acceder a esta información navegando hasta el área de trabajo en el portal de Azure. Haga clic en Propiedades. En Identificador de red virtual personalizada, haga clic en Ver valor como JSON. Copie el identificador de recurso en el campo value.
Nombre de subred privada personalizada Subred privada de la red virtual. Para un área de trabajo existente, puede acceder a esta información navegando hasta el área de trabajo en el portal de Azure. Haga clic en Propiedades. En subred privada personalizada, haga clic en Ver valor como JSON. Copie el nombre de la subred en el campo value.
Nombre de la subred pública personalizada Subred pública de la red virtual. Para un área de trabajo existente, puede acceder a esta información navegando hasta el área de trabajo en el portal de Azure. Haga clic en Propiedades. En subred pública personalizada, haga clic en Ver valor como JSON. Copie el nombre de la subred en el campo value.
Ubicación Nombre corto de la región de Azure que rellena automáticamente para que coincida con el campo principal Region.
Nombre del conector de acceso En el caso de las implementaciones típicas, no modifique este campo. Azure Databricks crea un nuevo conector de Access.
Tipo de identidad administrada En el caso de las implementaciones típicas, no modifique este campo.
ID del recurso de identidad administrada por el usuario En el caso de las implementaciones típicas, no modifique este campo.
Firewall de la cuenta de almacenamiento Especifica si se debe habilitar la compatibilidad con el firewall para la cuenta de almacenamiento del área de trabajo.
Deshabilitación de la dirección IP pública Debe establecerse en true. Esto permite la conectividad segura de clústeres, que es necesaria para la compatibilidad del firewall con la cuenta de almacenamiento del área de trabajo.
Acceso a una red pública Normalmente, se establece en Habilitado. Si habilita Private Link, consulte los conceptos de Azure Private Link para ver qué configuración usar.
Reglas NSG obligatorias Normalmente, se establece en Todas las reglas. Si habilita Private Link, consulte los conceptos de Azure Private Link para ver qué configuración usar.
Claves administradas por el cliente habilitadas Establezca este valor en true si usa claves administradas por el cliente para servicios administrados o discos administrados. Consulte Claves administradas por el cliente para procesos de cifrado.
Tipo de claves administradas por el cliente Si las claves administradas por el cliente están habilitadas, seleccione los tipos para este área de trabajo. Elija Servicios administrados, Discos administrados o Ambos.
Managed Srvc Key Vault Id. de clave Si usa claves administradas por el cliente para servicios administrados, especifique el identificador de la clave del almacén de claves.
Id de clave de Key Vault de disco administrado Si usa claves administradas por el cliente para discos administrados, especifique el identificador de la clave del almacén de claves.
Rotación automática de discos administrados Si usa claves administradas por el cliente para discos administrados, especifique si desea seleccionar automáticamente nuevas versiones de la clave.

Plantilla de ARM para la compatibilidad del firewall con la cuenta de almacenamiento de su espacio de trabajo

Copie la siguiente plantilla de ARM para habilitar o deshabilitar la compatibilidad con el firewall para la cuenta de almacenamiento del área de trabajo.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "workspaceName": {
      "type": "String",
      "metadata": {
        "description": "The name of the Azure Databricks workspace to update."
      }
    },
    "location": {
      "defaultValue": "[resourceGroup().location]",
      "type": "String",
      "metadata": {
        "description": "Location for all resources."
      }
    },
    "managedResourceGroupName": {
      "defaultValue": "[format('databricks-rg-{0}-{1}', parameters('workspaceName'), uniqueString(parameters('workspaceName'), resourceGroup().id))]",
      "type": "String",
      "metadata": {
        "description": "The Managed Resource GroupName of the workspace. Do not change unless using a custom managed resource group name."
      }
    },
    "storageAccountName": {
      "defaultValue": "[concat('dbstorage', uniqueString(resourceGroup().id, subscription().id))]",
      "type": "String",
      "metadata": {
        "description": "Workspace storage account name. Do not change unless using a custom storage account name."
      }
    },
    "workspaceVnetResourceId": {
      "defaultValue": "Required Resource ID of the workspace VNet",
      "type": "String",
      "metadata": {
        "description": "The Resource ID of the injected VNet for the workspace"
      }
    },
    "workspacePrivateSubnetName": {
      "defaultValue": "private-subnet",
      "type": "String",
      "metadata": {
        "description": "The private subnet name for the workspace"
      }
    },
    "workspacePublicSubnetName": {
      "defaultValue": "public-subnet",
      "type": "String",
      "metadata": {
        "description": "The public subnet name for the workspace"
      }
    },
    "accessConnectorName": {
      "defaultValue": "[format('{0}-access-connector', parameters('workspaceName'))]",
      "type": "String",
      "metadata": {
        "description": "The access connector to create for the workspace"
      }
    },
    "ManagedIdentityType": {
      "defaultValue": "SystemAssigned",
      "allowedValues": ["SystemAssigned", "UserAssigned", "SystemAssigned,UserAssigned"],
      "type": "String",
      "metadata": {
        "description": "Access Connector Managed Identity Type"
      }
    },
    "userManagedIdentityResourceId": {
      "defaultValue": "Required For User Mananged Identity",
      "type": "String",
      "metadata": {
        "description": "The Resource Id of the User Managed Identity"
      }
    },
    "storageAccountFirewall": {
      "defaultValue": "Enabled",
      "allowedValues": ["Enabled", "Disabled"],
      "type": "String",
      "metadata": {
        "description": "Enable or Disable firewall support for workspace default storage feature"
      }
    },
    "disablePublicIp": {
      "defaultValue": true,
      "type": "Bool",
      "metadata": {
        "description": "Specifies whether to deploy Azure Databricks workspace with secure cluster connectivity (SCC) enabled or not (No Public IP)."
      }
    },
    "publicNetworkAccess": {
      "defaultValue": "Enabled",
      "allowedValues": ["Enabled", "Disabled"],
      "type": "String",
      "metadata": {
        "description": "Indicates whether public network access is allowed to the workspace with private endpoint - possible values are Enabled or Disabled."
      }
    },
    "requiredNsgRules": {
      "defaultValue": "AllRules",
      "allowedValues": ["AllRules", "NoAzureDatabricksRules"],
      "type": "String",
      "metadata": {
        "description": "Indicates whether to retain or remove the AzureDatabricks outbound NSG rule - possible values are AllRules, NoAzureDatabricksRules (private link)."
      }
    },
    "storageDoubleEncryption": {
      "defaultValue": false,
      "type": "Bool",
      "metadata": {
        "description": "Is double encryption for managed storage enabled ?"
      }
    },
    "customerManagedKeysEnabled": {
      "defaultValue": false,
      "type": "Bool",
      "metadata": {
        "description": "Is CMK for managed services enabled ?"
      }
    },
    "CustomerManagedKeyType": {
      "defaultValue": "ManagedServicesCMK",
      "allowedValues": ["ManagedServicesCMK", "ManagedDisksCMK", "BothCMK"],
      "type": "String",
      "metadata": {
        "description": "Selects the CMK types for this workspace, Managed Services and/or Disks, Workspace storage account is not enabled here"
      }
    },

    "ManagedSrvcKeyVaultKeyId": {
      "defaultValue": "https://kv-url/keys/keyname/version",
      "type": "String",
      "metadata": {
        "description": "The Key Vault Key ID"
      }
    },
    "ManagedDiskKeyVaultKeyId": {
      "defaultValue": "https://kv-url/keys/keyname/version",
      "type": "String",
      "metadata": {
        "description": "The Key Vault Key ID"
      }
    },
    "ManagedDiskAutoRotation": {
      "type": "bool",
      "defaultValue": false,
      "allowedValues": [true, false],
      "metadata": {
        "description": "Whether managed disk will pick up new key version automatically."
      }
    }
  },
  "variables": {
    "ApiVersion": "2024-05-01",
    "workspaceSku": "premium",
    "systemAssignedObject": {
      "type": "[parameters('ManagedIdentityType')]"
    },
    "userAssignedObject": {
      "type": "[parameters('ManagedIdentityType')]",
      "userAssignedIdentities": {
        "[parameters('userManagedIdentityResourceId')]": {}
      }
    },
    "ConnectorSystemAssigned": {
      "id": "[resourceId('Microsoft.Databricks/accessConnectors', parameters('accessConnectorName'))]",
      "identityType": "[parameters('ManagedIdentityType')]"
    },
    "connectorUserAssigned": {
      "id": "[resourceId('Microsoft.Databricks/accessConnectors', parameters('accessConnectorName'))]",
      "identityType": "[parameters('ManagedIdentityType')]",
      "userAssignedIdentityId": "[parameters('userManagedIdentityResourceId')]"
    },
    "managedSrvcFirst": "[split(parameters('ManagedSrvcKeyVaultKeyId'),'/keys/')]",
    "managedSrvcSecond": "[split(variables('managedSrvcFirst')[1],'/')]",
    "managedDiskFirst": "[split(parameters('ManagedDiskKeyVaultKeyId'),'/keys/')]",
    "managedDiskSecond": "[split(variables('managedDiskFirst')[1],'/')]",
    "ManagedServicesCMK": {
      "managedServices": {
        "keySource": "Microsoft.Keyvault",
        "keyVaultProperties": {
          "keyVaultUri": "[variables('managedSrvcFirst')[0]]",
          "keyName": "[variables('managedSrvcSecond')[0]]",
          "keyVersion": "[variables('managedSrvcSecond')[1]]"
        }
      }
    },
    "ManagedDisksCMK": {
      "managedDisk": {
        "keySource": "Microsoft.Keyvault",
        "keyVaultProperties": {
          "keyVaultUri": "[variables('managedDiskFirst')[0]]",
          "keyName": "[variables('managedDiskSecond')[0]]",
          "keyVersion": "[variables('managedDiskSecond')[1]]"
        },
        "rotationToLatestKeyVersionEnabled": "[parameters('ManagedDiskAutoRotation')]"
      }
    },
    "BothCMK": {
      "managedServices": {
        "keySource": "Microsoft.Keyvault",
        "keyVaultProperties": {
          "keyVaultUri": "[variables('managedSrvcFirst')[0]]",
          "keyName": "[variables('managedSrvcSecond')[0]]",
          "keyVersion": "[variables('managedSrvcSecond')[1]]"
        }
      },
      "managedDisk": {
        "keySource": "Microsoft.Keyvault",
        "keyVaultProperties": {
          "keyVaultUri": "[variables('managedDiskFirst')[0]]",
          "keyName": "[variables('managedDiskSecond')[0]]",
          "keyVersion": "[variables('managedDiskSecond')[1]]"
        },
        "rotationToLatestKeyVersionEnabled": "[parameters('ManagedDiskAutoRotation')]"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Databricks/accessConnectors",
      "apiVersion": "2023-05-01",
      "name": "[parameters('accessConnectorName')]",
      "location": "[parameters('location')]",
      "identity": "[if(equals(parameters('ManagedIdentityType'),'SystemAssigned'),variables('systemAssignedObject'),variables('userAssignedObject'))]",
      "properties": {}
    },
    {
      "type": "Microsoft.Databricks/workspaces",
      "apiVersion": "[variables('ApiVersion')]",
      "name": "[parameters('workspaceName')]",
      "location": "[parameters('location')]",
      "dependsOn": ["[resourceId('Microsoft.Databricks/accessConnectors', parameters('accessConnectorName'))]"],
      "sku": {
        "name": "[variables('workspaceSku')]"
      },
      "properties": {
        "managedResourceGroupId": "[subscriptionResourceId('Microsoft.Resources/resourceGroups', parameters('managedResourceGroupName'))]",
        "publicNetworkAccess": "[parameters('publicNetworkAccess')]",
        "requiredNsgRules": "[parameters('requiredNsgRules')]",
        "accessConnector": "[if(equals(parameters('ManagedIdentityType'),'SystemAssigned'),variables('ConnectorSystemAssigned'),variables('connectorUserAssigned'))]",
        "defaultStorageFirewall": "[parameters('storageAccountFirewall')]",
        "parameters": {
          "customVirtualNetworkId": {
            "value": "[parameters('workspaceVnetResourceId')]"
          },
          "customPrivateSubnetName": {
            "value": "[parameters('workspacePrivateSubnetName')]"
          },
          "customPublicSubnetName": {
            "value": "[parameters('workspacePublicSubnetName')]"
          },
          "enableNoPublicIp": {
            "value": "[parameters('disablePublicIp')]"
          },
          "storageAccountName": {
            "value": "[parameters('storageAccountName')]"
          },
          "requireInfrastructureEncryption": {
            "value": "[parameters('storageDoubleEncryption')]"
          }
        }
      },
      "condition": "[not(parameters('customerManagedKeysEnabled'))]"
    },
    {
      "type": "Microsoft.Databricks/workspaces",
      "apiVersion": "[variables('ApiVersion')]",
      "name": "[parameters('workspaceName')]",
      "location": "[parameters('location')]",
      "dependsOn": ["[resourceId('Microsoft.Databricks/accessConnectors', parameters('accessConnectorName'))]"],
      "sku": {
        "name": "[variables('workspaceSku')]"
      },
      "properties": {
        "managedResourceGroupId": "[subscriptionResourceId('Microsoft.Resources/resourceGroups', parameters('managedResourceGroupName'))]",
        "publicNetworkAccess": "[parameters('publicNetworkAccess')]",
        "requiredNsgRules": "[parameters('requiredNsgRules')]",
        "accessConnector": "[if(equals(parameters('ManagedIdentityType'),'SystemAssigned'),variables('ConnectorSystemAssigned'),variables('connectorUserAssigned'))]",
        "encryption": {
          "entities": "[variables(parameters('CustomerManagedKeyType'))]"
        },
        "defaultStorageFirewall": "[parameters('storageAccountFirewall')]",
        "parameters": {
          "customVirtualNetworkId": {
            "value": "[parameters('workspaceVnetResourceId')]"
          },
          "customPrivateSubnetName": {
            "value": "[parameters('workspacePrivateSubnetName')]"
          },
          "customPublicSubnetName": {
            "value": "[parameters('workspacePublicSubnetName')]"
          },
          "enableNoPublicIp": {
            "value": "[parameters('disablePublicIp')]"
          },
          "storageAccountName": {
            "value": "[parameters('storageAccountName')]"
          },
          "requireInfrastructureEncryption": {
            "value": "[parameters('storageDoubleEncryption')]"
          }
        }
      },
      "condition": "[parameters('customerManagedKeysEnabled')]"
    }
  ]
}