Το ιδιωτικό API απαντά στον περιηγητή σας τη στιγμή που ο φορητός υπολογιστής συνδέεται στο VPN, άρα η ενσωμάτωση θα έπρεπε να δουλεύει. Δεν δουλεύει, γιατί ο κώδικας που κάνει την κλήση εκτελείται κάπου εντελώς αλλού. Το Apex εκτελείται στους διακομιστές εφαρμογών του Salesforce, και μια δραστηριότητα από την πλευρά του διακομιστή στο Marketing Cloud εκτελείται στο περιβάλλον εκτέλεσης εκείνου του προϊόντος. Κανένα από τα δύο δεν κληρονομεί τη σήραγγα του φορητού σας. Εκτελέστε το ως σύντομη διαδικασία: προσδιορίστε τον καλούντα, επιλέξτε μια είσοδο που μπορεί να φτάσει αυτός ο καλούντας, συνδέστε τη διαδρομή από άκρη σε άκρη και μετά επαληθεύστε από το ίδιο το περιβάλλον εκτέλεσης.

Γράψτε την κάρτα του καλούντος πριν από οποιαδήποτε αλλαγή δικτύου

Συμπληρώστε πέντε πεδία και αρνηθείτε να μαντέψετε οποιοδήποτε από αυτά. Το προϊόν εκτέλεσης και το περιβάλλον καθορίζουν όλα τα υπόλοιπα, οπότε ξεκινήστε από εκεί και όχι από το τείχος προστασίας του διακομιστή.

FieldWhat it must answer
RuntimeWhich product and execution context issues the request?
EndpointWhich hostname must that runtime resolve, and to what?
PathWhich supported public entry or private connection carries it?
IdentityWhich credential and which operation is the API asked to authorize?
FailureHow do responses return, and what happens when the path is down?

Μια καρτέλα περιηγητή και μια κλήση Apex είναι δύο διαφορετικοί πελάτες, και ένας περιηγητής που δουλεύει αποδεικνύει μόνο ότι υπάρχει διαδρομή από το γραφείο σας. Αν το πεδίο του περιβάλλοντος εκτέλεσης λέει Apex, το σχετικό ερώτημα είναι από ποιες διευθύνσεις εξέρχεται το Salesforce, όχι ποιες διευθύνσεις έχει ο φορητός σας. Γι' αυτό μια σήραγγα που φορτώνει το API στον περιηγητή μπορεί να αφήσει την ενσωμάτωση να αποτυγχάνει με το ίδιο χρονικό όριο όπως πριν. Η κάρτα του καλούντος υπάρχει για να σταματήσει αυτό το λάθος πριν επεξεργαστεί κάποιος ένα τείχος προστασίας.

Επιλέξτε την είσοδο που μπορεί πραγματικά να χρησιμοποιήσει ο καλών

Και τα δύο σχέδια είναι νόμιμα και λύνουν διαφορετικά προβλήματα. Το πρώτο είναι μια σκόπιμη δημόσια είσοδος: μια πύλη API μέσω HTTPS ή μια υπηρεσία ενσωμάτωσης που πιστοποιεί τον καλούντα, εφαρμόζει στενές άδειες και διατηρεί προστατευμένη σύνδεση με το ιδιωτικό backend. Αυτό δεν είναι το ίδιο με το να εκθέσετε κάθε υπηρεσία backend ή να προωθήσετε μια θύρα διαχείρισης στο διαδίκτυο.

Το δεύτερο είναι μια πιστοποιημένη ιδιωτική σύνδεση. Η τεκμηρίωση του Private Connect για εξερχόμενες συνδέσεις του Salesforce περιγράφει τη δρομολόγηση υποστηριζόμενων κλήσεων μέσω ενός Outbound Network Connection που είναι δεσμευμένο σε ένα όνομα διαπιστευτηρίου, πάνω από την καθορισμένη διάταξη AWS PrivateLink. Η δυνατότητα έχει περιορισμούς έκδοσης, άδειας και προϊόντος, οπότε επιβεβαιώστε ότι ο οργανισμός πληροί τις προϋποθέσεις πριν σχεδιάσετε γύρω από αυτήν.

