La lliçó anterior va deixar una regla clara: una aplicació que escala horitzontalment no pot desar res al seu disc local. I Contoso Airlines genera un fitxer per cada venda: la targeta d'embarcament en PDF. Aquest fitxer ha de viure en algun lloc on arribin totes les instàncies, que aguanti milions d'objectes, que sigui barat i que permeti donar al client un enllaç de descàrrega sense obrir el magatzem sencer a internet.
Aquest lloc és Azure Storage. Al mòdul 1 ja vas crear el compte sttarjetascontosodev amb el seu contenidor tarjetas-embarque, HTTPS obligatori i accés anònim desactivat, però vas deixar ajornada una decisió important: quina redundància fer servir en desenvolupament i quina en producció. Aquesta lliçó recull aquest cap solt i el tanca.
Aprendràs què són els quatre serveis que caben en un compte d'emmagatzematge, com funciona Blob Storage en detall (tipus de blob, nivells d'accés i regles de cicle de vida), per a què serveixen Azure Files, Queue Storage i Table Storage, com es protegeix l'accés amb signatures d'accés compartit i identitats, i quines eines fer servir en cada cas. Al final muntaràs el flux real de Contoso: pujar una targeta d'embarcament, generar un enllaç temporal per al passatger i programar que el fitxer s'abarateixi sol amb el temps.
Avís de cost: l'emmagatzematge es factura per GB al mes, per operacions i per sortida de dades. Els exemples d'aquesta lliçó mouen kilobytes i costen cèntims, però els comptes d'emmagatzematge oblidats s'acumulen. Al final tens la neteja.
Contingut
- El compte d'emmagatzematge: un recurs, quatre serveis
- Blob Storage: contenidors i tipus de blob
- Nivells d'accés: Hot, Cool, Cold i Archive
- Regles de cicle de vida: les targetes d'embarcament de Contoso
- Azure Files: el recurs compartit de l'oficina
- Queue Storage: desacoblar l'emissió de targetes
- Table Storage i la seva relació amb Cosmos DB
- Redundància: LRS, ZRS, GRS, GZRS i RA-GRS
- Seguretat d'accés: claus, SAS i identitats
- Xifratge, versionatge, instantànies i eliminació temporal
- Eines:
az storage, AzCopy i Storage Explorer - Exemple complet: la targeta d'embarcament de principi a fi
- Neteja
- Errors Comuns i Consells
- Exercicis
- Conclusió
- El compte d'emmagatzematge: un recurs, quatre serveis
Un compte d'emmagatzematge és el contenidor de facturació, seguretat i configuració de fins a quatre serveis de dades diferents, cadascun amb el seu propi punt de connexió:
| Servei | Per a què serveix | Punt de connexió |
|---|---|---|
| Blob | Objectes no estructurats: PDF, imatges, còpies, registres | https://<compte>.blob.core.windows.net |
| File | Recursos compartits de xarxa per SMB o NFS | https://<compte>.file.core.windows.net |
| Queue | Cues de missatges senzilles per desacoblar processos | https://<compte>.queue.core.windows.net |
| Table | Magatzem NoSQL de clau-valor, molt barat | https://<compte>.table.core.windows.net |
En crear el compte tries dues coses que condicionen tota la resta:
| Decisió | Opcions | Què implica |
|---|---|---|
| Tipus de compte | StorageV2 (ús general v2), BlockBlobStorage (premium per a blobs), FileStorage (premium per a fitxers) |
StorageV2 és l'opció per defecte i la correcta llevat de necessitat específica |
| Rendiment | Standard (HDD al darrere) o Premium (SSD, latència baixa) | Standard admet els quatre serveis; Premium s'especialitza per tipus |
I una restricció que sorprèn tothom: el nom del compte és globalment únic, entre 3 i 24 caràcters, només minúscules i números. Res de guions. Per això els comptes de Contoso es diuen sttarjetascontosodev i sttarjetascontosopro i no segueixen el patró amb guions de la resta de recursos.
Recordatori del que es va crear al mòdul 1, amb l'ordre completa per si l'has de refer:
az storage account create \
--resource-group rg-contoso-reservas-dev \
--name sttarjetascontosodev \
--location westeurope \
--sku Standard_LRS \
--kind StorageV2 \
--https-only true \
--min-tls-version TLS1_2 \
--allow-blob-public-access false \
--tags entorno=desarrollo proyecto=contoso-reservas \
centro-coste=CC-1042 [email protected] \
--output table--allow-blob-public-access false és la línia que impedeix que ningú pugui obrir un contenidor al públic per error. Amb ella activada a nivell de compte, cap configuració de contenidor no pot exposar els fitxers anònimament.
- Blob Storage: contenidors i tipus de blob
La jerarquia de Blob Storage té tres nivells i prou:
Compte d'emmagatzematge (sttarjetascontosopro)
└── Contenidor (tarjetas-embarque)
└── Blob (2026/08/IB3241-20260814-A7K2.pdf)No hi ha carpetes reals: el que sembla una jerarquia són noms de blob amb barres. Les eines la mostren com si fos un arbre, però per al servei és un nom pla. Això té una conseqüència pràctica útil: pots llistar «una carpeta» amb un prefix, i és una operació eficient.
Els tres tipus de blob
| Tipus | Com funciona | Mida màxima | Casos d'ús |
|---|---|---|---|
| En blocs (block) | Es compon de blocs que es pugen en paral·lel i es confirmen | ~190 TiB | El 95 % dels casos: PDF, imatges, vídeo, còpies, ZIP |
| D'annexos (append) | Només permet afegir al final; optimitzat per a escriptura seqüencial | ~195 GiB | Registres d'auditoria, fitxers de log |
| De pàgines (page) | Accés aleatori per pàgines de 512 bytes | 8 TiB | Discos de VM (els discos gestionats són blobs de pàgines per sota) |
Per a les targetes d'embarcament de Contoso: blobs en blocs, sens dubte.
Operacions bàsiques amb la CLI
COMPTE="sttarjetascontosodev"
CONTENIDOR="tarjetas-embarque"
# Crear el contenidor. --auth-mode login fa servir la teva identitat d'Entra ID
# en lloc de la clau del compte: es la forma recomanada.
az storage container create \
--account-name "${COMPTE}" \
--name "${CONTENIDOR}" \
--auth-mode login \
--public-access off \
--output table
# Pujar una targeta d'embarcament.
az storage blob upload \
--account-name "${COMPTE}" \
--container-name "${CONTENIDOR}" \
--name "2026/08/IB3241-20260814-A7K2.pdf" \
--file ./targeta.pdf \
--content-type "application/pdf" \
--auth-mode login \
--overwrite
# Llistar les targetes d'agost de 2026 fent servir el prefix.
az storage blob list \
--account-name "${COMPTE}" \
--container-name "${CONTENIDOR}" \
--prefix "2026/08/" \
--auth-mode login \
--query "[].{Nom:name, Bytes:properties.contentLength, Nivell:properties.blobTier}" \
--output tableFixa't en --content-type "application/pdf": sense ell, el navegador pot descarregar el fitxer en lloc de mostrar-lo. És un detall petit que genera moltes incidències de suport.
Consell de disseny del nom: 2026/08/IB3241-20260814-A7K2.pdf inclou any, mes, vol, data i localitzador. Aquest esquema permet llistar per període amb prefixos i aplicar regles de cicle de vida per carpeta. Un nom pla tipus tarjeta12345.pdf funciona igual de bé per llegir, però et deixa sense eines per gestionar el cicle de vida.
- Nivells d'accés: Hot, Cool, Cold i Archive
Aquí hi ha el mecanisme amb què Azure Storage s'abarateix de debò. Cada blob té un nivell d'accés que intercanvia cost d'emmagatzematge per cost i temps de recuperació.
| Nivell | Cost d'emmagatzematge | Cost d'accés | Permanència mínima | Disponibilitat | Ús previst |
|---|---|---|---|---|---|
| Hot | El més alt | El més baix | Cap | Immediata | Dades en ús actiu |
| Cool | ~50 % menys que Hot | Més gran per operació i per GB llegit | 30 dies | Immediata | Dades dels últims mesos, accés ocasional |
| Cold | Menor que Cool | Més gran que Cool | 90 dies | Immediata | Dades que gairebé no es toquen però han d'estar disponibles ja |
| Archive | El més baix, amb diferència | El més alt, i amb espera | 180 dies | Requereix rehidratació: d'1 a 15 hores | Retenció legal, còpies històriques |
Quatre regles que eviten ensurts:
- La permanència mínima es factura encara que esborris abans. Si puges un blob a Cool i l'esborres al cap de 3 dies, en pagues 30. Canviar de nivell massa aviat també compta com a esborrat anticipat.
- Archive no es llegeix. Un blob a Archive és fora de línia: cal rehidratar-lo (
az storage blob set-tier --rehydrate-priority High) i esperar hores. No serveix per a res que un client pugui demanar en calent. - El nivell s'aplica per blob, encara que el compte tingui un nivell predeterminat per als blobs nous.
- Baixar de nivell estalvia en emmagatzematge però encareix cada lectura. Si un fitxer es llegeix cada setmana, Cool pot sortir més car que Hot.
El patró d'ús de les targetes d'embarcament de Contoso, mesurat per en Diego Salas:
| Antiguitat de la targeta | Descàrregues | Nivell adequat |
|---|---|---|
| 0–7 dies (abans i durant el vol) | Molt alt: el passatger l'obre diverses vegades | Hot |
| 8–90 dies (reclamacions, justificants de despesa) | Baix però real | Cool |
| 91 dies – 5 anys (retenció legal i fiscal) | Gairebé nul | Archive |
| Més de 5 anys | Cap | Esborrar |
Aquest patró es tradueix directament en una regla de cicle de vida.
- Regles de cicle de vida: les targetes d'embarcament de Contoso
Una regla de cicle de vida (lifecycle management) és una política que Azure executa cada dia sobre els blobs del compte, movent-los de nivell o esborrant-los segons la seva antiguitat. És automàtica i gratuïta: només pagues les operacions que genera.
{
"rules": [
{
"enabled": true,
"name": "ciclo-tarjetas-embarque",
"type": "Lifecycle",
"definition": {
"filters": {
"blobTypes": [ "blockBlob" ],
"prefixMatch": [ "tarjetas-embarque/" ]
},
"actions": {
"baseBlob": {
"tierToCool": { "daysAfterModificationGreaterThan": 30 },
"tierToArchive": { "daysAfterModificationGreaterThan": 90 },
"delete": { "daysAfterModificationGreaterThan": 1825 }
},
"snapshot": {
"delete": { "daysAfterCreationGreaterThan": 90 }
}
}
}
}
]
}Lectura del document, apartat per apartat:
filters.blobTypes: només afecta els blobs en blocs (els de pàgines d'un disc no s'han de moure mai a Cool).filters.prefixMatch: el prefix comença pel nom del contenidor, no pel nom del blob. És l'error de sintaxi més freqüent d'aquestes regles.tierToCoolals 30 dies,tierToArchiveals 90,deleteals 1825 (5 anys): exactament la política de retenció de Contoso.snapshot.delete: les instantànies antigues també ocupen i es facturen.
Aplicació de la regla:
# Desa el JSON anterior com a ciclo-tarjetas.json i aplica'l al compte.
az storage account management-policy create \
--account-name sttarjetascontosopro \
--resource-group rg-contoso-reservas-pro \
--policy @ciclo-tarjetas.json \
--output none
# Comprovar la politica activa.
az storage account management-policy show \
--account-name sttarjetascontosopro \
--resource-group rg-contoso-reservas-pro \
--output jsonDues advertències operatives: la política triga fins a 24 hores a executar-se per primera vegada (no esperis veure el canvi en cinc minuts), i daysAfterModificationGreaterThan compta des de l'última modificació, no des de la creació. Si un procés reescriu els fitxers, el rellotge es reinicia i mai res no baixa de nivell.
- Azure Files: el recurs compartit de l'oficina
Azure Files ofereix recursos compartits de xarxa accessibles per SMB (el protocol de Windows, també admès a Linux i macOS) i per NFS (només en comptes premium). A diferència dels blobs, aquí sí que hi ha un sistema de fitxers real amb carpetes, permisos i bloqueig de fitxers.
Contoso té un cas clar: a les oficines de Barcelona i Palma hi ha un recurs compartit \\servidor-oficina\operaciones amb parts d'incidències, plantilles i fulls de càlcul que el personal de terra obre cada dia des de Windows. Aquest recurs es pot moure tal qual a Azure Files sense canviar la forma de treballar de ningú.
| Quan fer-lo servir | Blob Storage | Azure Files |
|---|---|---|
| Aplicació que puja i descarrega objectes per HTTPS | Sí | Es pot, però no és el natural |
| Recurs compartit muntat com a unitat de xarxa | No | Sí |
| Programari heretat que exigeix una ruta de sistema de fitxers | No | Sí |
| Milions d'objectes amb accés per URL | Sí | No |
| Cost per GB | Menor | Major |
# 1. Crear el recurs compartit amb quota de 100 GiB.
az storage share-rm create \
--resource-group rg-contoso-reservas-pro \
--storage-account stoperacionescontosopro \
--name compartido-operaciones \
--quota 100 \
--output table
# 2. Muntar-lo a Linux (el paquet cifs-utils ha d'estar instal·lat).
sudo mkdir -p /mnt/operaciones
sudo mount -t cifs \
//stoperacionescontosopro.file.core.windows.net/compartido-operaciones \
/mnt/operaciones \
-o vers=3.1.1,username=stoperacionescontosopro,password="${CLAU_COMPTE}",serverinoA Windows seria un net use Z: \\stoperacionescontosopro.file.core.windows.net\compartido-operaciones. Dues consideracions importants:
- El port 445 (SMB) està bloquejat per molts proveïdors d'internet domèstics i corporatius. Per això el muntatge des d'una oficina exigeix, a la pràctica, connectivitat privada: VPN o ExpressRoute. És just el que veurem a la lliçó 02-06.
- Existeix Azure File Sync, que manté sincronitzat un servidor de fitxers local amb el recurs d'Azure i deixa en local només els fitxers utilitzats recentment. És la via habitual per migrar un servidor de fitxers d'oficina sense canviar res per a l'usuari.
- Queue Storage: desacoblar l'emissió de targetes
Queue Storage és un servei de cues de missatges senzill: un productor deixa un missatge, un consumidor el recull i el processa. Missatges de fins a 64 KB, fins a milions en una cua, amb una semàntica d'«almenys un cop».
El cas de Contoso: quan un passatger compra un bitllet, generar el PDF de la targeta d'embarcament triga un parell de segons. Fer-ho dins de la petició web vol dir que el client espera; si el generador falla, la compra falla. Amb una cua, la web deixa un missatge i respon immediatament; un procés a part genera el PDF i el puja al contenidor.
# Crear la cua i encuar una sol·licitud d'emissio.
az storage queue create \
--account-name sttarjetascontosopro \
--name cola-emision-tarjetas \
--auth-mode login --output none
az storage message put \
--account-name sttarjetascontosopro \
--queue-name cola-emision-tarjetas \
--content '{"localitzador":"A7K2","vol":"IB3241","data":"2026-08-14"}' \
--auth-mode login --output noneQueue Storage és l'opció bàsica i barata. Quan calen temes de publicació i subscripció, sessions, transaccions, ordre garantit o missatges de més de 64 KB, la resposta és Azure Service Bus; i per a esdeveniments a gran escala, Event Grid i Event Hubs. Els tres es comparen a la lliçó 06-05; aquí n'hi ha prou que sàpigues que la cua existeix dins del compte d'emmagatzematge i per a què serveix.
- Table Storage i la seva relació amb Cosmos DB
Table Storage és un magatzem NoSQL de clau-valor amb esquema flexible. Cada entitat té:
- PartitionKey: agrupa entitats; determina el repartiment i el rendiment.
- RowKey: identifica l'entitat dins de la partició.
- Fins a 252 propietats més, sense esquema fix.
La seva virtut és el preu: emmagatzemar milions de files simples costa una fracció del que costaria una base relacional. El seu límit és la consulta: només és ràpida buscant per PartitionKey + RowKey. Qualsevol altra consulta recorre la taula.
az storage table create --account-name sttarjetascontosopro \
--name registroembarques --auth-mode login --output none
# Una entitat d'auditoria: particio per vol, fila per localitzador.
az storage entity insert \
--account-name sttarjetascontosopro \
--table-name registroembarques \
--entity PartitionKey=IB3241 RowKey=A7K2 \
emesa=2026-08-14T09:12:00Z porta=B14 \
--auth-mode login --output noneRelació amb Cosmos DB: Azure Cosmos DB for Table ofereix la mateixa API amb distribució global, latència garantida per SLA, índexs sobre totes les propietats i rendiment aprovisionat. És l'evolució natural quan Table Storage es queda curt. La comparació completa i quan fer el salt són a la lliçó 03-03.
Criteri ràpid: si la teva dada és una taula d'auditoria barata amb accés per clau, Table Storage. Si necessites consultes variades, latència garantida o presència global, Cosmos DB.
- Redundància: LRS, ZRS, GRS, GZRS i RA-GRS
Aquest és el cap solt que va deixar el mòdul 1. Azure Storage sempre guarda diverses còpies de les teves dades; el que tries és on són aquestes còpies, i això determina de quina fallada et protegeix.
| Opció | Còpies i ubicació | Protegeix de | Lectura a la regió secundària | Cost relatiu |
|---|---|---|---|---|
| LRS (local) | 3 còpies en un mateix centre de dades | Fallada de disc, bastidor o servidor | — | € |
| ZRS (zona) | 3 còpies en tres zones de la regió | Caiguda d'un centre de dades complet | — | €€ |
| GRS (geogràfica) | 3 còpies locals + 3 a la regió parella | Desastre regional | No (la secundària només es llegeix després de commutació) | €€ |
| GZRS (zona + geogràfica) | 3 zones a la principal + 3 locals a la parella | Caiguda de zona i desastre regional | No | €€€ |
| RA-GRS / RA-GZRS | Com GRS/GZRS, amb accés de lectura a la secundària | El mateix, i a més permet llegir a la secundària | Sí, per un punt de connexió -secondary |
€€€€ |
Detalls que cal conèixer abans de decidir:
- La regió parella de West Europe és North Europe (fixat a la lliçó 01-02). La replicació geogràfica és asíncrona: en un desastre pots perdre les últimes escriptures de minuts (l'anomenat punt de recuperació, RPO, d'uns 15 minuts).
- La commutació per error a la regió parella és una operació que s'inicia (
az storage account failover), no una cosa instantània i automàtica. - Amb RA-GRS pots llegir sempre de la secundària a
https://<compte>-secondary.blob.core.windows.net, però aquestes dades poden anar endarrerides. Serveix per a informes o lectures tolerants, no per donar una targeta d'embarcament acabada d'emetre. - La redundància es pot canviar després (
az storage account update --sku), encara que alguns salts (per exemple, a ZRS) poden requerir una migració sol·licitada.
La decisió de Contoso Airlines
| Compte | Entorn | Redundància | Justificació |
|---|---|---|---|
sttarjetascontosodev |
Desenvolupament | LRS (Standard_LRS) |
Les dades són llencívoles i regenerables. Pagar redundància geogràfica per fitxers de prova és llençar diners |
sttarjetascontosopro |
Producció | GZRS (Standard_GZRS) |
Les targetes d'embarcament són un document del passatger amb obligació de retenció. GZRS cobreix la caiguda d'una zona (política de Contoso) i el desastre regional |
stoperacionescontosopro |
Producció, fitxers d'oficina | ZRS (Standard_ZRS) |
Contingut operatiu important però reconstruïble des dels sistemes d'origen; n'hi ha prou amb la protecció zonal |
# Aplicar la decisio en produccio.
az storage account update \
--resource-group rg-contoso-reservas-pro \
--name sttarjetascontosopro \
--sku Standard_GZRS \
--output table
# Comprovar la redundancia de tots els comptes de la subscripcio.
az storage account list \
--query "[].{Compte:name, Redundancia:sku.name, Regio:location, Grup:resourceGroup}" \
--output tableI una advertència que cal dir en veu alta: la redundància no és una còpia de seguretat. GZRS replica fidelment els esborrats i les sobreescriptures. Si un procés esborra les targetes d'agost, s'esborren a les sis còpies alhora. Contra això protegeixen el versionatge i l'eliminació temporal de l'apartat 10, i Azure Backup a la lliçó 07-05.
- Seguretat d'accés: claus, SAS i identitats
Hi ha tres formes d'autoritzar l'accés a les dades, i estan ordenades de pitjor a millor.
Claus del compte
Cada compte té dues claus de 512 bits que donen control total sobre tot el contingut, sense caducitat i sense identitat associada.
# Veure les claus (i per que aixo t'hauria d'incomodar).
az storage account keys list \
--resource-group rg-contoso-reservas-dev \
--account-name sttarjetascontosodev \
--output table
# Rotar la clau primaria.
az storage account keys renew \
--resource-group rg-contoso-reservas-dev \
--account-name sttarjetascontosodev \
--key primary --output noneQue hi hagi dues claus és precisament per poder rotar sense talls: configures les aplicacions amb la secundària, renoves la primària, canvies les aplicacions i renoves la secundària. Tot i així, la recomanació és no fer-les servir: si una clau es filtra en un repositori, qualsevol llegeix i esborra tot. Les pots deshabilitar del tot:
az storage account update \
--resource-group rg-contoso-reservas-pro \
--name sttarjetascontosopro \
--allow-shared-key-access false --output noneSignatures d'accés compartit (SAS)
Una SAS és una URL amb permisos limitats i caducitat. És la forma de donar a un passatger accés a la seva targeta d'embarcament i a res més.
| Tipus de SAS | Com es signa | Abast | Revocació |
|---|---|---|---|
| De servei | Amb la clau del compte | Un recurs concret (un blob, un contenidor) | Rotant la clau o amb una directiva emmagatzemada |
| De compte | Amb la clau del compte | Diversos serveis i operacions de gestió | Rotant la clau |
| De delegació d'usuari | Amb una clau d'Entra ID, no amb la clau del compte | Blobs | Revocant la clau de delegació, sense tocar el compte |
La de delegació d'usuari és la recomanada: no requereix que l'aplicació conegui la clau del compte, queda associada a una identitat i es pot revocar sense trencar tota la resta.
# SAS de delegacio d'usuari: lectura d'un blob concret, valida 15 minuts.
CADUCITAT=$(date -u -d "15 minutes" '+%Y-%m-%dT%H:%MZ')
SAS=$(az storage blob generate-sas \
--account-name sttarjetascontosopro \
--container-name tarjetas-embarque \
--name "2026/08/IB3241-20260814-A7K2.pdf" \
--permissions r \
--expiry "${CADUCITAT}" \
--https-only \
--as-user --auth-mode login \
--full-uri --output tsv)
echo "Enllac temporal: ${SAS}"Desglossament de les opcions, perquè cadascuna és una decisió de seguretat:
| Opció | Efecte |
|---|---|
--permissions r |
Només lectura. Els permisos es componen amb lletres: r llegir, w escriure, d esborrar, l llistar, a afegir, c crear |
--expiry |
Caducitat. Curta sempre: minuts o hores, mai mesos |
--https-only |
L'URL no funciona per HTTP |
--as-user --auth-mode login |
SAS de delegació d'usuari, signada amb Entra ID i no amb la clau |
--full-uri |
Retorna l'URL completa llesta per lliurar |
Bones pràctiques de SAS que Contoso aplica: caducitat de 15 minuts per a descàrregues de passatger, permisos mínims, generació al servidor (mai al navegador), i directives d'accés emmagatzemades a nivell de contenidor quan cal poder revocar en massa.
Accés per identitat de Microsoft Entra ID
L'opció correcta perquè una aplicació accedeixi a les dades: sense claus, sense SAS, amb permisos RBAC concrets i auditoria.
# Donar a la web de reserves permis per escriure targetes, amb la seva identitat administrada.
ID_APP=$(az webapp identity assign \
--resource-group rg-contoso-reservas-pro \
--name app-contoso-reservas-pro \
--query principalId --output tsv)
ID_COMPTE=$(az storage account show \
--resource-group rg-contoso-reservas-pro \
--name sttarjetascontosopro --query id --output tsv)
az role assignment create \
--assignee "${ID_APP}" \
--role "Storage Blob Data Contributor" \
--scope "${ID_COMPTE}" --output noneEls rols de dades més utilitzats: Storage Blob Data Reader (llegir), Storage Blob Data Contributor (llegir i escriure) i Storage Blob Data Owner (a més, gestionar permisos POSIX). Compte amb una confusió clàssica: el rol Col·laborador d'Azure permet gestionar el compte, però no dona accés a les dades llevat que sigui a través de les claus. Identitats administrades i RBAC es desenvolupen a la lliçó 04-02.
- Xifratge, versionatge, instantànies i eliminació temporal
Xifratge en repòs: tot el que hi ha a Azure Storage es xifra amb AES de 256 bits, sempre i sense cost. Pots fer servir claus gestionades per Microsoft (per defecte) o claus pròpies a Key Vault (04-03) quan el compliment normatiu ho exigeixi.
Xifratge en trànsit: --https-only true i --min-tls-version TLS1_2, ja aplicats al compte de Contoso des del mòdul 1.
Protecció contra l'esborrat, que és el que la redundància no cobreix:
COMPTE="sttarjetascontosopro"
GRUP="rg-contoso-reservas-pro"
# 1. Eliminacio temporal de blobs: 30 dies per recuperar el que s'ha esborrat.
az storage account blob-service-properties update \
--account-name "${COMPTE}" --resource-group "${GRUP}" \
--enable-delete-retention true --delete-retention-days 30 --output none
# 2. Eliminacio temporal de contenidors sencers.
az storage account blob-service-properties update \
--account-name "${COMPTE}" --resource-group "${GRUP}" \
--enable-container-delete-retention true --container-delete-retention-days 30 --output none
# 3. Versionatge: cada sobreescriptura conserva la versio anterior.
az storage account blob-service-properties update \
--account-name "${COMPTE}" --resource-group "${GRUP}" \
--enable-versioning true --output none| Mecanisme | De què protegeix | Cost |
|---|---|---|
| Eliminació temporal | Esborrat accidental de blobs o contenidors | Es factura l'espai del que s'ha esborrat durant la retenció |
| Versionatge | Sobreescriptura accidental o xifratge per ransomware | Cada versió ocupa i es factura: combina-ho amb cicle de vida |
| Instantànies | Punt de retorn manual abans d'un canvi | Només els blocs modificats |
| Bloqueig immutable (WORM) | Manipulació deliberada; compliment legal | El blob no es pot esborrar ni modificar durant el període fixat |
Contoso activa eliminació temporal de 30 dies i versionatge en producció, i afegeix a la regla de cicle de vida l'esborrat de versions antigues perquè el versionatge no dispari la factura.
- Eines:
az storage, AzCopy i Storage Explorer
az storage, AzCopy i Storage Explorer| Eina | Quan fer-la servir | Fortalesa |
|---|---|---|
az storage (Azure CLI) |
Automatització, scripts, canalitzacions | Ja la tens instal·lada; s'integra amb la resta d'ordres |
| AzCopy | Transferències massives i sincronització | Molt més ràpid: paral·lelitza, reprèn transferències i sincronitza |
| Azure Storage Explorer | Exploració visual i depuració | Interfície gràfica multiplataforma, molt útil per veure què hi ha realment |
| SDK (Java, .NET, Python, JS) | Des del codi de l'aplicació | Reintents, fluxos i autenticació per identitat integrats |
# AzCopy amb inici de sessio d'Entra ID (sense claus).
azcopy login
# Copiar un directori complet de targetes historiques, recursiu.
azcopy copy "./targetes-2025/" \
"https://sttarjetascontosopro.blob.core.windows.net/tarjetas-embarque/2025/" \
--recursive=true
# Sincronitzar: nomes puja el que ha canviat. Ideal per a migracions repetides.
azcopy sync "./targetes-2025/" \
"https://sttarjetascontosopro.blob.core.windows.net/tarjetas-embarque/2025/" \
--recursive=true --delete-destination=falseRegla pràctica: per moure més d'uns quants centenars de megabytes o més d'uns quants centenars de fitxers, AzCopy. az storage blob upload-batch funciona, però és notablement més lent.
- Exemple complet: la targeta d'embarcament de principi a fi
Aquest script reuneix tot l'anterior en el flux real de Contoso: preparar el compte amb la redundància decidida, pujar la targeta, lliurar un enllaç temporal al passatger i programar l'abaratiment automàtic.
#!/usr/bin/env bash
set -euo pipefail
# ---------- Parametres ----------
GRUP="rg-contoso-reservas-dev"
COMPTE="sttarjetascontosodev"
CONTENIDOR="tarjetas-embarque"
LOCALITZADOR="A7K2"
VOL="IB3241"
DATA="2026-08-14"
BLOB="$(date -d "${DATA}" '+%Y/%m')/${VOL}-$(date -d "${DATA}" '+%Y%m%d')-${LOCALITZADOR}.pdf"
# ---------- 1. Contenidor privat (idempotent) ----------
az storage container create \
--account-name "${COMPTE}" --name "${CONTENIDOR}" \
--public-access off --auth-mode login --output none
# ---------- 2. Pujar la targeta amb el seu tipus de contingut ----------
az storage blob upload \
--account-name "${COMPTE}" --container-name "${CONTENIDOR}" \
--name "${BLOB}" --file "./targeta-${LOCALITZADOR}.pdf" \
--content-type "application/pdf" \
--content-disposition "inline; filename=\"targeta-${VOL}.pdf\"" \
--tier Hot \
--auth-mode login --overwrite --output none
echo "Targeta pujada com a ${BLOB}"
# ---------- 3. Enllac temporal per al passatger (15 minuts, nomes lectura) ----------
CADUCITAT=$(date -u -d "15 minutes" '+%Y-%m-%dT%H:%MZ')
ENLLAC=$(az storage blob generate-sas \
--account-name "${COMPTE}" --container-name "${CONTENIDOR}" --name "${BLOB}" \
--permissions r --expiry "${CADUCITAT}" --https-only \
--as-user --auth-mode login --full-uri --output tsv)
echo "Enllac per al passatger (caduca ${CADUCITAT}): ${ENLLAC}"
# ---------- 4. Regla de cicle de vida: Cool als 30 dies ----------
cat > ciclo-tarjetas.json <<'EOF'
{
"rules": [
{
"enabled": true,
"name": "ciclo-tarjetas-embarque",
"type": "Lifecycle",
"definition": {
"filters": { "blobTypes": ["blockBlob"], "prefixMatch": ["tarjetas-embarque/"] },
"actions": {
"baseBlob": {
"tierToCool": { "daysAfterModificationGreaterThan": 30 },
"tierToArchive": { "daysAfterModificationGreaterThan": 90 },
"delete": { "daysAfterModificationGreaterThan": 1825 }
}
}
}
}
]
}
EOF
az storage account management-policy create \
--account-name "${COMPTE}" --resource-group "${GRUP}" \
--policy @ciclo-tarjetas.json --output none
echo "Politica de cicle de vida aplicada."
# ---------- 5. Verificacio ----------
az storage blob show \
--account-name "${COMPTE}" --container-name "${CONTENIDOR}" --name "${BLOB}" \
--auth-mode login \
--query "{Nom:name, Nivell:properties.blobTier, Bytes:properties.contentLength, Tipus:properties.contentSettings.contentType}" \
--output tableProva l'enllaç amb curl -I "${ENLLAC}": ha de retornar HTTP/1.1 200 OK. Espera que caduqui i repeteix-ho: obtindràs un 403 amb el codi AuthenticationFailed. Aquesta és exactament la protecció que busquem: l'enllaç serveix per descarregar la targeta ara, no per sempre.
- Neteja
# Esborrar els blobs de prova d'un prefix.
az storage blob delete-batch \
--account-name sttarjetascontosodev \
--source tarjetas-embarque \
--pattern "2026/08/*" \
--auth-mode login
# Treure la politica de cicle de vida si nomes era una prova.
az storage account management-policy delete \
--account-name sttarjetascontosodev \
--resource-group rg-contoso-reservas-dev
# Esborrar el compte sencer (nomes en laboratori).
# az storage account delete --name sttarjetascontosodev \
# --resource-group rg-contoso-reservas-dev --yesRecorda: amb l'eliminació temporal activada, els blobs esborrats continuen ocupant i facturant durant els dies de retenció. És el correcte per a producció, però tingues-ho en compte en netejar un laboratori.
Errors Comuns i Consells
- Repartir la clau del compte per donar accés a un fitxer. Dona control total sobre tot. Fes servir SAS de delegació d'usuari amb caducitat curta, o identitats administrades.
- Generar SAS amb caducitat de mesos o anys. Una URL amb un any de vida acaba en un correu, en un tiquet i en un cercador. Minuts, no mesos.
- Pujar a Archive el que un client pot demanar avui. Archive és fora de línia: rehidratar triga hores. Mai per a targetes del vol de demà.
- Oblidar la permanència mínima. Moure a Cool i esborrar al cap de tres dies costa els 30 dies complets. Ajusta la política a la realitat de les teves dades.
- Confondre redundància amb còpia de seguretat. GZRS replica els esborrats fidelment. Activa eliminació temporal i versionatge.
- Posar malament el
prefixMatchde la regla de cicle de vida. Comença pel nom del contenidor, no pel del blob. És l'errada més habitual i silenciosa: la regla no falla, simplement no fa res. - Esperar que la regla actuï a l'instant. S'executa cada dia i el primer cop pot trigar 24 hores.
- No posar el
content-typeen pujar. El PDF es descarrega en lloc de veure's; després arriben les incidències de suport. - Fer servir Azure Files on n'hi ha prou amb blobs. Files costa més per GB i afegeix dependència del port 445.
- Activar versionatge sense cicle de vida. Cada sobreescriptura crea una versió que es factura per sempre. Combina sempre totes dues coses.
- Consell: activa
--allow-shared-key-access falseen producció. Força que tot l'accés sigui per Entra ID i elimina de cop la classe sencera d'incidents per clau filtrada. - Consell: dissenya el nom del blob amb jerarquia per data (
aaaa/mm/). Et dona llistats per prefix i polítiques de cicle de vida per període pràcticament de franc.
Exercicis
Exercici 1: triar servei, nivell i redundància
Per a cada dada de Contoso Airlines, indica quin servei del compte d'emmagatzematge faries servir, quin nivell d'accés i quina redundància, amb la seva justificació:
- Targetes d'embarcament en PDF de producció, retenció legal de 5 anys.
- Plantilles i fulls de càlcul que el personal de terra de Palma obre des de l'explorador de Windows.
- Sol·licituds d'emissió de targeta pendents de processar pel generador de PDF.
- Registre d'auditoria de cada emissió: quin vol, quin localitzador, a quina hora, per consultar per vol.
- Còpies dels fitxers de prova que en Diego regenera cada setmana.
Exercici 2: enllaç temporal i cicle de vida
- Puja un fitxer de prova a
tarjetas-embarqueal compte de desenvolupament amb el tipus de contingut correcte. - Genera una SAS de delegació d'usuari, només de lectura, vàlida 10 minuts i només per HTTPS.
- Verifica amb
curlque funciona, i explica quina resposta esperes quan caduqui. - Escriu la política de cicle de vida que mogui a Cool als 30 dies, a Archive als 90 i esborri als 5 anys.
Exercici 3: auditoria d'emmagatzematge
Escriu les ordres d'Azure CLI que responguin a aquestes preguntes sobre la subscripció:
- Quins comptes d'emmagatzematge hi ha i amb quina redundància?
- Algun permet accés públic a blobs o admet claus compartides?
- Algun accepta TLS per sota d'1.2?
- Quins comptes de producció no tenen política de cicle de vida?
Solucions
Solució 1:
| Dada | Servei | Nivell | Redundància | Justificació |
|---|---|---|---|---|
| 1. Targetes de producció | Blob (en blocs) | Hot → Cool (30 d) → Archive (90 d) | GZRS | Document del passatger amb retenció legal: protecció zonal i geogràfica; el cicle de vida abarateix la retenció llarga |
| 2. Plantilles de l'oficina | File (SMB) | — | ZRS | Necessita muntar-se com a unitat de xarxa des de Windows; contingut reconstruïble, n'hi ha prou amb la protecció zonal |
| 3. Sol·licituds pendents | Queue | — | La del compte (ZRS/GZRS) | Missatges efímers que desacoblen la web del generador de PDF |
| 4. Registre d'auditoria per vol | Table | — | La del compte | Clau-valor barat: PartitionKey = vol, RowKey = localitzador, que és just el patró de consulta |
| 5. Fitxers de prova d'en Diego | Blob | Hot | LRS | Dades llencívoles i regenerables: la redundància geogràfica seria despesa pura |
Solució 2:
#!/usr/bin/env bash
set -euo pipefail
COMPTE="sttarjetascontosodev"
CONTENIDOR="tarjetas-embarque"
BLOB="2026/08/PROVA-20260814-TEST.pdf"
# 1. Pujada amb tipus de contingut correcte.
az storage blob upload \
--account-name "${COMPTE}" --container-name "${CONTENIDOR}" \
--name "${BLOB}" --file ./prova.pdf \
--content-type "application/pdf" \
--auth-mode login --overwrite --output none
# 2. SAS de delegacio d'usuari, lectura, 10 minuts, nomes HTTPS.
CADUCITAT=$(date -u -d "10 minutes" '+%Y-%m-%dT%H:%MZ')
ENLLAC=$(az storage blob generate-sas \
--account-name "${COMPTE}" --container-name "${CONTENIDOR}" --name "${BLOB}" \
--permissions r --expiry "${CADUCITAT}" --https-only \
--as-user --auth-mode login --full-uri --output tsv)
# 3. Verificacio.
curl -I "${ENLLAC}" # Esperat ara: HTTP/1.1 200 OK-
Un cop passats els 10 minuts, la mateixa URL retorna
HTTP/1.1 403 Forbiddenamb el codi d'errorAuthenticationFailed: la signatura inclou la caducitat i el servei la valida a cada petició. No cal esborrar ni revocar res. -
Política:
{
"rules": [{
"enabled": true,
"name": "ciclo-tarjetas-embarque",
"type": "Lifecycle",
"definition": {
"filters": { "blobTypes": ["blockBlob"], "prefixMatch": ["tarjetas-embarque/"] },
"actions": {
"baseBlob": {
"tierToCool": { "daysAfterModificationGreaterThan": 30 },
"tierToArchive": { "daysAfterModificationGreaterThan": 90 },
"delete": { "daysAfterModificationGreaterThan": 1825 }
}
}
}
}]
}Solució 3:
# 1. Comptes i redundancia.
az storage account list \
--query "[].{Compte:name, Redundancia:sku.name, Regio:location, Grup:resourceGroup}" \
--output table
# 2. Acces public a blobs o claus compartides permeses.
az storage account list \
--query "[?allowBlobPublicAccess==\`true\` || allowSharedKeyAccess==\`true\`].{Compte:name, Public:allowBlobPublicAccess, ClauCompartida:allowSharedKeyAccess}" \
--output table
# 3. TLS per sota d'1.2.
az storage account list \
--query "[?minimumTlsVersion!='TLS1_2'].{Compte:name, TLS:minimumTlsVersion}" \
--output table
# 4. Comptes de produccio sense politica de cicle de vida (bucle, perque
# la politica es un subrecurs i no apareix a la llista de comptes).
for COMPTE in $(az storage account list \
--query "[?tags.entorno=='produccion'].name" -o tsv); do
GRUP=$(az storage account show -n "${COMPTE}" --query resourceGroup -o tsv)
if ! az storage account management-policy show \
--account-name "${COMPTE}" --resource-group "${GRUP}" \
--output none 2>/dev/null; then
echo "SENSE POLITICA DE CICLE DE VIDA: ${COMPTE} (${GRUP})"
fi
doneAl mòdul 4 veuràs com convertir aquestes comprovacions en Azure Policy perquè no depenguin que algú se'n recordi d'executar-les.
Conclusió
Has tancat el cap solt que va deixar el mòdul 1 i, de passada, has après el servei de dades més transversal d'Azure. Saps que un compte d'emmagatzematge allotja quatre serveis —Blob, File, Queue i Table— amb el seu propi punt de connexió i el seu nom globalment únic en minúscules. Coneixes Blob Storage en detall: contenidors, la jerarquia plana amb prefixos, els tres tipus de blob i els nivells d'accés Hot, Cool, Cold i Archive amb el seu compromís entre cost d'emmagatzematge i de recuperació, les permanències mínimes i la rehidratació d'Archive. Has traduït el patró real d'ús de les targetes d'embarcament de Contoso —molt la primera setmana, gairebé res després— en una regla de cicle de vida que les abarateix sola. Saps quan té sentit Azure Files per al recurs compartit de l'oficina, per a què serveix Queue Storage com a desacoblador i quina relació té Table Storage amb Cosmos DB. I has fixat la decisió de redundància de Contoso: LRS en desenvolupament, GZRS per a les targetes de producció i ZRS per als fitxers d'operacions, amb l'advertència essencial que la redundància no és una còpia de seguretat, per a la qual cosa has activat eliminació temporal i versionatge. En seguretat d'accés, has baixat per l'escala del dolent al bo: claus de compte (evitar i deshabilitar), SAS de servei, de compte i de delegació d'usuari amb caducitat curta, i accés per identitat de Microsoft Entra ID, que és la destinació final.
Fixa't en el que ja tens muntat: còmput elàstic, aplicacions publicades i emmagatzematge amb la seva política de cicle de vida. Però tot això, tal com està, parla per internet. La web arriba a l'API pel seu nom públic, l'aplicació arriba a l'emmagatzematge pel seu punt de connexió públic, i la base de dades que ve al mòdul 3 estaria igual d'exposada. Cap arquitectura seriosa no es queda així.
A la lliçó següent, Xarxes a Azure: xarxes virtuals, subxarxes i NSG, fem aquest pas: planificaràs l'espai d'adreces de vnet-contoso-pro amb l'aritmètica CIDR explicada des de zero, dissenyaràs les subxarxes snet-web, snet-app, snet-datos i snet-gestion, escriuràs regles de grups de seguretat de xarxa que obrin només l'imprescindible, entendràs l'aparellament de xarxes i el patró hub-and-spoke, i veuràs la diferència decisiva entre punts de connexió de servei i Azure Private Link —que és exactament el que farà que el compte sttarjetascontosopro i la base de dades de reserves deixin de ser accessibles des d'internet.
Curs d'Azure
Mòdul 1: Introducció a Azure
- Què és Azure?
- Models de servei, regions i zones de disponibilitat
- Crear i configurar el teu compte d'Azure
- Recorregut pel portal d'Azure
- Azure Resource Manager: subscripcions, grups de recursos i etiquetes
- Azure CLI, PowerShell i Cloud Shell
Mòdul 2: Serveis principals d'Azure
- Màquines virtuals d'Azure
- Escalat i alta disponibilitat del còmput
- Azure App Service
- Azure Storage: blobs, fitxers, cues i taules
- Xarxes a Azure: xarxes virtuals, subxarxes i NSG
- Connectivitat híbrida i lliurament global
Mòdul 3: Bases de dades d'Azure
- Triar el servei de dades adequat
- Azure SQL Database
- Azure Cosmos DB
- Azure Database for MySQL
- Azure Database for PostgreSQL
- Analítica de dades: Data Lake, Data Factory i Synapse
Mòdul 4: Seguretat a Azure
- Microsoft Entra ID i gestió d'identitats
- RBAC i identitats administrades
- Azure Key Vault
- Protecció DDoS i tallafoc d'aplicacions web
- Microsoft Defender for Cloud
- Governança i compliment amb Azure Policy
Mòdul 5: Azure DevOps
- Introducció a Azure DevOps
- Azure Repos
- Azure Pipelines: integració contínua
- Desplegament continu amb entorns i aprovacions
- Azure Artifacts
- Infraestructura com a codi amb Bicep
Mòdul 6: Serveis avançats d'Azure
- Contenidors a Azure: Container Registry i Container Apps
- Azure Kubernetes Service (AKS)
- Azure Functions
- Azure Logic Apps
- Missatgeria i esdeveniments: Service Bus, Event Grid i Event Hubs
- Serveis d'IA d'Azure
Mòdul 7: Monitoratge i gestió
- Azure Monitor: mètriques, alertes i taulers
- Log Analytics i consultes KQL
- Application Insights
- Azure Automation i runbooks
- Còpies de seguretat i recuperació davant desastres
Mòdul 8: Gestió i optimització de costos
- Calculadora de preus i estimació de costos
- Azure Cost Management: anàlisi, pressupostos i alertes
- Reserves, plans d'estalvi i Azure Hybrid Benefit
- Azure Advisor
- Estratègies d'optimització i cultura FinOps
