Λογότυπο Zephyrnet

Συμπεράσματα μοντέλου μεγάλης γλώσσας σε εμπιστευτικά δεδομένα χρησιμοποιώντας AWS Nitro Enclaves | Υπηρεσίες Ιστού της Amazon

Ημερομηνία:

Αυτή η ανάρτηση συνυπογράφεται με τους Justin Miles, Liv d'Aliberti και Joe Kovba από το Leidos. 

Η Leidos είναι ηγέτης λύσεων επιστήμης και τεχνολογίας στο Fortune 500 που εργάζεται για να αντιμετωπίσει μερικές από τις πιο δύσκολες προκλήσεις στον κόσμο στις αγορές άμυνας, πληροφοριών, εσωτερικής ασφάλειας, πολιτικής και υγειονομικής περίθαλψης. Σε αυτήν την ανάρτηση, συζητάμε τον τρόπο με τον οποίο η Leidos συνεργάστηκε με το AWS για να αναπτύξει μια προσέγγιση για τη διατήρηση του απορρήτου του μοντέλου μεγάλης γλώσσας (LLM) χρησιμοποιώντας AWS Nitro Enclaves.

Τα LLM έχουν σχεδιαστεί για να κατανοούν και να δημιουργούν γλώσσα που μοιάζει με άνθρωπο και χρησιμοποιούνται σε πολλούς κλάδους, συμπεριλαμβανομένης της κυβέρνησης, της υγειονομικής περίθαλψης, της χρηματοοικονομικής και της πνευματικής ιδιοκτησίας. Τα LLM έχουν ευρεία εφαρμογή, συμπεριλαμβανομένων των chatbot, της δημιουργίας περιεχομένου, της μετάφρασης γλώσσας, της ανάλυσης συναισθημάτων, των συστημάτων απάντησης ερωτήσεων, των μηχανών αναζήτησης και της δημιουργίας κώδικα. Η εισαγωγή συμπερασμάτων με βάση το LLM σε ένα σύστημα έχει επίσης τη δυνατότητα να εισαγάγει απειλές για το απόρρητο, συμπεριλαμβανομένης της διείσδυσης μοντέλων, παραβιάσεων απορρήτου δεδομένων και ακούσιας χειραγώγησης υπηρεσιών που βασίζεται σε LLM. Πρέπει να εφαρμοστούν τεχνικές αρχιτεκτονικές προκειμένου να διασφαλιστεί ότι τα LLM δεν εκθέτουν ευαίσθητες πληροφορίες κατά τη διάρκεια της εξαγωγής συμπερασμάτων.

Αυτή η ανάρτηση συζητά πώς τα Nitro Enclaves μπορούν να βοηθήσουν στην προστασία των αναπτύξεων μοντέλων LLM, ειδικά εκείνων που χρησιμοποιούν προσωπικά αναγνωρίσιμες πληροφορίες (PII) ή προστατευμένες πληροφορίες υγείας (PHI). Αυτή η ανάρτηση είναι μόνο για εκπαιδευτικούς σκοπούς και δεν πρέπει να χρησιμοποιείται σε περιβάλλοντα παραγωγής χωρίς πρόσθετους ελέγχους.

Επισκόπηση των LLMs και των Nitro Enclaves

Μια πιθανή περίπτωση χρήσης είναι ένα chatbot ευαίσθητου ερωτήματος που βασίζεται σε LLM και έχει σχεδιαστεί για να εκτελεί μια υπηρεσία ερωτήσεων και απαντήσεων που περιέχει PII και PHI. Οι περισσότερες τρέχουσες λύσεις chatbot LLM ενημερώνουν ρητά τους χρήστες ότι δεν πρέπει να περιλαμβάνουν PII ή PHI κατά την εισαγωγή ερωτήσεων για λόγους ασφαλείας. Για να μετριάσουν αυτές τις ανησυχίες και να προστατεύσουν τα δεδομένα των πελατών, οι κάτοχοι υπηρεσιών βασίζονται κυρίως στις προστασίες των χρηστών, όπως οι ακόλουθες:

  • Σύνταξη – Η διαδικασία αναγνώρισης και απόκρυψης ευαίσθητων πληροφοριών όπως PII σε έγγραφα, κείμενα ή άλλες μορφές περιεχομένου. Αυτό μπορεί να επιτευχθεί με δεδομένα εισόδου πριν σταλούν σε ένα μοντέλο ή σε ένα LLM που έχει εκπαιδευτεί να διορθώνει τις απαντήσεις του αυτόματα.
  • Έλεγχος ταυτότητας πολλαπλών παραγόντων – Μια διαδικασία ασφαλείας που απαιτεί από τους χρήστες να παρέχουν πολλαπλές μεθόδους ελέγχου ταυτότητας για να επαληθεύσουν την ταυτότητά τους για να αποκτήσουν πρόσβαση στο LLM.
  • Transport Layer Security (TLS) – Ένα κρυπτογραφικό πρωτόκολλο που παρέχει ασφαλή επικοινωνία που ενισχύει το απόρρητο των δεδομένων κατά τη μεταφορά μεταξύ των χρηστών και της υπηρεσίας LLM.

