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.

Protección de las claves de acceso

Las claves de acceso de la cuenta de almacenamiento proporcionan acceso total a la configuración de una cuenta de almacenamiento, así como a los datos. 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 total a la configuración de una cuenta de almacenamiento y sus datos. El acceso a las claves compartidas debe estar cuidadosamente limitado y supervisado. Use tokens de SAS con un ámbito limitado de acceso en escenarios en los que no se puede usar la autorización basada en Microsoft Entra ID. 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

Microsoft recomienda usar Microsoft Entra ID para autorizar solicitudes de datos de blobs, colas y tablas si es posible, en lugar de usar las claves de cuenta (autorización con clave compartida). La autorización con Microsoft Entra ID proporciona más seguridad y facilidad de uso que la autorización con clave compartida. Para obtener más información sobre el uso de la autorización de Microsoft Entra desde las aplicaciones, consulte Cómo autenticar aplicaciones .NET con servicios de Azure. En el caso de los recursos compartidos de archivos SMB de Azure, Microsoft recomienda usar la integración de Active Directory Domain Services (AD DS) local o la autenticación Kerberos de Microsoft Entra.

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 se debe usar para escenarios que admiten 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 detalles, consulte Acceso de confianza para los recursos registrados en su suscripción.

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