Configuración de las cadenas de conexión de Azure Storage

Una cadena de conexión incluye la información de autorización que requiere la aplicación para acceder a los datos de una cuenta de Azure Storage en tiempo de ejecución mediante autorización de clave compartida. Las cadenas de conexión se pueden configurar para:

  • Conectarse al emulador de almacenamiento Azurite.
  • Acceder a la cuenta de Azure Storage.
  • Acceder a recursos especificados en Azure a través de una firma de acceso compartido (SAS).

Para información sobre cómo ver las claves de acceso a la cuenta y copiar una cadena de conexión, consulte Administración de las claves de acceso de la cuenta de almacenamiento.

Importante

Para una seguridad óptima, Microsoft recomienda usar Microsoft Entra ID con identidades administradas para autorizar solicitudes contra datos de blob, cola y tabla, siempre que sea posible. La autorización con Microsoft Entra ID e identidades administradas proporciona más seguridad y facilidad de uso que la autorización con claves compartidas. Para más información sobre las identidades administradas, consulte ¿Qué son las identidades administradas para recursos de Azure? Para obtener un ejemplo de cómo habilitar y usar una identidad administrada para una aplicación .NET, consulte Autenticación de aplicaciones hospedadas en Azure para recursos de Azure con .NET.

En el caso de los recursos hospedados fuera de Azure, como las aplicaciones locales, puede usar identidades administradas a través de Azure Arc. Por ejemplo, las aplicaciones que se ejecutan en servidores habilitados para Azure Arc pueden usar identidades administradas para conectarse a los servicios de Azure. Para más información, consulte Autenticación en recursos de Azure con servidores habilitados para Azure Arc.

Para escenarios en los que se utilizan firmas de acceso compartido (SAS), Microsoft recomienda usar un SAS de delegación de usuario. Una SAS de delegación de usuarios está protegida con credenciales de Microsoft Entra en lugar de la clave de cuenta. Para obtener información sobre las firmas de acceso compartido, consulte Conceder acceso limitado a los datos con firmas de acceso compartido. Para ver un ejemplo de cómo crear y utilizar un SAS de delegación de usuario con .NET, consulte Crear un SAS de delegación de usuario para un blob con .NET.

Protección de las claves de acceso

Las claves de acceso de la cuenta de almacenamiento proporcionan acceso completo a los datos de la cuenta de almacenamiento y la capacidad de generar tokens de SAS. Siempre debe proteger las claves de acceso. Use Azure Key Vault para administrar y rotar las claves de forma segura. El acceso a la clave compartida concede a un usuario acceso completo a los datos de una cuenta de almacenamiento. El acceso a las claves compartidas debe estar cuidadosamente limitado y supervisado. Use tokens de SAS de delegación de usuario con alcance limitado de acceso en escenarios donde la autorización basada en Microsoft Entra ID no puede ser usada. Evite codificar de forma rígida las claves de acceso o guardarlas en cualquier lugar en texto sin formato que sea accesible a otras personas. Rote las claves si cree que se pudieron haber puesto en peligro.

Importante

Para evitar que los usuarios accedan a los datos de la cuenta de almacenamiento con una clave compartida, puede impedir la autorización con clave compartida para la cuenta de almacenamiento. Se recomienda un acceso granular a los datos con privilegios mínimos necesarios como procedimiento recomendado de seguridad. La autorización basada en Microsoft Entra ID con identidades administradas se debería usar en escenarios que admitan OAuth. Kerberos o SMTP se deben usar para Azure Files a través de SMB. Para Azure Files a través de REST, se pueden usar tokens de SAS. El acceso a la clave compartida debe deshabilitarse si no es necesario para evitar su uso accidental. Para obtener más información, consulte Impedir la autorización con clave compartida para una cuenta de Azure Storage.

Para proteger una cuenta de Azure Storage con las directivas de acceso condicional de Microsoft Entra, no debe permitir la autorización de clave compartida para la cuenta de almacenamiento.

Si ha deshabilitado el acceso con claves compartidas y está viendo la autorización de clave compartida notificada en los registros de diagnóstico, esto indica que se usa el acceso de confianza para acceder al almacenamiento. Para obtener más información, vea Acceso de confianza para los recursos registrados en el inquilino de Microsoft Entra.

Almacenamiento de una cadena de conexión

La aplicación necesita acceder a la cadena de conexión en tiempo de ejecución para autorizar las solicitudes realizadas a Azure Storage. Tiene varias opciones para almacenar las claves de acceso o la cadena de conexión de su cuenta:

  • Puede almacenar las claves de la cuenta de forma segura en Azure Key Vault. Para obtener más información, consulte Acerca de las claves de cuentas de almacenamiento administradas de Azure Key Vault.
  • Puede almacenar la cadena de conexión en una variable de entorno.
  • Una aplicación puede almacenar la cadena de conexión en un archivo app.config o web.config. Agregue la cadena de conexión a la sección AppSettings en estos archivos.

Advertencia

Almacenar las claves de acceso o la cadena de conexión de su cuenta en texto no cifrado supone un riesgo de seguridad y no se recomienda. Almacene las claves de la cuenta en un formato cifrado o migre las aplicaciones para usar la autorización de Microsoft Entra para acceder a la cuenta de almacenamiento.

