Uso de identidad administrada para autenticar su trabajo de Azure Stream Analytics en Azure Blob Storage

Autenticación de identidad administrada para la salida a Azure Blob Storage proporciona a los trabajos de Stream Analytics acceso directo a una cuenta de almacenamiento en lugar de tener que usar una cadena de conexión. Además de mejorar la seguridad, esta característica también le permite escribir datos en una cuenta de almacenamiento de una red virtual (VNET) en Azure.

En este artículo se muestra cómo habilitar la identidad administrada para las salidas del blob de un trabajo de Stream Analytics a través de Azure Portal y a través de una implementación de Azure Resource Manager.

Creación de un trabajo de Stream Analytics mediante Azure Portal

En primer lugar, debe crear una identidad administrada para el trabajo de Azure Stream Analytics. 

  1. En Azure Portal, abra el trabajo de Azure Stream Analytics. 

  2. En el menú de navegación izquierdo, seleccione Identidad administrada en Configurar. A continuación, active la casilla situada junto a Usar la identidad administrada asignada por el sistema y seleccione Guardar.

    System assigned managed identity

  3. Se crea una entidad de servicio para la identidad del trabajo de Stream Analytics en Microsoft Entra ID. El ciclo de vida de la identidad recién creada lo administrará Azure. Cuando se elimina el trabajo de Stream Analytics, Azure elimina automáticamente la identidad asociada (es decir, la entidad de servicio). 

    Cuando se guarda la configuración, el id. de objeto (OID) de la entidad de servicio aparece como id. de entidad de seguridad, tal como se muestra a continuación:

    Principal ID

    La entidad de servicio se llama igual que el trabajo de Stream Analytics. Por ejemplo, si el nombre del trabajo es MyASAJob, el nombre de la entidad de servicio también será MyASAJob. 

Implementación de Azure Resource Manager

El uso de Azure Resource Manager permite automatizar completamente la implementación de su trabajo de Stream Analytics. Puede implementar las plantillas de Resource Manager mediante Azure PowerShell o la CLI de Azure. Los ejemplos siguientes usan la CLI de Azure.

  1. Para crear un recurso Microsoft.StreamAnalytics/streamingjobs con una identidad administrada, puede incluir la siguiente propiedad en la sección de recursos de la plantilla de Resource Manager:

    "Identity": {
      "Type": "SystemAssigned",
    },
    

    Esta propiedad indica a Azure Resource Manager que cree y administre la identidad del trabajo de Stream Analytics. A continuación, se muestra un ejemplo de una plantilla de Resource Manager que implementa un trabajo de Stream Analytics con la identidad administrada habilitada y un receptor de salida de blob que usa la identidad administrada:

    {
        "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "resources": [
            {
                "apiVersion": "2017-04-01-preview",
                "name": "MyStreamingJob",
                "location": "[resourceGroup().location]",
                "type": "Microsoft.StreamAnalytics/StreamingJobs",
                "identity": {
                    "type": "systemAssigned"
                },
                "properties": {
                    "sku": {
                        "name": "standard"
                    },
                    "outputs":[
                        {
                            "name":"output",
                            "properties":{
                                "serialization": {
                                    "type": "JSON",
                                    "properties": {
                                        "encoding": "UTF8"
                                    }
                                },
                                "datasource":{
                                    "type":"Microsoft.Storage/Blob",
                                    "properties":{
                                        "storageAccounts": [
                                            { "accountName": "MyStorageAccount" }
                                        ],
                                        "container": "test",
                                        "pathPattern": "segment1/{date}/segment2/{time}",
                                        "dateFormat": "yyyy/MM/dd",
                                        "timeFormat": "HH",
                                        "authenticationMode": "Msi"
                                    }
                                }
                            }
                        }
                    ]
                }
            }
        ]
    }
    

    El trabajo anterior se puede implementar en el grupo de recursos ExampleGroup mediante el siguiente comando de la CLI de Azure:

    az deployment group create --resource-group ExampleGroup -template-file StreamingJob.json
    
  2. Una vez creado el trabajo, puede usar Azure Resource Manager para recuperar la definición completa del trabajo.

    az resource show --ids /subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{RESOURCE_GROUP}/providers/Microsoft.StreamAnalytics/StreamingJobs/{RESOURCE_NAME}
    

    El comando anterior devolverá una respuesta como la siguiente:

    {
        "id": "/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{RESOURCE_GROUP}/providers/Microsoft.StreamAnalytics/streamingjobs/{RESOURCE_NAME}",
        "identity": {
            "principalId": "{PRINCIPAL_ID}",
            "tenantId": "{TENANT_ID}",
            "type": "SystemAssigned",
            "userAssignedIdentities": null
        },
        "kind": null,
        "location": "West US",
        "managedBy": null,
        "name": "{RESOURCE_NAME}",
        "plan": null,
        "properties": {
            "compatibilityLevel": "1.0",
            "createdDate": "2019-07-12T03:11:30.39Z",
            "dataLocale": "en-US",
            "eventsLateArrivalMaxDelayInSeconds": 5,
            "jobId": "{JOB_ID}",
            "jobState": "Created",
            "jobStorageAccount": null,
            "jobType": "Cloud",
            "outputErrorPolicy": "Stop",
            "package": null,
            "provisioningState": "Succeeded",
            "sku": {
                "name": "Standard"
            }
        },
        "resourceGroup": "{RESOURCE_GROUP}",
        "sku": null,
        "tags": null,
        "type": "Microsoft.StreamAnalytics/streamingjobs"
    }
    

    Tome nota del valor de principalId de la definición del trabajo, que identifica la identidad administrada del trabajo en Microsoft Entra ID y se usará en el paso siguiente para conceder al trabajo de Stream Analytics acceso a la cuenta de almacenamiento.

  3. Ahora que se ha creado el trabajo, consulte la sección Concesión de acceso al trabajo de Stream Analytics a su cuenta de almacenamiento de este artículo.