Αν και αυτές οι πρακτικές ενισχύουν τη στάση ασφαλείας της υπηρεσίας, δεν επαρκούν για την προστασία όλων των ευαίσθητων πληροφοριών χρήστη και άλλων ευαίσθητων πληροφοριών που μπορούν να διατηρηθούν εν αγνοία του χρήστη.

Στο παράδειγμά μας, μια υπηρεσία LLM έχει σχεδιαστεί για να απαντά σε ερωτήσεις σχετικά με τις παροχές υγειονομικής περίθαλψης των εργαζομένων ή να παρέχει ένα προσωπικό πρόγραμμα συνταξιοδότησης. Ας αναλύσουμε το ακόλουθο δείγμα αρχιτεκτονικής και ας προσδιορίσουμε τις περιοχές κινδύνου για το απόρρητο των δεδομένων.

llm-risk-περιοχή-διάγραμμα

Σχήμα 1 – Διάγραμμα Περιοχών Κινδύνου Προστασίας Προσωπικών Δεδομένων

Οι πιθανοί τομείς κινδύνου είναι οι εξής:

  1. Οι προνομιούχοι χρήστες έχουν πρόσβαση στο στιγμιότυπο που φιλοξενεί τον διακομιστή. Οι ακούσιες ή μη εξουσιοδοτημένες αλλαγές στην υπηρεσία θα μπορούσαν να έχουν ως αποτέλεσμα την έκθεση ευαίσθητων δεδομένων με ακούσιο τρόπο.
  2. Οι χρήστες πρέπει να εμπιστεύονται ότι η υπηρεσία δεν θα εκθέσει ή θα διατηρήσει ευαίσθητες πληροφορίες στα αρχεία καταγραφής εφαρμογών.
  3. Οι αλλαγές στα πακέτα εφαρμογών μπορεί να προκαλέσουν αλλαγές στην υπηρεσία, με αποτέλεσμα την έκθεση ευαίσθητων δεδομένων.
  4. Οι προνομιούχοι χρήστες με πρόσβαση στην παρουσία έχουν απεριόριστη πρόσβαση στο LLM που χρησιμοποιείται από την υπηρεσία. Οι αλλαγές ενδέχεται να προκαλέσουν την επιστροφή εσφαλμένων ή ανακριβών πληροφοριών στους χρήστες.

Το Nitro Enclaves παρέχει πρόσθετη απομόνωση στο δικό σας Amazon Elastic Compute Cloud (Amazon EC2), η προστασία των δεδομένων που χρησιμοποιούνται από μη εξουσιοδοτημένη πρόσβαση, συμπεριλαμβανομένων των χρηστών σε επίπεδο διαχειριστή. Στην προηγούμενη αρχιτεκτονική, είναι πιθανό μια ακούσια αλλαγή να έχει ως αποτέλεσμα ευαίσθητα δεδομένα να παραμένουν σε απλό κείμενο και να αποκαλύπτονται κατά λάθος σε έναν χρήστη που μπορεί να μην χρειάζεται να έχει πρόσβαση σε αυτά τα δεδομένα. Με το Nitro Enclaves, δημιουργείτε ένα απομονωμένο περιβάλλον από το στιγμιότυπο EC2, επιτρέποντάς σας να εκχωρήσετε πόρους CPU και μνήμης στον θύλακα. Αυτός ο θύλακας είναι μια εξαιρετικά περιοριστική εικονική μηχανή. Με την εκτέλεση κώδικα που χειρίζεται ευαίσθητα δεδομένα εντός του θύλακα, καμία από τις διεργασίες του γονέα δεν θα μπορεί να προβάλει δεδομένα θύλακα.