Configuración de una cadena de conexión para Azurite

El emulador es compatible con una sola cuenta fija y una clave de autenticación ya conocida para la autenticación de clave compartida. Esta cuenta y clave son las únicas credenciales de clave compartida que se admiten para su uso con el emulador. Son las siguientes:

Account name: devstoreaccount1
Account key: Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==

Nota:

La clave de autenticación admitida por el emulador está pensada para comprobar únicamente la funcionalidad de su código de autenticación de cliente. No responde a ningún propósito de seguridad. No puede utilizar la cuenta de almacenamiento y la clave de producción con el emulador. Se debe tener en cuenta que no se puede utilizar la cuenta de desarrollo con datos de producción.

El emulador admite solo la conexión a través de HTTP. Sin embargo, HTTPS es el protocolo recomendado para obtener acceso a recursos en una cuenta de producción de Azure Storage.

Conexión a la cuenta del emulador mediante el acceso directo

La manera más fácil de conectarse al emulador desde la aplicación consiste en configurar, dentro del archivo de configuración de la aplicación, una cadena de conexión que haga referencia al acceso directo UseDevelopmentStorage=true. El acceso directo equivale a la cadena de conexión completa para el emulador, que especifica el nombre de la cuenta, la clave de cuenta y los puntos de conexión del emulador para cada uno de los servicios de Azure Storage:

DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;
AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;
BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;
QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;
TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;

El siguiente fragmento de código de .NET muestra cómo se puede usar el acceso directo desde un método que toma una cadena de conexión. Por ejemplo, el constructor BlobContainerClient(String, String) toma una cadena de conexión.

BlobContainerClient blobContainerClient = new BlobContainerClient("UseDevelopmentStorage=true", "sample-container");
blobContainerClient.CreateIfNotExists();

Asegúrese de que el emulador se está ejecutando antes de llamar al código del fragmento.

Para obtener más información sobre Azurite, consulte Uso del emulador de Azurite para el desarrollo local de Azure Storage.

Configuración de una cadena de conexión para una cuenta de Azure Storage

Para crear una cadena de conexión para una cuenta de Azure Storage, use el siguiente formato. Indique si desea conectarse a la cuenta de almacenamiento a través de HTTPS (recomendado) o HTTP, reemplace myAccountName por el nombre de la cuenta de almacenamiento y reemplace myAccountKey por la clave de acceso a la cuenta:

DefaultEndpointsProtocol=[http|https];AccountName=myAccountName;AccountKey=myAccountKey

Por ejemplo, la cadena de conexión podría ser similar a la siguiente:

DefaultEndpointsProtocol=https;AccountName=storagesample;AccountKey=<account-key>

Aunque Azure Storage admite HTTP y HTTPS en una cadena de conexión, se recomienda encarecidamente utilizar HTTPS.

Sugerencia

Las cadenas de conexión de la cuenta de almacenamiento se pueden encontrar en Azure Portal. Vaya a Seguridad y redes>Claves de acceso en la configuración de la cuenta de almacenamiento para ver las cadenas de conexión de las claves de acceso principal y secundaria.

Creación de una cadena de conexión con una firma de acceso compartido

Si posee una dirección URL de firma de acceso compartido (SAS) que le concede acceso a los recursos de una cuenta de almacenamiento, puede utilizar la SAS en una cadena de conexión. Dado que SAS incluye la información necesaria para autenticar la solicitud, una cadena de conexión con un SAS proporciona el protocolo, el punto de conexión de servicio y las credenciales necesarias para acceder al recurso.

Para crear una cadena de conexión que incluya una firma de acceso compartido, especifique la cadena con el siguiente formato:

BlobEndpoint=myBlobEndpoint;
QueueEndpoint=myQueueEndpoint;
TableEndpoint=myTableEndpoint;
FileEndpoint=myFileEndpoint;
SharedAccessSignature=sasToken

Cada punto de conexión de servicio es opcional, aunque la cadena de conexión debe contener al menos uno.

Nota:

Se recomienda usar HTTPS con SAS.

Si está especificando SAS en una cadena de conexión en un archivo de configuración, debe codificar caracteres especiales en la dirección URL.

Ejemplo de SAS de servicio

Este es un ejemplo de una cadena de conexión que incluye un SAS de servicio para el almacenamiento de blobs:

BlobEndpoint=https://storagesample.blob.core.windows.net;
SharedAccessSignature=sv=2015-04-05&sr=b&si=tutorial-policy-635959936145100803&sig=9aCzs76n0E7y5BpEi2GvsSv433BZa22leDOZXX%2BXXIU%3D

Aquí se muestra un ejemplo de la misma cadena de conexión con codificación de dirección URL:

BlobEndpoint=https://storagesample.blob.core.windows.net;
SharedAccessSignature=sv=2015-04-05&amp;sr=b&amp;si=tutorial-policy-635959936145100803&amp;sig=9aCzs76n0E7y5BpEi2GvsSv433BZa22leDOZXX%2BXXIU%3D

