AWS Türkçe Blog

Hassas ağ verilerini anonimleştirerek korumalı veya düzenlemelere tabi ortamlarda Migration Evaluator’ı kullanın

Orijinal makale: Link (Cain Hopwood)

Amazon Web Services (AWS) Migration Evaluator, VM (sanal makine) kullanımına ilişkin ayrıntılı veriler toplayarak ve bunları buluta geçiş için bir iş incelemesi hazırlamak ve geçiş maliyetini tahmin etmek için kullanarak VMware filolarına sahip kuruluşlara yardımcı olabilir. Ancak, Migration Evaluator tarafından toplanan sistem adları ve IP adresleri gibi hassas ağ verileri, son derece güvenli ve yasal düzenlemelere tabi kuruluşlardan dışarı çıkamaz. Bu verilerin manuel olarak anonimleştirilmesi ve yüklenmesi, yasal düzenlemelere tabi kuruluşların Migration Evaluator’ı kullanmasını engelleyebilecek bir zorluktur.

Bu blog gönderisinde, basit bir python betiğinin AWS Migration Evaluator kullanım verilerini anonim hale getirerek, yüksek düzeyde düzenlemeye tabi ortamlarda bile yüklenmesine nasıl izin verdiğini gösteriyorum. Bu, Bilgi Güvenliği Kayıtlı Değerlendiriciler Programı’nda (IRAP) bulunanlar gibi veri egemenliği veya ikamet gereksinimlerinden ödün vermeden Migration Evaluator içgörülerinin önünü açar.

Migration Evaluator neden kullanılır

Verileri anonimleştirmek bir şeydir, ancak Migration Evaluator’dan en fazla değeri elde etmek için bir kuruluşun da bu süreci tersine çevirebilmesi gerekir. Bunun yararlı olduğu bir örnek, “zombi” veya kullanılmayan VM’leri (işlemci kullanımı az olan ve ağ kullanımı olmayan makineler) belirlemektir. Örneğin, hizmet dışı bırakılmamış test makineleri veya artık var olmayan ekip sunucuları.

Geçiş isteğinin şirket içi ortamdaki kapasite eksikliğinden kaynaklandığı durumlarda, kullanılmayan VM’leri belirlemek, kapasiteyi boşaltarak kuruluşa iyi düşünülmüş bir geçiş için zaman ve boş alan sağlayarak yardımcı olabilir.

Şu senaryoyu düşünün: Migration Evaluator aracısız toplayıcıyı (agentless collector) çalıştırdıktan sonra, veri dosyası olarak aşağıdakilere sahip olursunuz.

Şekil 1. Bir müşteri ortamındaki VM’lerin ayrıntılarını gösteren Migration Evaluator çıktısı.

Dosyayı incelerken, içerdiği VM adının ve adres bilgilerinin hassas yapısıyla ilgili endişeleniyorsunuz. Bu dosyanın Migration Evaluator portalına yüklenmesi, operasyonlarınızın Avrupa Genel Veri Koruma Yönetmeliği’ne (GDPR) tabi olması veya Avustralya IRAP uyumlu bir ortamda olması gibi, dahili ağ verilerinin yerel yargı alanınızdan çıkmamasını gerektiren güvenlik politikalarıyla çelişebilir.

Böylece verileri aşağıdaki gibi anonimleştirirsiniz:

Şekil 2. Anonimleştirilmiş değerlerle değiştirilen hassas ayrıntılara sahip Migration Evaluator veri dosyası.

Artık tüm hassas bilgileri kaldırdığınıza göre, verileri analiz için Migration Evaluator portalına yüklersiniz. Bu analiz, sunucu filonuzun %33’ünün zombi olduğunu size bildirir. Raporun detayına inerek, SERVER1’in artık kullanılmadığını ve kullanımdan kaldırılabileceğini görürsünüz (Şekil 1’de gösterilen orijinal Migration Evaluator çıktı dosyasında “AvengersFileShare” olarak adlandırılır). Artık potansiyel geçiş hedeflerinizi üçte bir oranında azalttınız ve şirket içi kaynakları serbest bıraktınız.

Şimdi, filonuzda üç sunucu yerine daha gerçekçi 200 veya 2.000 sunucunuz olduğunu hayal edin. Böyle bir listeyi manuel olarak anonim hale getirmek yalnızca zaman alıcı olmakla kalmaz, aynı zamanda hataya da yatkındır.