Το Nitro Enclaves προσφέρει τα ακόλουθα οφέλη:

  • Μνήμη και απομόνωση CPU – Βασίζεται στον Nitro Hypervisor για την απομόνωση της CPU και της μνήμης του θύλακα από χρήστες, εφαρμογές και βιβλιοθήκες στη γονική παρουσία. Αυτή η δυνατότητα βοηθά στην απομόνωση του θύλακα και του λογισμικού σας και μειώνει σημαντικά την επιφάνεια για ανεπιθύμητα συμβάντα.
  • Ξεχωριστή εικονική μηχανή – Οι θύλακες είναι διαχωρισμένες εικονικές μηχανές συνδεδεμένες σε μια παρουσία EC2 για την περαιτέρω προστασία και την ασφαλή επεξεργασία δεδομένων υψηλής ευαισθησίας.
  • Δεν υπάρχει διαδραστική πρόσβαση – Οι θύλακες παρέχουν μόνο ασφαλή τοπική σύνδεση υποδοχής με το γονικό παράδειγμα τους. Δεν έχουν μόνιμο χώρο αποθήκευσης, διαδραστική πρόσβαση ή εξωτερική δικτύωση.
  • Κρυπτογραφική βεβαίωση – Προσφορές Nitro Enclaves κρυπτογραφική βεβαίωση, μια διαδικασία που χρησιμοποιείται για την απόδειξη της ταυτότητας ενός θύλακα και την επαλήθευση ότι μόνο εξουσιοδοτημένος κωδικός εκτελείται στον θύλακα σας.
  • Ενσωμάτωση AWS – Το Nitro Enclaves είναι ενσωματωμένο με Υπηρεσία διαχείρισης κλειδιών AWS (AWS KMS), επιτρέποντάς σας να αποκρυπτογραφήσετε αρχεία που έχουν κρυπτογραφηθεί χρησιμοποιώντας AWS KMS μέσα στον θύλακα. Διαχειριστής πιστοποιητικών AWS (ACM) για Nitro Enclaves σάς επιτρέπει να χρησιμοποιείτε δημόσια και ιδιωτικά πιστοποιητικά SSL/TLS με τις εφαρμογές web και τους διακομιστές σας που εκτελούνται σε παρουσίες EC2 με Nitro Enclaves.

Μπορείτε να χρησιμοποιήσετε αυτές τις δυνατότητες που παρέχονται από το Nitro Enclaves για να βοηθήσετε στον μετριασμό των κινδύνων που σχετίζονται με δεδομένα PII και PHI. Συνιστούμε τη συμπερίληψη Nitro Enclaves σε μια υπηρεσία LLM κατά το χειρισμό ευαίσθητων δεδομένων χρήστη.

Επισκόπηση λύσεων

Ας εξετάσουμε την αρχιτεκτονική της υπηρεσίας παραδείγματος, συμπεριλαμβανομένου τώρα των Nitro Enclaves. Με την ενσωμάτωση Nitro Enclaves, όπως φαίνεται στο παρακάτω σχήμα, το LLM γίνεται ένα πιο ασφαλές chatbot για το χειρισμό δεδομένων PHI ή PII.

llm-using-aws-nitro-enclaves-diagram

Εικόνα 2 – Διάγραμμα επισκόπησης λύσης

Τα δεδομένα χρήστη, συμπεριλαμβανομένων των PII, PHI και ερωτήσεων, παραμένουν κρυπτογραφημένα σε όλη τη διαδικασία αιτήματος-απόκρισης όταν η εφαρμογή φιλοξενείται σε έναν θύλακα. Τα βήματα που πραγματοποιήθηκαν κατά την εξαγωγή συμπερασμάτων είναι τα εξής:

  1. Η εφαρμογή chatbot δημιουργεί προσωρινά διαπιστευτήρια AWS και ζητά από τον χρήστη να εισάγει μια ερώτηση. Η ερώτηση, η οποία μπορεί να περιέχει PII ή PHI, κρυπτογραφείται στη συνέχεια μέσω AWS KMS. Η κρυπτογραφημένη είσοδος χρήστη συνδυάζεται με τα προσωρινά διαπιστευτήρια για τη δημιουργία του κρυπτογραφημένου αιτήματος.
  2. Τα κρυπτογραφημένα δεδομένα αποστέλλονται σε έναν διακομιστή HTTP που φιλοξενείται από το Flask ως αίτημα POST. Πριν αποδεχτείτε ευαίσθητα δεδομένα, αυτό το τελικό σημείο θα πρέπει να διαμορφωθεί για HTTP.
  3. Η εφαρμογή πελάτη λαμβάνει το αίτημα POST και το προωθεί μέσω ενός ασφαλούς τοπικού καναλιού (για παράδειγμα, vsock) στην εφαρμογή διακομιστή που εκτελείται μέσα στο Nitro Enclaves.
  4. Η εφαρμογή διακομιστή Nitro Enclaves χρησιμοποιεί τα προσωρινά διαπιστευτήρια για την αποκρυπτογράφηση του αιτήματος, θέτει ερωτήματα στο LLM και δημιουργεί την απάντηση. Οι ρυθμίσεις για το συγκεκριμένο μοντέλο αποθηκεύονται στους θύλακες και προστατεύονται με κρυπτογραφική βεβαίωση.
  5. Η εφαρμογή διακομιστή χρησιμοποιεί τα ίδια προσωρινά διαπιστευτήρια για την κρυπτογράφηση της απάντησης.
  6. Η κρυπτογραφημένη απάντηση επιστρέφεται στην εφαρμογή chatbot μέσω της εφαρμογής πελάτη ως απάντηση από το αίτημα POST.
  7. Η εφαρμογή chatbot αποκρυπτογραφεί την απάντηση χρησιμοποιώντας το κλειδί KMS και εμφανίζει το απλό κείμενο στον χρήστη.

