Azure Storage Accounts, Microsoft Azure içinde çeşitli veri türleri için ölçeklenebilir, güvenli ve yüksek kullanılabilirlikli bulut depolama sağlayan temel servislerdir; buna blobs (binary large objects), files, queues ve tables dahildir. Bu farklı storage servislerini tek bir namespace altında gruplandıran konteynerler olarak hizmet verirler ve yönetimi kolaylaştırır.
Temel yapılandırma seçenekleri:
Her storage account’ın Azure genelinde benzersiz bir isme sahip olması gerekir.
Her storage account bir region veya bir Azure extended zone içinde dağıtılır.
Daha iyi performans için storage account’ın premium sürümünü seçmek mümkündür.
Rack, drive ve datacenter arızalarına karşı koruma için 4 farklı redundancy türünden birini seçmek mümkündür.
Güvenlik yapılandırma seçenekleri:
Require secure transfer for REST API operations: Storage ile tüm iletişimde TLS gerektirir.
Allows enabling anonymous access on individual containers: Eğer etkinleştirilmezse, gelecekte anonim erişim etkinleştirilemez.
Enable storage account key access: Eğer kapalıysa, Shared Keys ile erişim yasaklanır.
Minimum TLS version
Permitted scope for copy operations: Herhangi bir storage account’tan, aynı Entra tenant’ındaki herhangi bir storage account’tan veya aynı virtual network’te private endpoints olan storage account’tan izin verir.
Blob Storage seçenekleri:
Allow cross-tenant replication
Access tier: Hot (sık erişilen veriler), Cool ve Cold (nadiren erişilen veriler)
Ağ seçenekleri:
Network access:
Tüm network’lerden izin ver
Seçili virtual networks ve IP adreslerinden izin ver
Public erişimi devre dışı bırak ve private erişim kullan
Private endpoints: Virtual network’ten storage account’a özel bir bağlantıya izin verir.
Veri koruma seçenekleri:
Point-in-time restore for containers: Container’ları önceki bir duruma geri yüklemeye izin verir.
Bu, versioning, change feed ve blob soft delete’in etkinleştirilmesini gerektirir.
Enable soft delete for blobs: Silinmiş blob’lar için (üstüne yazılmış olsa bile) gün cinsinden saklama süresi sağlar.
Enable soft delete for containers: Silinmiş container’lar için gün cinsinden saklama süresi sağlar.
Enable soft delete for file shares: Silinmiş file share’ler için gün cinsinden saklama süresi sağlar.
Enable versioning for blobs: Blob’larınızın önceki versiyonlarını korur.
Enable version-level immutability support: Hesap düzeyinde tüm blob versiyonlarına uygulanacak zaman tabanlı bir saklama politikası belirlemenize izin verir.
Version-level immutability support ile point-in-time restore for containers aynı anda etkinleştirilemez.
Şifreleme yapılandırma seçenekleri:
Encryption type: Microsoft-managed keys (MMK) veya Customer-managed keys (CMK) kullanılabilir.
Enable infrastructure encryption: Verinin “daha fazla güvenlik” için çift şifrelenmesine izin verir.
Static websites özel $web container’ından, bölge-özgü bir endpoint (örn. https://<account>.z13.web.core.windows.net/) üzerinden servis edilir.
$web container blob API aracılığıyla publicAccess: null raporlayabilir, ancak dosyalar static site endpoint’i üzerinden yine de erişilebilir olduğundan, config/IaC artifaktlarını buraya bırakmak can leak secrets.
Hızlı denetim iş akışı:
# Identify storage accounts with static website hosting enabled
az storage blob service-properties show --account-name <acc-name> --auth-mode login
# Enumerate containers (including $web) and their public flags
az storage container list --account-name <acc-name> --auth-mode login
# List files served by the static site even when publicAccess is null
az storage blob list --container-name '$web' --account-name <acc-name> --auth-mode login
# 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 <acc-name> --auth-mode login
Veri açığa çıkarabilecek storage account’ları bulun: az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'. Eğer allowBlobPublicAccessfalse ise container’ları public yapamazsınız.
Riskli account’ları inceleyin bayrağı ve diğer zayıf ayarları doğrulamak için: az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'.
Flag etkin olan hesaplarda container düzeyindeki maruziyeti listeleyin:
az storage container list --account-name <acc> \
--query '[].{name:name, access:properties.publicAccess}'
"Blob": anonim okumaya izin verilir sadece blob adı bilindiğinde (listeleme yok).
"Container": her blob için anonim listeleme + okuma.
null: özel; kimlik doğrulama gerekli.
Kimlik bilgisi olmadan erişimi kanıtlayın:
Eğer publicAccessContainer ise, anonim listeleme çalışır: curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list".
Hem Blob hem Container için, blob adı bilindiğinde anonim blob indirme çalışır:
az storage blob download -c <container> -n <blob> --account-name <acc> --file /dev/stdout
# or via raw HTTP
curl "https://<acc>.blob.core.windows.net/<container>/<blob>"
Erişim anahtarları ile imzalanmış generate Shared Keys oluşturmak mümkündür; bunlar imzalı bir URL aracılığıyla belirli kaynaklara erişimi yetkilendirmek için kullanılır.
Note
Dikkat: CanonicalizedResource kısmı storage servisinin kaynağını (URI) temsil eder. URL’deki herhangi bir kısım encode edilmişse, CanonicalizedResource içinde de encode edilmiş olmalıdır.
Note
Bu, istekleri doğrulamak için varsayılan olarak az cli tarafından kullanılır. az’ın Entra ID principal kimlik bilgilerini kullanmasını sağlamak için --auth-mode login parametresini belirtin.
Aşağıdaki bilgileri imzalayarak blob, queue ve file servisleri için shared key oluşturmak mümkündür:
Shared Access Signatures (SAS), hesabın erişim anahtarlarını açığa çıkarmadan Azure Storage hesabındaki kaynaklara erişim için belirli izinler veren güvenli, süreli URL’lerdir. Erişim anahtarları tüm kaynaklara tam yönetici erişimi sağlarken, SAS izinleri (ör. read veya write) belirleyerek ve bir sona erme zamanı tanımlayarak ayrıntılı kontrol sağlar.
User delegation SAS: Bu, SAS’i imzalayacak ve kullanıcının izinlerini SAS’e devredecek bir Entra ID principal’inden oluşturulur. Sadece blob and data lake storage ile kullanılabilir (docs). Oluşturulan tüm user delegated SAS’leri revoke etmek mümkündür.
Kullanıcının sahip olduğu izinlerden “daha fazla” izinle bir delegation SAS oluşturmak mümkün olsa bile, principal bu izinlere sahip değilse çalışmaz (no privesc).
Service SAS: Bu, storage account’un bir access key’i kullanılarak imzalanır. Tek bir storage service içindeki belirli kaynaklara erişim vermek için kullanılabilir. Eğer anahtar yenilenirse, SAS çalışmayı durdurur.
Account SAS: Bu da storage account’un bir access key ile imzalanır. Bir storage account servisleri (Blob, Queue, Table, File) genelinde kaynaklara erişim verir ve service-seviyesinde işlemleri içerebilir.
Bir access key ile imzalanmış bir SAS URL’si şöyle görünür:
Azure Blob Storage artık SSH File Transfer Protocol (SFTP) desteği sunar; bu sayede özel çözümler veya üçüncü taraf ürünler gerektirmeden doğrudan Blob Storage’a güvenli dosya transferi ve yönetim yapılabilir.
Protocol Support: SFTP, hierarchical namespace (HNS) ile yapılandırılmış Blob Storage hesaplarıyla çalışır. Bu, blob’ları daha kolay gezinme için dizinlere ve alt dizinlere organize eder.
Security: SFTP kimlik doğrulaması için local user identities kullanır ve RBAC veya ABAC ile entegre olmaz. Her local user şu yollarla kimlik doğrulayabilir:
Azure-generated passwords
Public-private SSH key pairs
Granular Permissions: Read, Write, Delete ve List gibi izinler local kullanıcılarına 100 adede kadar container için atanabilir.
Networking Considerations: SFTP bağlantıları port 22 üzerinden yapılır. Azure, SFTP trafiğini güvence altına almak için firewalls, private endpoints veya virtual networks gibi ağ yapılandırmalarını destekler.
Supported Encryption: Microsoft Security Development Lifecycle (SDL) tarafından onaylı kriptografik algoritmalar gerektirir (ör. rsa-sha2-256, ecdsa-sha2-nistp256).
SFTP Configuration:
Enable SFTP on the storage account.
Create local user identities with appropriate permissions.
Configure home directories for users to define their starting location within the container.
az storage blob show –account-name –container-name –sas-token ‘se=2024-12-31T23%3A59%3A00Z&sp=racwdxyltfmei&sv=2022-11-02&sr=c&sig=ym%2Bu%2BQp5qqrPotIK5/rrm7EMMxZRwF/hMWLfK1VWy6E%3D’ –name ‘asd.txt’