Çözüme genel bakış ve Migration Evaluator kullanma

Bu blog gönderisinde sunulan adımlar ve komut dosyası, ağır düzenlemelere tabi ortamlarda bile geçişin ilerlemesine yardımcı olabilir. “PrimaryDC01” gibi değerleri “Server0” ile değiştirerek ve IP adreslerini rastgele hale getirerek orijinal Migration Evaluator verilerindeki hassas alanları anonimleştirir. Bu anonimleştirilmiş dosya, hassas veri içermediği için AWS’e veya bölge dışına gönderilebilir. Ancak, verileri anonimleştirmeye ek olarak, komut dosyası hem orijinal hem de anonimleştirilmiş değerleri içeren ayrı bir ters eşleme dosyası oluşturur.

Migration Evaluator raporları oluşturulduğunda, belirli VM’leri belirlemek için ters eşleme dosyası aranabilir, bu da Migration Evaluator raporundaki öngörülerin uygulanmasına olanak tanır.

Önkoşullar

  1. Kuruluş, bir geçiş değerlendirmesi talep etmiş ve Migration Evaluator’a Başlarken Merkezi’nde belirtildiği gibi Inventory Discovery (Envanter Keşfi) araçlarından birini kurmuş olmalıdır.
  2. Migration Evaluator Collector, önerilen zaman aralığı (iki hafta) için kullanım verilerini toplayan VM ortamında zaten çalışıyor olmalıdır.
  3. Otomatik veri senkronizasyonu devre dışı bırakılmalıdır, aksi takdirde değiştirilmeyen veri dosyaları otomatik olarak AWS’e yüklenir.

Kullanım verilerini ve komut dosyasını hazırlayın

Öncelikle Migration Evaluator verilerini oluşturmanız, bu verileri .csv dosyaları olarak dışa aktarmanız ve bir metin düzenleyici kullanarak Python komut dosyasını oluşturmanız gerekir.

  1. On-Premises Collector System Requirements and Install Guide’ın (Şirket İçi Toplayıcı Sistem Gereksinimleri ve Yükleme Kılavuzu) “Annotating Discovered Inventory with Business Data and Provisioning. (Keşfedilen Envantere İş Verileri ve Sağlama ile Açıklama Eklenmesi)” başlıklı Bölüm 10’daki talimatları kullanarak Migration Evaluator toplayıcısının envanterinin dışa aktarımını oluşturun. Bu oluşturulan dışa aktarma, bir Excel Çalışma Kitabıdır (.xlxs). Çalışma kitabı, ortamınızdan toplanan sistem verilerini içeren dört sekme içerir. Hem “Physical Provisioning” hem de “Virtual Provisioning” sekmeleri IP adreslerini içerir, ancak dört sekmenin tamamı sistem adlarını içerir.
  2. Excel belgesini açın ve hassas verileri içeren her sekmeyi Excel’in “Dosya/Farklı Kaydet” menüsünü ve “Virgülle Ayrılmış” dosya türünü kullanarak ayrı bir .csv dosyasına aktarın. .csv dosyalarının adları önemli değildir; bu talimatlarda “Physical_Provisioning.csv”, “Virtual_Provisioning.csv”, “Asset_Ownership.csv” ve “Utilization.csv” kullanılmaktadır.
  3. .csv dosyalarını, bir Python yorumlayıcısı içeren makinedeki bir klasöre kopyalayın. Komut dosyası hem Python sürüm 2 hem de 3 ile çalışır.
  4. Aynı klasörde “migr_eval_anon.py” adlı bir dosya oluşturmak için bir metin düzenleyici kullanın ve aşağıdaki komut dosyasını kopyalayıp yapıştırın. “# beginning of script” ve “# end of script” yorumlarını kontrol ederek betiğin tamamına sahip olduğunuzdan emin olun.
# beginning of script
import csv
import sys
import os
from argparse import ArgumentParser

# Used to store each of the transformations that will be applied to a row in the data
class Transformation:
    def __init__(self, ix, prefix):
        self.col_index = ix
        self.prefix = prefix    