Προϋποθέσεις

Πριν ξεκινήσουμε, χρειάζεστε τις ακόλουθες προϋποθέσεις για να αναπτύξετε τη λύση:

Διαμόρφωση μιας παρουσίας EC2

Ολοκληρώστε τα παρακάτω βήματα για να διαμορφώσετε μια παρουσία EC2:

  1. Εκκινήστε ένα r5.8x μεγάλο Στιγμιότυπο EC2 χρησιμοποιώντας το amzn2-ami-kernel-5.10-hvm-2.0.20230628.0-x86_64-gp2 AMI με ενεργοποιημένα τα Nitro Enclaves.
  2. Εγκαταστήστε το Nitro Enclaves CLI για να δημιουργήσετε και να εκτελέσετε εφαρμογές Nitro Enclaves:
    • sudo amazon-linux-extras install aws-nitro-enclaves-cli -y
    • sudo yum install aws-nitro-enclaves-cli-devel -y
  3. Επαληθεύστε την εγκατάσταση του Nitro Enclaves CLI:
    • nitro-cli –version
    • Η έκδοση που χρησιμοποιείται σε αυτήν την ανάρτηση είναι η 1.2.2
  4. Εγκαταστήστε το Git and Docker για να δημιουργήσετε εικόνες Docker και να κατεβάσετε την εφαρμογή από το GitHub. Προσθέστε το χρήστη της παρουσίας σας στην ομάδα Docker ( είναι ο χρήστης της παρουσίας IAM σας):
    • sudo yum install git -y
    • sudo usermod -aG ne <USER>
    • sudo usermod -aG docker <USER>
    • sudo systemctl start docker && sudo systemctl enable docker
  5. Εκκινήστε και ενεργοποιήστε τις υπηρεσίες εκχωρητή Nitro Enclaves και διακομιστή μεσολάβησης vsock:
    • sudo systemctl start nitro-enclaves-allocator.service && sudo systemctl enable nitro-enclaves-allocator.service
    • sudo systemctl start nitro-enclaves-vsock-proxy.service && sudo systemctl enable nitro-enclaves-vsock-proxy.service

Το Nitro Enclaves χρησιμοποιεί μια τοπική σύνδεση υποδοχής που ονομάζεται vsock για να δημιουργήσει ένα ασφαλές κανάλι μεταξύ του γονικού στιγμιότυπου και του θύλακα.

Αφού ξεκινήσουν και ενεργοποιηθούν όλες οι υπηρεσίες, επανεκκινήστε την παρουσία για να επαληθεύσετε ότι όλες οι ομάδες χρηστών και οι υπηρεσίες εκτελούνται σωστά:

sudo shutdown -r now

Διαμορφώστε την υπηρεσία εκχώρησης Nitro Enclaves

Το Nitro Enclaves είναι ένα απομονωμένο περιβάλλον που προσδιορίζει ένα τμήμα της CPU και της μνήμης για την εκτέλεση του θύλακα. Με την υπηρεσία εκχώρησης Nitro Enclaves, μπορείτε να υποδείξετε πόσες CPU και πόση μνήμη θα αφαιρεθεί από το γονικό στιγμιότυπο για να τρέξει το enclave.

Τροποποιήστε τους δεσμευμένους πόρους του θύλακα χρησιμοποιώντας ένα πρόγραμμα επεξεργασίας κειμένου (για τη λύση μας, εκχωρούμε 8 CPU και 70,000 MiB μνήμη για να παρέχουμε αρκετούς πόρους):

vi /etc/nitro_enclaves/allocatory.yaml

