Cloud Service Center

Sharing Data with Azure Storage

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

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.

 

Morpheus

Morpheus ist eine Multicloud Provisionierungsplattform, welche die ETH einsetzt, um ihren Usern den einfachen Zugriff auf massgeschneiderte Cloud Applikation zu ermöglichen. 

ETHZ Azure Blob Storage

Das ETHZ Azure Blob Storage Item basiert auf einem Terraform Skript (IaC) und einer Morpheus seitigen Userkonfiguration, während des Deployments.  

Morpheus User Parameter

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
   }
}

Access deployed Storage Account

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:

  • Blob: <storage_blob_url><filename.png><sas_token>
  • Share: <storage_share_url><filename.png><sas_token>

Die Variablen können dem Output des Morpheus Terraform Deployments entnommen werden.

Leave a Reply

Your email address will not be published. Required fields are marked *