From 9e87349d62cba138e7159dcbad6d56d65a7f8b99 Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 17 Jul 2026 06:09:51 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-sql. --- .../azure-security/az-services/az-sql.md | 104 +++++----- .../azure-security/az-services/az-storage.md | 186 +++++++++--------- 2 files changed, 145 insertions(+), 145 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-services/az-sql.md b/src/pentesting-cloud/azure-security/az-services/az-sql.md index 9cb65e1c3..38f00365c 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-sql.md +++ b/src/pentesting-cloud/azure-security/az-services/az-sql.md @@ -4,47 +4,47 @@ ## Azure SQL -Azure SQL es una familia de productos administrados, seguros e inteligentes que usan el **motor de base de datos SQL Server en la nube de Azure**. Esto significa que no tienes que preocuparte por la administración física de tus servidores, y puedes centrarte en gestionar tus datos. +Azure SQL es una familia de productos administrados, seguros e inteligentes que utilizan el **motor de base de datos de SQL Server en la nube de Azure**. Esto significa que no tienes que preocuparte por la administración física de tus servidores y puedes concentrarte en gestionar tus datos. Azure SQL consta de cuatro ofertas principales: -1. **Azure SQL Server**: Se necesita un servidor para la **implementación y administración** de bases de datos SQL Server. -2. **Azure SQL Database**: Este es un **servicio de base de datos totalmente administrado**, que te permite alojar bases de datos individuales en la nube de Azure. -3. **Azure SQL Managed Instance**: Esto es para implementaciones a mayor escala, de toda la instancia de SQL Server. -4. **Azure SQL Server on Azure VMs**: Esto es mejor para arquitecturas en las que quieres **control sobre el sistema operativo **y la instancia de SQL Server. +1. **Azure SQL Server**: Se necesita un servidor para el **despliegue y la gestión** de bases de datos de SQL Server. +2. **Azure SQL Database**: Es un **servicio de base de datos completamente administrado**, que permite alojar bases de datos individuales en la nube de Azure. +3. **Azure SQL Managed Instance**: Está destinado a despliegues de mayor escala con el alcance de una instancia completa de SQL Server. +4. **Azure SQL Server on Azure VMs**: Es la mejor opción para arquitecturas en las que se desea tener **control sobre el sistema operativo **y la instancia de SQL Server. -### SQL Server Security Features +### Características de seguridad de SQL Server -**Network access:** +**Acceso de red:** -- Public endpoint (can limit access to specific networks). -- Private endpoints. -- También es posible restringir conexiones basadas en nombres de dominio. -- También es posible permitir que Azure services accedan a él (como usar el Query editor en el portal o permitir que una Azure VM se conecte). -- Si un SQL Server tiene *Allow Azure services and resources to access this server* configurado en "Enabled", Azure creará automáticamente una hidden firewall rule que permite que todo el tráfico de red originado desde Azure se conecte al SQL Server — incluyendo recursos de cualquier tenant. -- Esto significa que si obtienes credenciales válidas de SQL, puedes conectarte al victim Azure SQL Server desde una Azure VM dentro de tu propio tenant controlado por el attacker. [The MS docs explains this](https://learn.microsoft.com/en-us/azure/azure-sql/database/network-access-controls-overview?view=azuresql#allow-azure-services) +- Endpoint público (puede limitar el acceso a redes específicas). +- Endpoints privados. +- También es posible restringir las conexiones según los nombres de dominio. +- También es posible permitir que los servicios de Azure accedan a él (por ejemplo, para utilizar Query editor en el portal o permitir que una Azure VM se conecte). +- Si un SQL Server tiene configurada como "Enabled" la opción *Allow Azure services and resources to access this server*, Azure creará automáticamente una regla de firewall oculta que permite que todo el tráfico de red originado en Azure se conecte al SQL Server, incluidos los recursos de cualquier tenant. +- Esto significa que, si obtienes credenciales SQL válidas, puedes conectarte al Azure SQL Server de la víctima desde una Azure VM dentro de tu propio tenant controlado por el atacante. [The MS docs explica esto](https://learn.microsoft.com/en-us/azure/azure-sql/database/network-access-controls-overview?view=azuresql#allow-azure-services) -**Authentication Methods:** +**Métodos de autenticación:** -- Microsoft **Entra-only** authentication: Necesitas indicar los Entra principals que tendrán acceso al service. -- **Both SQL and Microsoft Entra** authentication: Autenticación SQL tradicional con username y password junto con Microsoft Entra. -- **Only SQL** authentication: Solo permitir acceso mediante database users. +- Autenticación **solo de Microsoft Entra**: Debes indicar las entidades de Entra que tendrán acceso al servicio. +- Autenticación **SQL y Microsoft Entra**: Autenticación SQL tradicional con nombre de usuario y contraseña junto con Microsoft Entra. +- Autenticación **solo SQL**: Solo permite el acceso mediante usuarios de la base de datos. -Ten en cuenta que si se permite cualquier SQL auth, se necesita indicar un admin user (username + password) y si se selecciona Entra ID auth, también es necesario indicar al menos un principal con admin access. +Ten en cuenta que, si se permite cualquier autenticación SQL, es necesario indicar un usuario administrador (nombre de usuario + contraseña), y si se selecciona la autenticación de Entra ID, también es necesario indicar al menos una entidad con acceso de administrador. -**Encryption:** +**Cifrado:** -- Se llama “Transparent data encryption” y cifra databases, backups y logs at rest. -- Como siempre, por defecto se usa una Azure managed key, pero también podría usarse una customer managed encryption key (CMEK). +- Se denomina “Transparent data encryption” y cifra las bases de datos, las copias de seguridad y los logs en reposo. +- Como siempre, se utiliza una clave administrada por Azure de forma predeterminada, pero también se podría utilizar una clave de cifrado administrada por el cliente (CMEK). **Managed Identities:** -- Es posible asignar system y user managed MIs. -- Se usa para acceder a la encryption key (si se usa una CMEK) y a otros servicios desde las databases. -- Para algunos ejemplos de los Azure services a los que se puede acceder desde la database, consulta [this page of the docs](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql) -- Si se asigna más de una UMI, es posible indicar la default one to use. -- Es posible configurar una federated client identity para cross-tenant access. +- Es posible asignar MIs administradas por el sistema y por el usuario. +- Se utilizan para acceder a la clave de cifrado (si se utiliza una CMEK) y a otros servicios desde las bases de datos. +- Para ver algunos ejemplos de los servicios de Azure a los que se puede acceder desde la base de datos, consulta [this page of the docs](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql) +- Si se asigna más de una UMI, es posible indicar cuál utilizar de forma predeterminada. +- Es posible configurar una identidad de cliente federada para el acceso cross-tenant. -Some commands to access info inside a blob storage from a SQL database: +Algunos comandos para acceder a información dentro de un Blob Storage desde una base de datos SQL: ```sql -- Create a credential for the managed identity CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential] @@ -71,60 +71,60 @@ GO ``` **Microsoft Defender:** -- Útil para “mitigar posibles vulnerabilidades de la base de datos y detectar actividades anómalas” +- Útil para “mitigar posibles vulnerabilidades de bases de datos y detectar actividades anómalas” - Hablaremos de Defender en su propia lección (se puede habilitar en varios otros servicios de Azure) **Backups:** -- La frecuencia de backup se gestiona en las políticas de retención. +- La frecuencia de los backups se gestiona en las retention policies. **Deleted databases:** -- Es posible restaurar DBs que han sido borradas desde backups existentes. +- Es posible restaurar DBs que se hayan eliminado a partir de backups existentes. ## Azure SQL Database -**Azure SQL Database** es una **plataforma de base de datos completamente gestionada como servicio (PaaS)** que proporciona soluciones de base de datos relacional escalables y seguras. Está basada en las últimas tecnologías de SQL Server y elimina la necesidad de gestionar infraestructura, lo que la convierte en una opción popular para aplicaciones basadas en cloud. +**Azure SQL Database** es una **plataforma de base de datos completamente administrada como servicio (PaaS)** que proporciona soluciones de bases de datos relacionales escalables y seguras. Está basada en las tecnologías más recientes de SQL Server y elimina la necesidad de gestionar la infraestructura, por lo que es una opción popular para aplicaciones basadas en cloud. -Para crear una SQL database es necesario indicar el SQL server donde se alojará. +Para crear una base de datos SQL es necesario indicar el SQL server donde estará alojada. ### SQL Database Security Features -- **Always Up-to-Date**: Se ejecuta sobre la última versión estable de SQL Server y recibe nuevas features y patches automáticamente. +- **Always Up-to-Date**: Se ejecuta en la última versión estable de SQL Server y recibe automáticamente nuevas funcionalidades y parches. - **Inherited SQL Server security features:** -- Authentication (SQL and/or Entra ID) +- Authentication (SQL y/o Entra ID) - Assigned Managed Identities - Network restrictions - Encryption - Backups - … - **Data redundancy:** Las opciones son local, zone, Geo o Geo-Zone redundant. -- **Ledger:** Verifica criptográficamente la integridad de los datos, asegurando que cualquier manipulación sea detectada. Útil para organizaciones financieras, médicas y cualquier organización que gestione datos sensibles. +- **Ledger:** Verifica criptográficamente la integridad de los datos, garantizando que se detecte cualquier manipulación. Es útil para organizaciones financieras, médicas y cualquier organización que gestione datos sensibles. -Una SQL database podría formar parte de un **elastic Pool**. Los elastic pools son una solución rentable para gestionar múltiples bases de datos compartiendo recursos configurables de compute (eDTUs) y storage entre ellas, con precios basados únicamente en los recursos asignados y no en el número de bases de datos. +Una base de datos SQL puede formar parte de un **elastic Pool**. Los elastic pools son una solución rentable para gestionar varias bases de datos mediante el uso compartido de recursos de compute (eDTUs) y almacenamiento configurables, con un precio basado únicamente en los recursos asignados y no en el número de bases de datos. #### Azure SQL Column Level Security (Masking) & Row Level Security -**Azure SQL's dynamic** data masking es una feature que ayuda a **proteger información sensible ocultándola** a usuarios no autorizados. En lugar de alterar los datos reales, enmascara dinámicamente los datos mostrados, asegurando que detalles sensibles como números de tarjeta de crédito queden ocultos. +El **dynamic** data masking de **Azure SQL** es una funcionalidad que ayuda a **proteger la información sensible ocultándola** a usuarios no autorizados. En lugar de modificar los datos reales, enmascara dinámicamente los datos mostrados, garantizando que los detalles sensibles, como los números de tarjetas de crédito, queden ocultos. -**Dynamic Data Masking** afecta a todos los usuarios excepto a los que están unmasked (estos usuarios deben ser indicados) y a los administradores. Tiene la opción de configuración que especifica qué usuarios SQL están exentos del dynamic data masking, con **administrators siempre excluidos**. +El **Dynamic Data Masking** afecta a todos los usuarios excepto a aquellos que están unmasked (estos usuarios deben indicarse) y a los administradores. Cuenta con una opción de configuración que especifica qué usuarios SQL están exentos del dynamic data masking, y los **administradores siempre están excluidos**. -**Azure SQL Row Level Security (RLS)** es una feature que **controla qué filas puede ver o modificar un usuario**, asegurando que cada usuario solo vea los datos relevantes para él. Mediante la creación de security policies con filter o block predicates, las organizaciones pueden aplicar acceso granular a nivel de database. +**Azure SQL Row Level Security (RLS)** es una funcionalidad que **controla qué filas puede ver o modificar un usuario**, garantizando que cada usuario solo vea los datos relevantes para él. Mediante la creación de security policies con filter o block predicates, las organizaciones pueden aplicar un control de acceso detallado a nivel de base de datos. ### Azure SQL Managed Instance -**Azure SQL Managed Instances** son para despliegues a mayor escala, para toda la instancia de SQL Server. Proporciona una compatibilidad cercana al 100% con la última SQL Server on-premises (Enterprise Edition) Database Engine, lo que ofrece una implementación nativa en virtual network (VNet) que aborda preocupaciones comunes de seguridad, y un modelo de negocio favorable para clientes de SQL Server on-premises. +**Azure SQL Managed Instances** está diseñado para deployments de mayor escala con el alcance de una instancia completa de SQL Server. Proporciona una compatibilidad cercana al 100 % con el Database Engine de SQL Server on-premises más reciente (Enterprise Edition), ofrece una implementación nativa en una virtual network (VNet) que aborda problemas de seguridad comunes y un modelo de negocio favorable para los clientes de SQL Server on-premises. ### Azure SQL Virtual Machines -**Azure SQL Virtual Machines** permite **controlar el operating system** y la instancia de SQL Server, ya que se creará una VM en el servicio de VM ejecutando el SQL server. +**Azure SQL Virtual Machines** permite **controlar el sistema operativo** y la instancia de SQL Server, ya que se creará una VM en el servicio de VM que ejecutará el SQL server. -Cuando se crea una SQL Virtual Machine es posible **seleccionar todos los settings de la VM** (como se muestra en la lección de VM) que alojará el SQL server. -- Esto significa que la VM accederá a alguna(s) VNet(s), podría tener **Managed Identities attached** a ella, podría tener file shares montados… lo que hace que el **pivoting from the SQL** a la VM sea súper interesante. -- Además, es posible configurar un app id y secret para **permitir que el SQL acceda a un specific key vault**, que podría contener información sensible. +Al crear una SQL Virtual Machine es posible **seleccionar todos los ajustes de la VM** (como se muestra en la lección de VM) que alojará el SQL server. +- Esto significa que la VM accederá a alguna(s) VNet(s), podría tener **Managed Identities asociadas**, podría tener file shares montados… lo que hace que un **pivoting desde el SQL** hacia la VM sea muy interesante. +- Además, es posible configurar un app id y un secret para **permitir que el SQL acceda a un key vault específico**, que podría contener información sensible. -También es posible configurar cosas como **automatic SQL updates**, **automatic backups**, **Entra ID authentication** y la mayoría de las features de los otros servicios de SQL. +También es posible configurar elementos como **automatic SQL updates**, **automatic backups**, **Entra ID authentication** y la mayoría de las funcionalidades de los otros servicios SQL. -## Enumeration +## Enumeración {{#tabs}} {{#tab name="az cli"}} @@ -286,9 +286,9 @@ JOIN sys.security_predicates AS sp2 ON sp.object_id = sp2.object_id; ``` -### Conectar y ejecutar consultas SQL +### Conectarse y ejecutar consultas SQL -Podrías encontrar una cadena de conexión (que contiene credenciales) a partir de un ejemplo de [enumerating an Az WebApp](az-app-services.md): +Podrías encontrar una cadena de conexión (que contiene credenciales) en el ejemplo de [enumeración de una Az WebApp](az-app-services.md): ```bash function invoke-sql{ param($query) @@ -307,7 +307,7 @@ $Connection.Close() invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;' ``` -También puedes usar sqlcmd para acceder a la base de datos. Es importante saber si el servidor permite conexiones públicas `az sql server show --name --resource-group `, y también si la regla del firewall permite que nuestra IP acceda: +También puedes usar sqlcmd para acceder a la base de datos. Es importante saber si el servidor permite conexiones públicas `az sql server show --name --resource-group ` y también si la regla del firewall permite que nuestra IP acceda: ```bash sqlcmd -S .database.windows.net -U -P -d ``` @@ -318,19 +318,19 @@ sqlcmd -S .database.windows.net -U -P
-### Exposición de static website (`$web`) y leaked secrets +### Exposición de Static website (`$web`) y secretos leaked -- **Static websites** se sirven desde el container especial `$web` a través de un endpoint específico de la region como `https://.z13.web.core.windows.net/`. -- El container `$web` puede reportar `publicAccess: null` mediante la blob API, pero los archivos siguen siendo accesibles a través del static site endpoint, así que dejar allí artefactos de config/IaC puede leak secrets. -- Quick audit workflow: +- Los **Static websites** se sirven desde el container especial `$web` mediante un endpoint específico de la región, como `https://.z13.web.core.windows.net/`. +- El container `$web` puede mostrar `publicAccess: null` a través de la API de blobs, pero los archivos siguen siendo accesibles mediante el endpoint del sitio estático, por lo que almacenar allí artefactos de configuración/IaC puede leakear secretos. +- Flujo de auditoría rápido: ```bash # Identify storage accounts with static website hosting enabled az storage blob service-properties show --account-name --auth-mode login @@ -87,53 +87,53 @@ az storage blob list --container-name '$web' --account-name --auth-mo # Pull suspicious files directly (e.g., IaC tfvars containing secrets/SAS) az storage blob download -c '$web' --name iac/terraform.tfvars --file /dev/stdout --account-name --auth-mode login ``` -### Auditing anonymous blob exposure +### Auditoría de exposición anónima de blobs -- **Localiza cuentas de almacenamiento** que pueden exponer datos: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Si `allowBlobPublicAccess` es `false` no puedes hacer públicos los containers. -- **Inspecciona cuentas de riesgo** para confirmar el flag y otras configuraciones débiles: `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`. -- **Enumera la exposición a nivel de container** donde el flag está habilitado: +- **Localiza cuentas de almacenamiento** que puedan exponer datos: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Si `allowBlobPublicAccess` es `false`, no puedes hacer públicos los contenedores. +- **Inspecciona las cuentas de riesgo** para confirmar el indicador y otras configuraciones débiles: `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`. +- **Enumera la exposición a nivel de contenedor** cuando el indicador esté habilitado: ```bash az storage container list --account-name \ --query '[].{name:name, access:properties.publicAccess}' ``` -- `"Blob"`: se permiten lecturas anónimas **solo cuando el nombre del blob es conocido** (sin listado). -- `"Container"`: **listado + lectura** anónimos de cada blob. +- `"Blob"`: lecturas anónimas permitidas **solo cuando se conoce el nombre del blob** (sin listado). +- `"Container"`: **listado + lectura anónimos** de cada blob. - `null`: privado; se requiere autenticación. -- **Demuestra acceso** sin credenciales: +- **Demostrar el acceso** sin credenciales: - Si `publicAccess` es `Container`, el listado anónimo funciona: `curl "https://.blob.core.windows.net/?restype=container&comp=list"`. -- Para `Blob` y `Container`, la descarga anónima del blob funciona cuando se conoce el nombre: +- Tanto para `Blob` como para `Container`, la descarga anónima del blob funciona cuando se conoce el nombre: ```bash az storage blob download -c -n --account-name --file /dev/stdout # or via raw HTTP curl "https://.blob.core.windows.net//" ``` -### Connect to Storage +### Conectarse al almacenamiento -Si encuentras algún **storage** al que puedas conectarte, podrías usar la herramienta [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) para hacerlo. +Si encuentras algún **almacenamiento** al que puedas conectarte, puedes usar la herramienta [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) para hacerlo. -## Access to Storage +## Acceso al almacenamiento ### RBAC -Es posible usar Entra ID principals con **RBAC roles** para acceder a storage accounts y es la forma recomendada. +Es posible usar identidades de Entra ID con **roles RBAC** para acceder a las cuentas de almacenamiento, y es la forma recomendada. -### Access Keys +### Claves de acceso -Las storage accounts tienen access keys que pueden usarse para acceder a ellas. Esto proporciona f**ull access to the storage account.** +Las cuentas de almacenamiento tienen claves de acceso que se pueden usar para acceder a ellas. Esto proporciona un acceso t**otal a la cuenta de almacenamiento.**
### **Shared Keys & Lite Shared Keys** -Es posible [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) firmadas con las access keys para autorizar el acceso a ciertos recursos mediante una signed URL. +Es posible [**generar Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) firmadas con las claves de acceso para autorizar el acceso a determinados recursos mediante una URL firmada. > [!NOTE] -> Ten en cuenta que la parte `CanonicalizedResource` representa el storage services resource (URI). Y si alguna parte de la URL está codificada, también debe estar codificada dentro de `CanonicalizedResource`. +> Ten en cuenta que la parte `CanonicalizedResource` representa el recurso de los servicios de almacenamiento (URI). Y si alguna parte de la URL está codificada, también debe codificarse dentro de `CanonicalizedResource`. > [!NOTE] -> Esto se usa **by default by `az` cli** para autenticar requests. Para hacer que use las credenciales del Entra ID principal indica el param `--auth-mode login`. +> Esto lo utiliza **az cli** de forma predeterminada para autenticar las solicitudes. Para que use las credenciales de la identidad de Entra ID, indica el parámetro `--auth-mode login`. -- Es posible generar una **shared key para blob, queue y file services** firmando la siguiente información: +- Es posible generar una **shared key para los servicios de blobs, queues y files** firmando la siguiente información: ```bash StringToSign = VERB + "\n" + Content-Encoding + "\n" + @@ -150,7 +150,7 @@ Range + "\n" + CanonicalizedHeaders + CanonicalizedResource; ``` -- Es posible generar una **shared key para table services** firmando la siguiente información: +- Es posible generar una **shared key para los servicios de tabla** firmando la siguiente información: ```bash StringToSign = VERB + "\n" + Content-MD5 + "\n" + @@ -158,7 +158,7 @@ Content-Type + "\n" + Date + "\n" + CanonicalizedResource; ``` -- Es posible generar una **lite shared key para blob, queue y file services** firmando la siguiente información: +- Es posible generar una **lite shared key para los servicios blob, queue y file** firmando la siguiente información: ```bash StringToSign = VERB + "\n" + Content-MD5 + "\n" + @@ -167,12 +167,12 @@ Date + "\n" + CanonicalizedHeaders + CanonicalizedResource; ``` -- Es posible generar una **lite shared key for table services** firmando la siguiente información: +- Es posible generar una **clave compartida lite para servicios de tablas** firmando la siguiente información: ```bash StringToSign = Date + "\n" CanonicalizedResource ``` -Entonces, para usar la key, se puede hacer en el header Authorization siguiendo la sintaxis: +Luego, para usar la clave, puede hacerse en el header `Authorization` siguiendo la sintaxis: ```bash Authorization="[SharedKey|SharedKeyLite] :" #e.g. @@ -186,76 +186,76 @@ Content-Length: 0 ``` ### **Shared Access Signature** (SAS) -Shared Access Signatures (SAS) son URLs seguras y limitadas en el tiempo que **grant specific permissions to access resource**s en una Azure Storage account sin exponer las access keys de la cuenta. Mientras que las access keys proporcionan acceso administrativo completo a todos los recursos, SAS permite un control granular al especificar permisos (como read o write) y definir un tiempo de expiración. +Las Shared Access Signatures (SAS) son URLs seguras y limitadas en el tiempo que **otorgan permisos específicos para acceder a recursos** en una cuenta de Azure Storage sin exponer las claves de acceso de la cuenta. Mientras que las claves de acceso proporcionan acceso administrativo completo a todos los recursos, SAS permite un control granular al especificar permisos (como lectura o escritura) y definir un tiempo de expiración. -#### SAS Types +#### Tipos de SAS -- **User delegation SAS**: Se crea a partir de un **Entra ID principal** que firmará el SAS y delegará los permisos del usuario al SAS. Solo puede usarse con **blob and data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Es posible **revoke** todos los user delegated SAS generados. -- Incluso si es posible generar un delegation SAS con "más" permisos que los que tiene el usuario. Sin embargo, si el principal no los tiene, no funcionará (no privesc). -- **Service SAS**: Se firma usando una de las **access keys** de la storage account. Puede usarse para conceder acceso a recursos específicos en un único storage service. Si la key se renueva, el SAS dejará de funcionar. -- **Account SAS**: También se firma con una de las **access keys** de la storage account. Concede acceso a recursos en varios services de la storage account (Blob, Queue, Table, File) y puede incluir operaciones a nivel de service. +- **User delegation SAS**: Se crea a partir de un **principal de Entra ID** que firmará la SAS y delegará los permisos del usuario a la SAS. Solo puede utilizarse con **blob y data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Es posible **revocar** todas las SAS delegadas de usuario generadas. +- Aunque es posible generar una delegation SAS con "más" permisos de los que tiene el usuario, si el principal no dispone de ellos, no funcionará (no hay privesc). +- **Service SAS**: Se firma utilizando una de las **claves de acceso** de la cuenta de almacenamiento. Puede utilizarse para conceder acceso a recursos específicos en un único servicio de almacenamiento. Si se renueva la clave, la SAS dejará de funcionar. +- **Account SAS**: También se firma con una de las **claves de acceso** de la cuenta de almacenamiento. Concede acceso a recursos de varios servicios de una cuenta de almacenamiento (Blob, Queue, Table, File) y puede incluir operaciones a nivel de servicio. -A SAS URL firmada por una **access key** se ve así: +Una URL SAS firmada mediante una **clave de acceso** tiene este aspecto: - `https://.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D` -Una SAS URL firmada como **user delegation** se ve así: +Una URL SAS firmada como **user delegation** tiene este aspecto: - `https://.blob.core.windows.net/testing-container?sp=r&st=2024-11-22T15:07:40Z&se=2024-11-22T23:07:40Z&skoid=d77c71a1-96e7-483d-bd51-bd753aa66e62&sktid=fdd066e1-ee37-49bc-b08f-d0e152119b04&skt=2024-11-22T15:07:40Z&ske=2024-11-22T23:07:40Z&sks=b&skv=2022-11-02&spr=https&sv=2022-11-02&sr=c&sig=7s5dJyeE6klUNRulUj9TNL0tMj2K7mtxyRc97xbYDqs%3D` -Note algunos **http params**: +Ten en cuenta algunos **parámetros http**: -- El parámetro **`se`** indica la **expiration date** del SAS -- El parámetro **`sp`** indica los **permissions** del SAS -- **`sig`** es la **signature** que valida el SAS +- El parámetro **`se`** indica la **fecha de expiración** de la SAS +- El parámetro **`sp`** indica los **permisos** de la SAS +- **`sig`** es la **firma** que valida la SAS -#### SAS permissions +#### Permisos de SAS -Al generar un SAS, es necesario indicar los permisos que debe conceder. Dependiendo del objeto sobre el que se genere el SAS, pueden incluirse permisos distintos. Por ejemplo: +Al generar una SAS, es necesario indicar los permisos que debe conceder. Dependiendo del objeto sobre el que se genere la SAS, pueden incluirse diferentes permisos. Por ejemplo: - (a)dd, (c)reate, (d)elete, (e)xecute, (f)ilter_by_tags, (i)set_immutability_policy, (l)ist, (m)ove, (r)ead, (t)ag, (w)rite, (x)delete_previous_version, (y)permanent_delete -## SFTP Support for Azure Blob Storage +## Compatibilidad con SFTP para Azure Blob Storage -Azure Blob Storage ahora soporta el SSH File Transfer Protocol (SFTP), lo que permite la transferencia segura de archivos y su gestión directamente en Blob Storage sin requerir soluciones personalizadas ni productos de terceros. +Azure Blob Storage ahora admite el SSH File Transfer Protocol (SFTP), lo que permite transferir y gestionar archivos de forma segura directamente en Blob Storage sin necesidad de soluciones personalizadas ni productos de terceros. -### Key Features +### Características principales -- Protocol Support: SFTP funciona con Blob Storage accounts configuradas con hierarchical namespace (HNS). Esto organiza blobs en directories y subdirectories para facilitar la navegación. -- Security: SFTP puede usar local user identities, pero también soporta acceso basado en Microsoft Entra ID con Azure RBAC para authorization. Esto significa que el acceso puede concederse con los roles habituales de Blob Storage data-plane en lugar de crear local SFTP users. Los local users pueden autenticarse mediante: -- Azure-generated passwords -- Public-private SSH key pairs -- Granular Permissions: Se pueden asignar permisos como Read, Write, Delete y List a local users para hasta 100 containers. -- Networking Considerations: Las conexiones SFTP se realizan a través del puerto 22. Azure soporta configuraciones de network como firewalls, private endpoints o virtual networks para proteger el tráfico SFTP. +- Compatibilidad con protocolos: SFTP funciona con cuentas de Blob Storage configuradas con hierarchical namespace (HNS). Esto organiza los blobs en directorios y subdirectorios para facilitar la navegación. +- Seguridad: SFTP puede utilizar identidades de usuarios locales, pero también admite acceso basado en Microsoft Entra ID con Azure RBAC para la autorización. Esto significa que el acceso puede concederse mediante los roles habituales del data-plane de Blob Storage en lugar de crear usuarios locales de SFTP. Los usuarios locales pueden autenticarse mediante: +- Contraseñas generadas por Azure +- Pares de claves SSH públicas y privadas +- Permisos granulares: Se pueden asignar permisos como Read, Write, Delete y List a usuarios locales para hasta 100 contenedores. +- Consideraciones de red: Las conexiones SFTP se realizan a través del puerto 22. Azure admite configuraciones de red como firewalls, private endpoints o redes virtuales para proteger el tráfico SFTP. -### Setup Requirements +### Requisitos de configuración -- Hierarchical Namespace: HNS debe estar habilitado al crear la storage account. -- Supported Encryption: Requiere algoritmos criptográficos aprobados por Microsoft Security Development Lifecycle (SDL) (p. ej., rsa-sha2-256, ecdsa-sha2-nistp256). -- SFTP Configuration: -- Habilitar SFTP en la storage account. -- Para acceso de local-user, crear local user identities con los permisos adecuados. -- Para local users, configurar home directories para definir su ubicación inicial dentro del container. +- Hierarchical Namespace: HNS debe habilitarse al crear la cuenta de almacenamiento. +- Cifrado compatible: Requiere algoritmos criptográficos aprobados por Microsoft Security Development Lifecycle (SDL) (por ejemplo, rsa-sha2-256, ecdsa-sha2-nistp256). +- Configuración de SFTP: +- Habilitar SFTP en la cuenta de almacenamiento. +- Para el acceso de usuarios locales, crear identidades de usuarios locales con los permisos adecuados. +- Para los usuarios locales, configurar los directorios de inicio para definir su ubicación inicial dentro del contenedor. -### Permissions +### Permisos -| Permission | Symbol | Description | -| ---------------------- | ------ | ------------------------------------ | -| **Read** | `r` | Read file content. | -| **Write** | `w` | Upload files and create directories. | -| **List** | `l` | List contents of directories. | -| **Delete** | `d` | Delete files or directories. | -| **Create** | `c` | Create files or directories. | -| **Modify Ownership** | `o` | Change the owning user or group. | -| **Modify Permissions** | `p` | Change ACLs on files or directories. | +| Permiso | Símbolo | Descripción | +| ------------------------------- | ------- | ---------------------------------------- | +| **Read** | `r` | Leer el contenido de los archivos. | +| **Write** | `w` | Cargar archivos y crear directorios. | +| **List** | `l` | Enumerar el contenido de los directorios.| +| **Delete** | `d` | Eliminar archivos o directorios. | +| **Create** | `c` | Crear archivos o directorios. | +| **Modify Ownership** | `o` | Cambiar el usuario o grupo propietario. | +| **Modify Permissions** | `p` | Cambiar las ACL de archivos o directorios.| -## Enumeration +## Enumeración {{#tabs }} {{#tab name="az cli" }}
-az cli enumeration +enumeración de az cli ```bash # Get storage accounts az storage account list #Get the account name from here