AWS-Nitro-Enclaves-Allocator-Service-Config

Εικόνα 3 – Διαμόρφωση υπηρεσίας κατανεμητή θυλάκων AWS Nitro

Κλωνοποιήστε το έργο

Αφού διαμορφώσετε το στιγμιότυπο EC2, μπορείτε να κάνετε λήψη του κώδικα για να εκτελέσετε το ευαίσθητο chatbot με ένα LLM μέσα στο Nitro Enclaves.

Πρέπει να ενημερώσετε το server.py αρχείο με το κατάλληλο αναγνωριστικό κλειδιού KMS που δημιουργήσατε στην αρχή για να κρυπτογραφήσετε την απόκριση LLM.

  1. Κλωνοποιήστε το έργο GitHub:
    • cd ~/ && git clone https://<THE_REPO.git>
  2. Μεταβείτε στο φάκελο του έργου για να δημιουργήσετε το enclave_base Εικόνα Docker που περιέχει το Κιτ ανάπτυξης λογισμικού Nitro Enclaves (SDK) για έγγραφα κρυπτογραφικής βεβαίωσης από το Nitro Hypervisor (αυτό το βήμα μπορεί να διαρκέσει έως και 15 λεπτά):
    • cd /nitro_llm/enclave_base
    • docker build ./ -t “enclave_base”

Αποθηκεύστε το LLM στο EC2 Instance

Χρησιμοποιούμε το ανοιχτού κώδικα Bloom 560m LLM για επεξεργασία φυσικής γλώσσας για τη δημιουργία απαντήσεων. Αυτό το μοντέλο δεν είναι προσαρμοσμένο σε PII και PHI, αλλά δείχνει πώς ένα LLM μπορεί να ζήσει μέσα σε έναν θύλακα. Το μοντέλο πρέπει επίσης να αποθηκευτεί στη γονική παρουσία, ώστε να μπορεί να αντιγραφεί στον θύλακα μέσω του αρχείου Docker.

  1. Πλοηγηθείτε στο έργο:
    • cd /nitro_llm
  2. Εγκαταστήστε τις απαραίτητες απαιτήσεις για να αποθηκεύσετε το μοντέλο τοπικά:
    • pip3 install requirements.txt
  3. Εκτελέστε το save_model.py εφαρμογή για αποθήκευση του μοντέλου εντός του /nitro_llm/enclave/bloom Ευρετήριο:
    • python3 save_model.py

Δημιουργήστε και εκτελέστε την εικόνα Nitro Enclaves

Για να εκτελέσετε το Nitro Enclaves, πρέπει να δημιουργήσετε ένα αρχείο εικόνας εγκλεισμού (EIF) από μια εικόνα Docker της εφαρμογής σας. Το Dockerfile που βρίσκεται στον κατάλογο θύλακας περιέχει τα αρχεία, τον κώδικα και το LLM που θα εκτελεστούν μέσα στον θύλακα.

Η οικοδόμηση και η λειτουργία του θύλακα θα διαρκέσει πολλά λεπτά για να ολοκληρωθεί.

  1. Μεταβείτε στη ρίζα του έργου:
    • cd /nitro_llm
  2. Δημιουργήστε το αρχείο εικόνας θύλακα ως enclave.eif:
    • nitro-cli build-enclave --docker-uri enclave:latest --output-file enclave.eif
AWS-Nitro-Enclave-Build-Result

Εικόνα 4 – Αποτέλεσμα δόμησης AWS Nitro Enclaves

Όταν δημιουργηθεί ο θύλακας, θα δημιουργηθεί μια σειρά μοναδικών κατακερματισμών και καταχωρητών διαμόρφωσης πλατφόρμας (PCR). Οι PCR είναι μια συνεχόμενη μέτρηση για την απόδειξη της ταυτότητας του υλικού και της εφαρμογής. Αυτά τα PCR θα απαιτηθούν για κρυπτογραφική πιστοποίηση και θα χρησιμοποιηθούν κατά το βήμα ενημέρωσης πολιτικής κλειδιού KMS.

  1. Εκτελέστε τον θύλακα με τους πόρους από το allocator.service (προσθέτοντας το --attach-console το όρισμα στο τέλος θα τρέξει τον θύλακα σε λειτουργία εντοπισμού σφαλμάτων):
    • nitro-cli run-enclave --cpu-count 8 --memory 70000 --enclave-cid 16 --eif-path enclave.eif

