Schnell und unkompliziert Daten hochladen und mit externen Usern teilen? Wer kennt diesen Wunsch nicht, doch oft scheitert diese simple Anforderung bereits an fehlender Infrastruktur, Berechtigungen oder an der Grösse der zu speichernden Daten. Über Morpheus können User der ETH nun unkompliziert ihren Cloud Speicher provisionieren.
Azure Storage bietet vier unterschiedliche Speichertypen an: Blob, File Share, Tables und Queues. Tables und Queues interessieren uns bei diesem Offering nicht, weshalb wir uns auf die Typen Blob und File Share konzentrieren.
Azure Blob Storage ist ein binärer Objektspeicher, in dem Dateien aller Formate und Grösse abgelegt werden können. Der Storage eignet sich sowohl als Data Lake wie auch als Backup oder Archivspeicher.
Azure File Share kann als externes Laufwerk über SMB (Port 445) gemappt werden, sofern der Port in der Firewall geöffnet ist. Die Vorteile dieser Variante liegen auf dem optimierten Zugriff, weshalb sich dieser Speicher besser für den Datenaustausch eignet.
Alle hochgeladenen Daten werden 256-Bit AES verschlüsselt und entsprechen den FIPS 140-2 Vorgaben.
Das ETHZ Azure Blob Storage Item basiert auf einem Terraform Skript (IaC) und einer Morpheus seitigen Userkonfiguration, während des Deployments.
Storage Name: Der Name des Azure Storage Accounts. Dieser Name muss eindeutig innerhalb von Azure sein, da er als URL verwendet wird. Für den Namen sind nur lowercase alphanumerische Zeichen zulässig.
Allow Large Files 100TB: Wenn enabled erhöht sich die Storagekapazität des File Share auf 100TiB – Default sind 5TiB.
Public Access: Soll der Storage von aussen erreichbar sein, sprich sollen die Daten geshared werden können.
Location: Speicherplatz des Azure Storage Accounts. Default Switzerland North.
Bei der Provisionierung der Instanz werden die User Inputs in den Terraform Script eingelesen und der Storage Account entsprechend deployed.
Creating Storage Account
resource "azurerm_storage_account" "example" { name = "${var.storName}${split("_", var.resgrp)[2]}" resource_group_name = var.resgrp location = var.location account_tier = "Standard" account_replication_type = "LRS" account_kind = "StorageV2" access_tier = local.storageType cross_tenant_replication_enabled = "false" large_file_share_enabled = var.storLargeFileShare == "on" public_network_access_enabled = var.storPublicAcc == "on" allow_nested_items_to_be_public = var.storPublicAcc == "on"
blob_properties {
versioning_enabled = false
delete_retention_policy {
days = local.retentionDays
}
}
queue_properties {
logging {
delete = true
read = true
write = true
version = "2.0"
retention_policy_days = local.retentionDays
}
}
}
Es werden sowohl ein Blob Container wie auch File Share angelegt. Somit kann der Benutzer selber entscheiden, welche Variante er verwenden möchte.
resource "azurerm_storage_container" "example" { name = "content" storage_account_name = azurerm_storage_account.example.name container_access_type = "private" }
resource "azurerm_storage_share" "example" { name = "share1" storage_account_name = azurerm_storage_account.example.name access_tier = local.storageType quota =var.storLargeFileShare == "on" ? 102400 : 5120 }
Einige Parameter stehen nicht über die Morpheus Konfiguration nicht zur Verfügung, sondern werden ausschliesslich in Terraform gesetzt. So ist der Storage Type aktuell per default auf “Cool” gesetzt, was für hoch verfügbare Daten preislich ein Nachteil sein könnte. Dieser Parameter kann aber später in die Morpheus Konfiguration übernommen werden und durch den User ausgewählt werden, oder man erstellt ein eigenes Storage Item, dass explizit auf die Bedürfnisse von Zugriffen auf hoch verfügbare Daten ausgelegt ist.
Lokale TF variablen
locals {
secretExprInYear = 1
retentionDays = 30
storageType = "Cool"
urlProtocol = "https://"
}
Des weiteren wird hier auch die Gültigkeit der Storage Access Signature auf 1 Jahr festgelegt. Nach diesem Jahr erlischt das Zugriffstoken und eine neue SAS muss erstellt werden, damit User weiterhin auf die Daten zugreifen können.
SAS Policy
resource "time_offset" "example" {
offset_years = local.secretExprInYear
}
data "azurerm_storage_account_sas" "example" {
connection_string = azurerm_storage_account.example.primary_connection_string
https_only = true
signed_version = "2017-07-29"
resource_types {
service = false
container = false
object = true
}
services {
blob = true
queue = false
table = false
file = true
}
start = timestamp()
expiry = time_offset.example.rfc3339
permissions {
read = true
write = false
delete = false
list = false
add = false
create = false
update = false
process = false
tag = false
filter = false
}
}
Download MS Azure Storage Explorer und connecte mit dem deployten Azure Storage Account.
Oder sende den Link zur entsprechenden Datei / Ordner inklusive SAS Token den gewünschten Kollegen zu. Dazu gilt folgendes Pattern:
Die Variablen können dem Output des Morpheus Terraform Deployments entnommen werden.