GCP - Cloud Build Enum
Βασικές Πληροφορίες
Το Google Cloud Build είναι μια διαχειριζόμενη πλατφόρμα CI/CD που αυτοματοποιεί τη διαδικασία κατασκευής λογισμικού και απελευθερώνει διαδικασίες, ενσωματώνοντας αποθετήρια κώδικα πηγής και υποστηρίζοντας μια ευρεία γκάμα γλωσσών προγραμματισμού. Επιτρέπει στους προγραμματιστές να κατασκευάζουν, να δοκιμάζουν και να αναπτύσσουν κώδικα αυτόματα, παρέχοντας ευελιξία για προσαρμογή βημάτων κατασκευής και ροών εργασίας.
Κάθε Cloud Build Trigger είναι σχετικός με ένα Cloud Repository ή συνδεδεμένος απευθείας με ένα εξωτερικό αποθετήριο (Github, Bitbucket και Gitlab).
Δεν μπόρεσα να δω κάποιον τρόπο να κλέψω το token του Github/Bitbucket από εδώ ή από τα Cloud Repositories επειδή όταν το αποθετήριο κατεβάζεται, προσπελαύνεται μέσω ενός URL https://source.cloud.google.com/ και το Github δεν προσπελαύνεται από τον πελάτη.
Συμβάντα
Το Cloud Build μπορεί να ενεργοποιηθεί αν:
Πιέσετε σε μια κλαδί: Καθορίστε το κλαδί
Πιέσετε ένα νέο ετικέτα: Καθορίστε την ετικέτα
Αίτημα ενσωμάτωσης (PR): Καθορίστε το κλαδί που λαμβάνει το PR
Χειροκίνητη Κλήση
Μήνυμα Pub/Sub: Καθορίστε το θέμα
Συμβάν Webhook: Θα εκθέσει ένα URL HTTPS και το αίτημα πρέπει να είναι πιστοποιημένο με ένα μυστικό
Εκτέλεση
Υπάρχουν 3 επιλογές:
Ένα yaml/json που καθορίζει τις εντολές προς εκτέλεση. Συνήθως:
/cloudbuild.yaml
Μόνο μία που μπορεί να καθοριστεί "inline" στην ιστοσελίδα κονσόλας και στο cli
Η πιο συνηθισμένη επιλογή
Σχετική με την μη πιστοποιημένη πρόσβαση
Ένα Dockerfile για κατασκευή
Ένα Buildpack για κατασκευή
Δικαιώματα SA
Ο Λογαριασμός Υπηρεσίας έχει το πεδίο cloud-platform
, έτσι μπορεί να χρησιμοποιήσει όλα τα προνόμια. Αν δεν καθοριστεί κάποιος SA (όπως όταν γίνεται υποβολή), θα χρησιμοποιηθεί ο προεπιλεγμένος SA <αριθμός-έργου>@cloudbuild.gserviceaccount.com
.
Από προεπιλογή δεν δίνονται δικαιώματα, αλλά είναι αρκετά εύκολο να δοθούν κάποια:
Έγκριση
Είναι δυνατό να διαμορφωθεί ένα Cloud Build για απαιτεί έγκριση για την εκτέλεση κατασκευής (απενεργοποιημένο από προεπιλογή).
Έγκριση PR
Όταν το trigger είναι PR επειδή οποιοσδήποτε μπορεί να κάνει PRs σε δημόσια αποθετήρια θα ήταν πολύ επικίνδυνο να επιτραπεί απλά η εκτέλεση του trigger με οποιοδήποτε PR. Επομένως, από προεπιλογή, η εκτέλεση θα είναι μόνο αυτόματη για ιδιοκτήτες και συνεργάτες, και για να εκτελεστεί το trigger με PR άλλων χρηστών, ένας ιδιοκτήτης ή συνεργάτης πρέπει να σχολιάσει /gcbrun
.
Συνδέσεις & Αποθετήρια
Οι συνδέσεις μπορούν να δημιουργηθούν μέσω:
GitHub: Θα εμφανίσει ένα παράθυρο OAuth που ζητά άδειες για να λάβει ένα τοκεν του Github που θα αποθηκευτεί μέσα στο Διαχειριστή Μυστικών.
GitHub Enterprise: Θα ζητήσει να εγκαταστήσετε ένα GithubApp. Ένα τοκεν πιστοποίησης από τον διακομιστή σας GitHub Enterprise θα δημιουργηθεί και θα αποθηκευτεί σε αυτό το έργο ως μυστικό του Διαχειριστή.
GitLab / Enterprise: Πρέπει να παρέχετε το τοκεν πρόσβασης API και το τοκεν πρόσβασης Read API που θα αποθηκευτούν στο Διαχειριστή Μυστικών.
Αφού δημιουργηθεί μια σύνδεση, μπορείτε να τη χρησιμοποιήσετε για να συνδέσετε αποθετήρια στα οποία ο λογαριασμός Github έχει πρόσβαση.
Αυτή η επιλογή είναι διαθέσιμη μέσω του κουμπιού:
Σημειώστε ότι τα αποθετήρια που συνδέονται με αυτόν τον τρόπο είναι διαθέσιμα μόνο στα Σημεία Ενεργοποίησης που χρησιμοποιούν τη 2η γενιά.
Σύνδεση Αποθετηρίου
Αυτό δεν είναι το ίδιο με μια σύνδεση
. Αυτό επιτρέπει διαφορετικούς τρόπους να έχετε πρόσβαση σε ένα αποθετήριο Github ή Bitbucket αλλά δεν δημιουργεί αντικείμενο σύνδεσης, αλλά δημιουργεί αντικείμενο αποθετηρίου (της 1ης γενιάς).
Αυτή η επιλογή είναι διαθέσιμη μέσω του κουμπιού:
Αποθήκευση
Μερικές φορές το Cloud Build θα δημιουργήσει μια νέα αποθήκευση για την αποθήκευση των αρχείων για το trigger. Αυτό συμβαίνει για παράδειγμα στο παράδειγμα που προσφέρει το GCP με:
Δημιουργήθηκε ένα κουτί αποθήκευσης με το όνομα security-devbox_cloudbuild για να αποθηκεύει ένα αρχείο .tgz
με τα αρχεία που θα χρησιμοποιηθούν.
Λήψη κέλυφους
Εγκατάσταση του gcloud μέσα στο cloud build:
Απαρίθμηση
Μπορείτε να βρείτε ευαίσθητες πληροφορίες σε ρυθμίσεις και logs των builds.
Εscalation προνομίων
GCP - Cloudbuild PrivescΜη εξουσιοδοτημένη πρόσβαση
GCP - Cloud Build Unauthenticated EnumΜετά την εκμετάλλευση
GCP - Cloud Build Post ExploitationLast updated