Πρέπει να εκχωρήσετε τουλάχιστον τέσσερις φορές το μέγεθος αρχείου EIF. Αυτό μπορεί να τροποποιηθεί στο allocator.service από προηγούμενα βήματα.

  1. Βεβαιωθείτε ότι το enclave εκτελείται με την ακόλουθη εντολή:
    • nitro-cli describe-enclaves
AWS-Nitro-Enclave-Describe-Command-Response

Εικόνα 5 – Εντολή περιγραφής θύλακα AWS Nitro

Ενημερώστε την πολιτική κλειδιού KMS

Ολοκληρώστε τα παρακάτω βήματα για να ενημερώσετε την πολιτική κλειδιού KMS:

  1. Στην κονσόλα AWS KMS, επιλέξτε Κλειδιά διαχείρισης πελατών στο παράθυρο πλοήγησης.
  2. Αναζητήστε το κλειδί που δημιουργήσατε ως προαπαιτούμενο.
  3. Επιλέξτε Αλλαγή για τη βασική πολιτική.
  4. Ενημερώστε την πολιτική κλειδιών με τις ακόλουθες πληροφορίες:
    • Το αναγνωριστικό του λογαριασμού σας
    • Το όνομα χρήστη IAM σας
    • Ο ενημερωμένος ρόλος του περιβάλλοντος Cloud9
    • Δράσεις kms:Encrypt και kms:Decrypt
    • Εγκλωβίστε τις PCR (για παράδειγμα, PCR0, PCR1, PCR2) στην πολιτική κλειδιών σας με μια δήλωση συνθήκης

Δείτε τον ακόλουθο κωδικό πολιτικής κλειδιού:

{
   "Version":"2012-10-17",
   "Id":"key-default-1",
   "Statement":[
      {
         "Sid":"Enable User permissions",
         "Effect":"Allow",
         "Principal":{
            "AWS":"arn:aws:iam:::user/"
         },
         "Action":[
            "kms:CreateAlias",
            "kms:CreateKey",
            "kms:DeleteAlias",
            "kms:Describe*",
            "kms:GenerateRandom",
            "kms:Get*",
            "kms:List*",
            "kms:TagResource",
            "kms:UntagResource",
            "iam:ListGroups",
            "iam:ListRoles",
            "iam:ListUsers"
         ],
         "Resource":"*"
      },
      {
         "Sid":"Enable Enclave permissions",
         "Effect":"Allow",
         "Principal":{
            "AWS":"arn:aws:iam:::role/"
         },
         "Action":[
            "kms:Encrypt",
            "kms:Decrypt"
         ],
         "Resource":"*",
         "Condition":{
            "StringEqualsIgnoreCase":{
               "kms:RecipientAttestation:PCR0":"",
               "kms:RecipientAttestation:PCR1":"",
               "kms:RecipientAttestation:PCR2":""
            }
         }
      }
   ]
}

Αποθηκεύστε την εφαρμογή chatbot

Για να μιμηθείτε μια ευαίσθητη εφαρμογή chatbot ερωτήματος που ζει εκτός του λογαριασμού AWS, πρέπει να αποθηκεύσετε το chatbot.py εφαρμογή και εκτελέστε την μέσα στο περιβάλλον Cloud9. Το περιβάλλον σας Cloud9 θα χρησιμοποιήσει τον ρόλο παρουσίας του για προσωρινά διαπιστευτήρια για να αποσυνδέσει τα δικαιώματα από το EC2 που εκτελεί τον θύλακα. Ολοκληρώστε τα παρακάτω βήματα:

  1. Στην κονσόλα Cloud9, ανοίξτε το περιβάλλον που δημιουργήσατε.
  2. Αντιγράψτε τον παρακάτω κώδικα σε ένα νέο αρχείο όπως chatbot.py στον κύριο κατάλογο.
  3. Εγκαταστήστε τις απαιτούμενες ενότητες:
    • pip install boto3
    • Pip install requests
  4. Στην κονσόλα Amazon EC2, σημειώστε την IP που σχετίζεται με την παρουσία σας Nitro Enclaves.
  5. Ενημερώστε τη μεταβλητή URL στο http://<ec2instanceIP>:5001.
"""
Modules for a basic chatbot like application and AWS communications
"""
import base64
import requests
import boto3
 
def get_identity_document():
    """
    Get identity document for current EC2 Host
    """
    identity_doc = requests.get(
        "http://169.254.169.254/latest/dynamic/instance-identity/document", timeout=30)
    return identity_doc
 
def get_region(identity):
    """
    Get account of current instance identity
    """
    region = identity.json()["region"]
    return region
 
def get_account(identity):
    """
    Get account of current instance identity
    """
    account = identity.json()["accountId"]
    return account
 