def ProcessArgs(argv):
    parser = ArgumentParser(description = """ Script to process a CSV generated by the AWS Migration Evaluator tool and anonymise sensitive columns (e.g. system names and IPs) This script will generate artificial values for the anonymised columns in the output so that it can be sent to AWS without exposing values. The original values are retained in the reverse mapping output file that allow the anonomysed values to be converted back. If only Input File is specified, then anon and reverse map filenames are generated automatically. """)
    parser.add_argument("-if", "--input-file", dest="infile", default='Physical_Provisioning_Tab.csv',
                        help="File to use as source", metavar="FILE")
    parser.add_argument("-of", "--output-file", dest="outfile", default='',
                        help="File for output anonymised version", metavar="FILE")
    parser.add_argument("-rf", "--revmap-file", dest="revmapfile", default='',
                        help="File for output of dereference (original and anonomised) values", metavar="FILE")
    parser.add_argument('-c','--cols', nargs='+', dest="anoncols", default = ['Human Name', 'Server Name', 'Address'],
                        help='List of Column names to anonymise', metavar="COL")
    parser.add_argument('-p','--prefixes', nargs='+', dest="anonprefixes", default = ['SERVER', 'SERVER', 'IP'],
                        help='Prefix to use when generating anonymised values (IP generates anonymised IP Addresses)', metavar="COL")
    parser.add_argument('-id','--idcol', dest="idcol", default = 'Unique Identifier',
                        help='Name of Column with per system unique identifier for de-referencing', metavar="COL")
    args = parser.parse_args()    
    # Generate output filenames if empty (default)
    if (args.outfile == ''):
        args.outfile = os.path.splitext(args.infile)[0]+'_anon.csv'
    if (args.revmapfile == ''):
        args.revmapfile = os.path.splitext(args.infile)[0]+'_revmap.csv'
    return args

# Read a CSV Into a structure seperating out headers and data
def ReadCSV (filename):
    file_data = []
    file_headers = []
    with open(filename) as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=',')
        line_count = 0
        for row in csv_reader:
            trans_row = row
            if line_count > 0:
                # save the first line (it's headers)
                file_data.append(row)
            else:
                #assign the transformed row to the data array
                file_headers = row
            line_count += 1
        print('Loaded row count: ' + str(line_count-1))
    
    result = {
        "headers": file_headers,
        "data": file_data
    }
    return result