Κανένα από τα δύο σχέδια δεν είναι πελάτης OpenVPN εγκατεστημένος μέσα στο Salesforce, και η παλαιότερη δήλωση ότι κάθε ενσωμάτωση πρέπει να φτάνει σε δημόσιο backend είναι υπερβολικά ευρεία όπου ταιριάζει μια υποστηριζόμενη ιδιωτική σύνδεση. Επιλέξτε αυτό που υποστηρίζει το περιβάλλον εκτέλεσης και μετά ολοκληρώστε τη διαδρομή προς το πραγματικό API: ένα τελικό σημείο AWS δεν γνωρίζει τον τοπικό σας πόρο και δεν κληρονομεί τη διαδρομή του φορητού σας. Το DNS, η δρομολόγηση του backend, η πολιτική πρόσβασης και η κίνηση απαντήσεων πρέπει όλα να ακολουθούν την αρχιτεκτονική που επιλέξατε. Μια μισοχτισμένη ιδιωτική διαδρομή αποτυγχάνει με τρόπο που μοιάζει ακριβώς με πρόβλημα πιστοποίησης.

Συνδέστε την ιδιωτική διαδρομή από άκρη σε άκρη

Δουλέψτε προς τα έξω από το API και σταματήστε στο πρώτο κενό. Επιβεβαιώστε ότι το backend απαντά τοπικά, μετά ότι το ιδιωτικό τελικό σημείο το φτάνει, και μετά ότι το όνομα διαπιστευτηρίου και η εξερχόμενη σύνδεσή του στοχεύουν εκείνο το τελικό σημείο.

curl -sS -m 5 -o /dev/null -w '%{http_code}\n' http://10.40.8.20:8080/health
dig +short api.partner.example
sf apex run --file scripts/apex/callout-check.apex --target-org integration

Η πρώτη εντολή αποδεικνύει ότι το backend είναι υγιές από μέσα στο ιδιωτικό δίκτυο, η δεύτερη δείχνει σε τι επιλύεται το όνομα, και η τρίτη εκτελεί μια κλήση από το πραγματικό περιβάλλον εκτέλεσης του Salesforce. Ένα 200 από την πρώτη και μια αποτυχία από την τρίτη απομονώνουν το κενό στη διαδρομή ή στο διαπιστευτήριο και όχι στην υπηρεσία.

Κρατήστε το εύρος ταυτότητας ακριβές όσο συνδέετε. Ένα όνομα διαπιστευτηρίου δεν επισκευάζει μόνο του ένα απρόσιτο τελικό σημείο, γιατί το διαπιστευτήριο και η ιδιωτική σύνδεση είναι σχετικές ρυθμίσεις με ξεχωριστές δουλειές. Μια λίστα επιτρεπόμενων IP περιορίζει την εισαγωγή στο δίκτυο και δεν είναι διαπιστευτήριο API, οπότε διατηρήστε την κανονική επικύρωση TLS και τη δική της διαδικασία πιστοποίησης και περιστροφής της υπηρεσίας. Αν ένα τεστ πετυχαίνει μόνο αφού απενεργοποιήσετε τον έλεγχο πιστοποιητικού, βρήκατε πρόβλημα ονόματος κεντρικού υπολογιστή και όχι διαδρομής, και το πιστοποιητικό πρέπει ακόμη να ταιριάζει.

Επαληθεύστε από το περιβάλλον εκτέλεσης και μετά καταγράψτε την επαναφορά

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

curl -sS -o /dev/null -w '%{http_code} %{remote_ip}\n' https://api.partner.example/v1/ping
curl -sS -o /dev/null -w '%{http_code}\n' -H 'Authorization: Bearer invalid' https://api.partner.example/v1/ping

Εκτελέστε τους ίδιους δύο ελέγχους από το δίκτυο του ίδιου του backend, ώστε η παρατηρούμενη πηγή να συγκριθεί με αυτό που παρήγαγε το περιβάλλον εκτέλεσης. Ένα 200 που ακολουθείται από 401 ή 403 είναι η μορφή που θέλετε· δύο 200 σημαίνουν ότι η διαδρομή άρνησης δεν επιβάλλεται πραγματικά.

Γράψτε την επαναφορά πριν τη χρειαστείτε: ποια καταχώριση λίστας επιτρεπόμενων, όνομα διαπιστευτηρίου ή εξερχόμενη σύνδεση αλλάξατε, ποιος την κατέχει και πώς αποκαθίσταται η προηγούμενη τιμή. Μετά κλείστε τον κύκλο ονομάζοντας τον καλούντα στο cloud και την πλήρη διαδρομή υπηρεσίας στο δελτίο, ώστε κανείς να μην ανοίξει ξανά το ίδιο ζήτημα ως πρόβλημα VPN.

Σχετικά άρθρα