def set_identity():
    """
    Set region and account for KMS
    """
    identity = get_identity_document()
    region = get_region(identity)
    account = get_account(identity)
    return region, account
 
def prepare_server_request(ciphertext):
    """
    Get the AWS credential from EC2 instance metadata
    """
    instance_prof = requests.get(
        "http://169.254.169.254/latest/meta-data/iam/security-credentials/", timeout=30)
    instance_profile_name = instance_prof.text
 
    instance_prof_json = requests.get(
        f"http://169.254.169.254/latest/meta-data/iam/security-credentials/{instance_profile_name}",
        timeout=30)
    response = instance_prof_json.json()
 
    credential = {
        'access_key_id': response['AccessKeyId'],
        'secret_access_key': response['SecretAccessKey'],
        'token': response['Token'],
        'region': REGION,
        'ciphertext': ciphertext
    }
    return credential
 
def get_user_input():
    """
    Start chatbot to collect user input
    """
    print("Chatbot: Hello! How can I assist you?")
    user_input = input('Your Question: ')
    return user_input.lower()
 
def encrypt_string(user_input, alias, kms):
    """
    Encrypt user input using AWS KMS
    """
    file_contents = user_input
    encrypted_file = kms.encrypt(KeyId=f'alias/{alias}', Plaintext=file_contents)
    encrypted_file_contents = encrypted_file[u'CiphertextBlob']
    encrypted_file_contents_base64 = base64.b64encode(encrypted_file_contents)
    return encrypted_file_contents_base64.decode()
 
def decrypt_data(encrypted_data, kms):
    """
    Decrypt the LLM response using AWS KMS
    """
    try:
        ciphertext_blob = base64.b64decode(encrypted_data)
        response = kms.decrypt(CiphertextBlob=ciphertext_blob)
        decrypted_data = response['Plaintext'].decode()
        return decrypted_data
    except ImportError as e_decrypt:
        print("Decryption failed:", e_decrypt)
        return None
 
REGION, ACCOUNT = set_identity()
  
def main():
    """
    Main function to encrypt/decrypt data and send/receive with parent instance
    """
    kms = boto3.client('kms', region_name=REGION)
    alias = "ncsnitro"
    user_input = get_user_input()
    encrypted_input = encrypt_string(user_input, alias, kms)
    server_request = prepare_server_request(encrypted_input)
    url = 'http://<EC2 Instance Private IP>:5001'
    x = requests.post(url, json = server_request)
    response_body = x.json()
    llm_response = decrypt_data(response_body["EncryptedData"], kms)
    print(llm_response)
 
if __name__ == '__main__':
    main()

  1. Εκτελέστε την εφαρμογή chatbot:
    • python3 chat.py

Όταν εκτελείται, το τερματικό θα ζητήσει την είσοδο του χρήστη και θα ακολουθήσει το αρχιτεκτονικό διάγραμμα του προηγούμενου για να δημιουργήσει μια ασφαλή απόκριση.

Εκτελέστε το ιδιωτικό chatbot ερωτήσεων και απαντήσεων

Τώρα που το Nitro Enclaves είναι σε λειτουργία και λειτουργεί στην παρουσία EC2, μπορείτε να κάνετε με μεγαλύτερη ασφάλεια ερωτήσεις PHI και PII στο chatbot σας. Ας δούμε ένα παράδειγμα.

Μέσα στο περιβάλλον Cloud9, κάνουμε μια ερώτηση στο chatbot μας και παρέχουμε το όνομα χρήστη μας.

question-can't-access-my-email

Εικόνα 6 – Κάνοντας μια ερώτηση στο Chat Bot

Το AWS KMS κρυπτογραφεί την ερώτηση, η οποία μοιάζει με το παρακάτω στιγμιότυπο οθόνης.

κρυπτογραφημένη-ερώτηση

Εικόνα 7 – Κρυπτογραφημένη ερώτηση

Στη συνέχεια αποστέλλεται στον θύλακα και ζητείται από το ασφαλισμένο LLM. Η ερώτηση και η απάντηση του LLM θα μοιάζουν με το ακόλουθο στιγμιότυπο οθόνης (το αποτέλεσμα και η κρυπτογραφημένη απάντηση είναι ορατά μέσα στον θύλακα μόνο σε λειτουργία εντοπισμού σφαλμάτων).

ερώτηση-απάντηση-από-llm

Εικόνα 8 – Απάντηση από το LLM

Στη συνέχεια, το αποτέλεσμα κρυπτογραφείται χρησιμοποιώντας AWS KMS και επιστρέφει στο περιβάλλον Cloud9 για αποκρυπτογράφηση.