Ejemplo de SAS de cuenta

Este es un ejemplo de una cadena de conexión que incluye un SAS de cuenta para el almacenamiento de blobs y archivos: Tenga en cuenta que se especifican los puntos de conexión para ambos servicios:

BlobEndpoint=https://storagesample.blob.core.windows.net;
FileEndpoint=https://storagesample.file.core.windows.net;
SharedAccessSignature=sv=2015-07-08&sig=iCvQmdZngZNW%2F4vw43j6%2BVz6fndHF5LI639QJba4r8o%3D&spr=https&st=2016-04-12T03%3A24%3A31Z&se=2016-04-13T03%3A29%3A31Z&srt=s&ss=bf&sp=rwl

Aquí se muestra un ejemplo de la misma cadena de conexión con codificación de dirección URL:

BlobEndpoint=https://storagesample.blob.core.windows.net;
FileEndpoint=https://storagesample.file.core.windows.net;
SharedAccessSignature=sv=2015-07-08&amp;sig=iCvQmdZngZNW%2F4vw43j6%2BVz6fndHF5LI639QJba4r8o%3D&amp;spr=https&amp;st=2016-04-12T03%3A24%3A31Z&amp;se=2016-04-13T03%3A29%3A31Z&amp;srt=s&amp;ss=bf&amp;sp=rwl

Creación de una cadena de conexión para un punto de conexión de Storage explícito

En una cadena de conexión se pueden especificar puntos de conexión de servicio explícitos, en lugar de usar los predeterminados. Para crear una cadena de conexión que especifique un punto de conexión explícito, especifique el punto de conexión de servicio completo para cada servicio, incluida la especificación de protocolo (HTTPS (recomendado) o HTTP) con el formato siguiente:

DefaultEndpointsProtocol=[http|https];
BlobEndpoint=myBlobEndpoint;
FileEndpoint=myFileEndpoint;
QueueEndpoint=myQueueEndpoint;
TableEndpoint=myTableEndpoint;
AccountName=myAccountName;
AccountKey=myAccountKey

Un escenario en el que puede desear especificar un punto de conexión explícito es cuando ha asignado un punto de conexión de Blob Storage a un dominio personalizado. En ese caso, puede especificar un punto de conexión personalizado para Blob Storage en la cadena de conexión. También puede especificar los puntos de conexión predeterminados para los demás servicios, en caso de que la aplicación los use.

Este es un ejemplo de una cadena de conexión que especifica un punto de conexión explícito para Blob service:

# Blob endpoint only
DefaultEndpointsProtocol=https;
BlobEndpoint=http://www.mydomain.com;
AccountName=storagesample;
AccountKey=<account-key>

Este ejemplo especifica puntos de conexión explícitos para todos los servicios, lo que incluye un dominio personalizado para Blob service:

# All service endpoints
DefaultEndpointsProtocol=https;
BlobEndpoint=http://www.mydomain.com;
FileEndpoint=https://myaccount.file.core.windows.net;
QueueEndpoint=https://myaccount.queue.core.windows.net;
TableEndpoint=https://myaccount.table.core.windows.net;
AccountName=storagesample;
AccountKey=<account-key>

Los valores del punto de conexión de una cadena de conexión se usan para construir los identificadores URI de solicitud para los servicios de Storage e indicar el formato de los identificadores URI que se devuelven al código.

Si ha asignado un punto de conexión de Storage a un dominio personalizado y omite dicho punto en una cadena de conexión, no podrá usarla para acceder a los datos de dicho servicio desde el código.

Para más información sobre cómo configurar un dominio personalizado para Azure Storage, consulte Asignación de un dominio personalizado a un punto de conexión de Azure Blob Storage.

Importante

Los valores del punto de conexión de servicio de las cadenas de conexión deben ser identificadores URI con el formato correcto, entre los que se incluyen https:// (recomendado) o http://.

Creación de una cadena de conexión con el sufijo de un punto de conexión

Para crear una cadena de conexión para un servicio de almacenamiento en regiones o instancias con sufijos de punto final diferentes, como para Microsoft Azure operado por 21Vianet o Azure Government, utilice el siguiente formato de cadena de conexión. Indique si desea conectarse a la cuenta de almacenamiento a través de HTTP (recomendado) o HTTPS, reemplace myAccountName por el nombre de la cuenta de almacenamiento, reemplace myAccountKey por la clave de acceso a la cuenta y reemplace mySuffix por el sufijo del identificador URI:

DefaultEndpointsProtocol=[http|https];
AccountName=myAccountName;
AccountKey=myAccountKey;
EndpointSuffix=mySuffix;

He aquí un ejemplo de cadena de conexión para servicios de almacenamiento en Azure operados por 21Vianet:

DefaultEndpointsProtocol=https;
AccountName=storagesample;
AccountKey=<account-key>;
EndpointSuffix=core.chinacloudapi.cn;

Autorización del acceso con una clave compartida

Para obtener información sobre cómo autorizar el acceso a Azure Storage con la clave de la cuenta o con una cadena de conexión, consulte alguno de los siguientes artículos:

Pasos siguientes