Concesión de acceso al trabajo de Stream Analytics a su cuenta de almacenamiento

Puede elegir entre dos niveles de acceso para su trabajo de Stream Analytics:

  1. Container level access (Acceso a nivel de contenedor): esta opción proporciona al trabajo acceso a un contenedor existente específico.
  2. Account level access (Acceso a nivel de cuenta): esta opción proporciona al trabajo acceso general a la cuenta de almacenamiento, incluida la capacidad de crear nuevos contenedores.

A menos que necesite el trabajo para crear contenedores en su nombre, debe elegir la opción Container level access (Acceso a nivel de contenedor), ya que esta concederá al trabajo el nivel mínimo de acceso necesario. A continuación, se explican ambas opciones para Azure Portal y la línea de comandos.

Nota

Debido a la replicación global o la latencia de almacenamiento en caché, puede haber un retraso cuando se revocan o se conceden permisos. Los cambios deben reflejarse en un plazo de ocho minutos.

Concesión de acceso mediante Azure Portal

Acceso a nivel de contenedor

  1. Vaya al panel de configuración del contenedor dentro de la cuenta de almacenamiento.

  2. Seleccione Access Control (IAM) .

  3. Seleccione Agregar>Agregar asignación de roles para abrir la página Agregar asignación de roles.

  4. Asigne el siguiente rol. Para asignar roles, consulte Asignación de roles de Azure mediante Azure Portal.

    Configuración Valor
    Role Colaborador de datos de blobs de almacenamiento
    Asignar acceso a Usuario, grupo o entidad de servicio
    Miembros <Nombre del trabajo de Stream Analytics>

    Screenshot that shows Add role assignment page in Azure portal.

Acceso a nivel de cuenta

  1. Vaya a la cuenta de almacenamiento.

  2. Seleccione Access Control (IAM) .

  3. Seleccione Agregar>Agregar asignación de roles para abrir la página Agregar asignación de roles.

  4. Asigne el siguiente rol. Para asignar roles, consulte Asignación de roles de Azure mediante Azure Portal.

    Configuración Valor
    Role Colaborador de datos de blobs de almacenamiento
    Asignar acceso a Usuario, grupo o entidad de servicio
    Miembros <Nombre del trabajo de Stream Analytics>

    Screenshot that shows Add role assignment page in Azure portal.

Concesión de acceso mediante la línea de comandos

Acceso a nivel de contenedor

Para proporcionar acceso a un contenedor específico, ejecute el siguiente comando mediante la CLI de Azure:

az role assignment create --role "Storage Blob Data Contributor" --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourcegroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>/blobServices/default/containers/<container-name>

Acceso a nivel de cuenta

Para proporcionar acceso a la cuenta completa, ejecute el siguiente comando mediante la CLI de Azure:

az role assignment create --role "Storage Blob Data Contributor" --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourcegroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>

Creación de una entrada o salida de blob

Ahora que la identidad administrada está configurada, está listo para agregar el recurso de blob como entrada o salida a su trabajo de Stream Analytics.

  1. En la ventana de propiedades de salida del receptor de salida de Azure Blob Storage, seleccione la lista desplegable Modo de autenticación y elija Identidad administrada. Para obtener información sobre las demás propiedades de salida, vea Información sobre las salidas desde Azure Stream Analytics. Cuando haya terminado, haga clic en Guardar.

    Configure Azure Blob storage output

Habilitación del acceso a la red virtual

Al configurar el panel Firewalls y redes virtuales de la cuenta de almacenamiento, si quiere, puede permitir el tráfico de red desde otros servicios de Microsoft de confianza. Cuando Stream Analytics se autentica mediante la identidad administrada, proporciona una prueba de que la solicitud se origina en un servicio de confianza. A continuación, le proporcionamos instrucciones para habilitar esta excepción de acceso a la red virtual.

  1. Navegue hasta el panel "Firewalls y redes virtuales" dentro del panel de configuración de la cuenta de almacenamiento.
  2. Asegúrese de que la opción "Permitir que los servicios de Microsoft de confianza accedan a esta cuenta de almacenamiento" esté habilitada.
  3. Si la habilitó, haga clic en Guardar.

Enable VNET access

Eliminación de una identidad administrada

La identidad administrada creada para un trabajo de Stream Analytics se elimina solo cuando se elimina el trabajo. No hay ninguna manera de eliminar la identidad administrada sin eliminar el trabajo. Si ya no va a usar la identidad administrada, puede cambiar el método de autenticación de la salida. La identidad administrada seguirá existiendo hasta que se elimine el trabajo y se utilizará si decide usar de nuevo la autenticación de identidad administrada.

Limitaciones

A continuación, detallamos las limitaciones actuales de esta característica:

  1. Cuentas de Azure Storage clásicas.

  2. Cuentas de Azure sin Microsoft Entra ID.

  3. No se admite el acceso multiinquilino. La entidad de servicio creada para un trabajo determinado de Stream Analytics debe residir en el mismo inquilino de Microsoft Entra en el que se creó el trabajo, y no se puede usar en un recurso que resida en un inquilino de Microsoft Entra diferente.

Pasos siguientes