τελική-αποκρυπτογραφημένη-απόκριση

Εικόνα 9 – Τελική αποκρυπτογραφημένη απόκριση

εκκαθάριση

Ολοκληρώστε τα παρακάτω βήματα για να καθαρίσετε τους πόρους σας:

  1. Σταματήστε την παρουσία EC2 που δημιουργήθηκε για να στεγάσει τον θύλακά σας.
  2. Διαγράψτε το περιβάλλον Cloud9.
  3. Διαγράψτε το κλειδί KMS.
  4. Καταργήστε τον ρόλο παρουσίας EC2 και τα δικαιώματα χρήστη IAM.

Συμπέρασμα

Σε αυτήν την ανάρτηση, παρουσιάσαμε πώς να χρησιμοποιήσετε το Nitro Enclaves για την ανάπτυξη μιας υπηρεσίας ερωτήσεων και απαντήσεων LLM που στέλνει και λαμβάνει πληροφορίες PII και PHI με μεγαλύτερη ασφάλεια. Αυτό αναπτύχθηκε στο Amazon EC2 και οι θύλακες είναι ενσωματωμένοι με το AWS KMS που περιορίζει την πρόσβαση σε ένα κλειδί KMS, επομένως μόνο τα Nitro Enclaves και ο τελικός χρήστης επιτρέπεται να χρησιμοποιούν το κλειδί και να αποκρυπτογραφούν την ερώτηση.

Εάν σκοπεύετε να κλιμακώσετε αυτήν την αρχιτεκτονική για να υποστηρίξετε μεγαλύτερους φόρτους εργασίας, βεβαιωθείτε ότι η διαδικασία επιλογής μοντέλου ταιριάζει με τις απαιτήσεις του μοντέλου σας με πόρους EC2. Επιπλέον, πρέπει να λάβετε υπόψη το μέγιστο μέγεθος αιτήματος και τον αντίκτυπο που θα έχει στον διακομιστή HTTP και τον χρόνο συμπερασμάτων έναντι του μοντέλου. Πολλές από αυτές τις παραμέτρους μπορούν να προσαρμοστούν μέσω του μοντέλου και των ρυθμίσεων διακομιστή HTTP.

Ο καλύτερος τρόπος για να προσδιορίσετε τις συγκεκριμένες ρυθμίσεις και απαιτήσεις για τον φόρτο εργασίας σας είναι μέσω δοκιμών με ένα τελειοποιημένο LLM. Αν και αυτή η ανάρτηση περιελάμβανε μόνο επεξεργασία ευαίσθητων δεδομένων σε φυσική γλώσσα, μπορείτε να τροποποιήσετε αυτήν την αρχιτεκτονική για να υποστηρίξετε εναλλακτικά LLM που υποστηρίζουν ήχο, όραση υπολογιστή ή πολλαπλές λειτουργίες. Οι ίδιες αρχές ασφαλείας που επισημαίνονται εδώ μπορούν να εφαρμοστούν σε δεδομένα σε οποιαδήποτε μορφή. Οι πόροι που χρησιμοποιούνται για τη δημιουργία αυτής της ανάρτησης είναι διαθέσιμοι στο GitHub repo.

Μοιραστείτε πώς θα προσαρμόσετε αυτήν τη λύση στο περιβάλλον σας στην ενότητα σχολίων.


Σχετικά με τους Συγγραφείς

Τζάστιν Μάιλς είναι μηχανικός cloud στον Τομέα Ψηφιακού Εκσυγχρονισμού Leidos υπό το Γραφείο Τεχνολογίας. Στον ελεύθερο χρόνο του, του αρέσει το γκολφ και τα ταξίδια.

Liv d' Aliberti είναι ερευνητής στο Leidos AI/ML Accelerator υπό το Γραφείο Τεχνολογίας. Η έρευνά τους επικεντρώνεται στη μηχανική μάθηση για τη διατήρηση του απορρήτου.

Κρις Ρέντσο είναι Sr. Solution Architect στον οργανισμό AWS Defense and Aerospace. Εκτός δουλειάς, απολαμβάνει μια ισορροπία ζεστού καιρού και ταξιδιών.

Τζο Κόβμπα είναι Αντιπρόεδρος στον Τομέα Ψηφιακού Εκσυγχρονισμού Leidos. Στον ελεύθερο χρόνο του, του αρέσει να διαιτητεύει ποδοσφαιρικούς αγώνες και να παίζει σόφτμπολ.

spot_img

Τελευταία Νοημοσύνη

spot_img