# Take filename headers and a data array and create a CSV
def WriteCSV(filename, headers, rows):
    line_count = 0
    with open(filename, mode='w') as out_file:
        out_writer = csv.writer(out_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
        out_writer.writerow(headers)
        for row in rows:
            out_writer.writerow(row)
            line_count += 1
    print('Wrote row count: ' + str(line_count))

# Take a single row, the indexes and prefixes of which cols to anonymise and return a transformed version and the de-reference values
def TransformRow(row, rowidix, id, transforms):
    revmap_vals = [ row[rowidix] ]
    for tr in transforms:
        revmap_vals.append(row[tr.col_index]) # original value
        if (tr.prefix == "IP"): # special case for IP, convert count into 10.0.0.0/8 CIDR
            row[tr.col_index] = '10.' + str(int(id / 65536)) + '.' + str(int(id / 256) % 256) + '.' + str(id % 256)   
        else:
            row[tr.col_index] = tr.prefix + str(id)
        revmap_vals.append(row[tr.col_index]) # also include transformed value in same row for easy searching
    return row, revmap_vals

# Take the data, headers and apply transformation rules generating a new structure
def TransformData(filedata, anon_cols, rowid, prefixes):
    # First process headers and generate indexes for any of the columns we need to anonymise that are in the data
    rowidix = filedata['headers'].index(rowid)
    transforms = []
    revmap_headers = [rowid]
    i = 0
    for col in anon_cols:
        if (col in filedata['headers'] ):
            transforms.append(Transformation(filedata['headers'].index(col), prefixes[i]))
            revmap_headers.append(col)
            revmap_headers.append("anon_" + col)
        i = i + 1
    #Now anonymise the data 
    trans_array = []
    revmap_array = []
    line_count = 0
    for row in filedata['data']:
        trans_row = row
        trans_row, revmap_row = TransformRow(trans_row, rowidix, line_count, transforms)
        # Add to result ready for next
        trans_array.append(trans_row)
        revmap_array.append(revmap_row)
        line_count += 1
    print('Transformed row count: ' + str(line_count))
    result = {
        "headers": filedata['headers'],
        "data": trans_array,
        "revmapHeaders": revmap_headers,
        "revmap": revmap_array,
    }
    return result

# Simple Mainline. Process args, Read, Transform, then Write the two files.
args = ProcessArgs(sys.argv)
print ('Anonomysing Columns: ' + ','.join(args.anoncols))
readfile = ReadCSV(args.infile)
transfile = TransformData(readfile, args.anoncols, args.idcol, args.anonprefixes)
print ('Write anonomysed data to: ' + args.outfile)
WriteCSV(args.outfile, transfile['headers'], transfile['data'])
print ('Write reverse mapping data to: ' + args.revmapfile)
WriteCSV(args.revmapfile, transfile['revmapHeaders'], transfile['revmap'])
# end of script
Python

Hassas verileri kaldırın

Artık yukarıdaki komut dosyasını kullanarak hassas verileri .csv dosyalarından kaldırmaya hazırsınız. Komut dosyası varsayılan olarak “İnsan Adı” ve “Sunucu Adı” adlı sütunları alır ve bunları “SUNUCU1” vb. ile değiştirir. Ayrıca “Adres” sütunundaki tüm değeri 10.X.X.X IP adresleri ile değiştirir. Ancak, herhangi bir alan anonimleştirilebilir ve gerekirse alternatif komut satırı parametreleri sağlanarak farklı önekler kullanılabilir.

  1. Bir komut istemi/shell açın; ardından komut dosyası ve .csv dosyalarının bulunduğu klasörü açın.
  2. Komut dosyasını, her biri için anonimleştirilmiş ve geriye doğru arama dosyası oluşturan her .csv dosyasına karşı çalıştırın. Komut dosyası, işlendiği sırada işlenen satır sayısını yazdırır..csv dosyasını dışa aktarma sırasında farklı adlar kullandıysanız, giriş dosyası adlarını ayarlayarak aşağıdaki komutları kullanın:python migr_eval_anon.py --input-file Physical_Provisioning.csv
    python migr_eval_anon.py --input-file Virtual_Provisioning.csv
    python migr_eval_anon.py --input-file Asset_Ownership.csv
    python migr_eval_anon.py --input-file Utilization.csv
  3. Orijinal .csv dosyalarına ek olarak, artık her biri için bir _anon.csv ve _revmap.csv dosyasına sahipsiniz. Örneğin:

    Şekil 3. Oluşturulan anonimleştirilmiş dosyaları gösteren komut çıktısı ekran görüntüsü.

  4. Migration Evaluator Collector’dan dışa aktardığınız orijinal Excel belgesini açın ve yeni bir kopyasını kaydedin.
  5. Excel’de Physical_Provisioning_anon.csv dosyasını açın, tüm sayfayı seçin ve tüm verileri kopyalayın. Ardından, tüm sekmeyi seçerek ve anonimleştirilmiş verileri yapıştırmak için “Özel Yapıştır/Değerler” seçeneğini kullanarak “Physical Provisioning” sekmesinin içeriğini değiştirin. Hassas veriler içermeyen bir Excel çalışma kitabınız olana kadar bu işlemi her .csv dosyası ve sekmesi için tekrarlayın.
  6. _revmap.csv dosyalarını yerel bir makinede veya orijinal Excel çalışma kitabıyla birlikte dosya paylaşımında güvende tutun. _revmap.csv dosyalarındaki orijinal sistem adlarını, oluşturulduktan sonra Migration Evaluator raporundaki belirli sistemleri tanımlamak için kullanabilirsiniz.

Gözden geçirin ve yükleyin

Bu noktada artık Migration Evaluator Management Console‘a yüklenebilecek bir Excel çalışma kitabınız var. Kuruluşunuzun belirli güvenlik kurallarına bağlı olarak, yine de çalışma kitabını gözden geçirmeniz gerekebilir. Artık bir Migration Evaluator raporu alma ve altyapınızın kaç tane zombi VM barındırdığını keşfetme yolundasınız.

Migration Evaluator, zombi sanal makinelerini tanımlamaktan fazlasını yapabilir. Bir geçişi doğru boyutlandırmak için ortamınızdaki kullanım verilerini kullanır ve filonuzu AWS’e geçirmek için tahmini bir maliyetin yanı sıra bu maliyeti şirket içi dağıtıma dayalı standartlarla karşılaştıran bir iş incelemesi üretir.

AWS Migration Evaluator ana sayfasında daha fazla bilgi edinin ve altyapının doğru şekilde ayarlanmasının kuruluşların ve işletmelerin maliyetten tasarruf etmesine nasıl yardımcı olabileceği hakkında daha fazla bilgi edinin.