View a markdown version of this page

Associare una funzione di CloudFront connessione - Amazon CloudFront

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Associare una funzione di CloudFront connessione

CloudFront Le funzioni di connessione consentono di implementare una logica di convalida dei certificati personalizzata durante gli handshake TLS, fornendo estensioni alle funzionalità di autenticazione MTLS integrate.

Cosa sono le funzioni di connessione?

Le funzioni di connessione sono JavaScript funzioni che vengono eseguite durante l'handshake TLS dopo la convalida dei certificati client. Il certificato client convalidato viene passato alla Connection Function, a quel punto la Connection Function può determinare ulteriormente se concedere o meno l'accesso. Per informazioni dettagliate sulle funzioni di connessione, vederePersonalizza a 360° con CloudFront Functions.

Come funzionano le funzioni di connessione con gli MTL

Quando un client tenta di stabilire una connessione MTLS alla tua CloudFront distribuzione, si verifica la seguente sequenza:

  1. Il client avvia l'handshake TLS con edge location. CloudFront

  2. CloudFront richiede e riceve il certificato del cliente.

  3. CloudFront esegue la convalida standard del certificato rispetto a Trust Store.

  4. Se il certificato supera la convalida standard, CloudFront richiama la funzione di connessione. Se IgnoreCertificateExpiry è abilitato all'interno della tua ViewerMtlsConfig, anche i certificati scaduti, ma altrimenti validi, vengono passati alla Connection Function. Se i certificati client non sono validi, le funzioni di connessione non verranno richiamate.

  5. La tua Connection Function riceve informazioni sul certificato e dettagli di connessione analizzati.

  6. La tua funzione prende una allow/deny decisione in base a una logica personalizzata.

  7. CloudFront completa o termina la connessione TLS in base alla tua decisione.

Le funzioni di connessione vengono richiamate sia per la modalità di verifica che per la modalità opzionale (quando i client presentano i certificati).

Crea una funzione di connessione

È possibile creare funzioni di connessione utilizzando la CloudFront console o la AWS CLI.

Per creare una funzione di connessione (console)

  1. Accedi Console di gestione AWS e apri la CloudFront console all'indirizzohttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Nel riquadro di navigazione, seleziona Funzioni.

  3. Scegli la scheda Funzioni di connessione e scegli Crea funzione di connessione.

  4. Inserisci un nome di funzione univoco all'interno del tuo AWS account.

  5. Scegli Continua.

  6. Nell'editor delle funzioni, scrivi il JavaScript codice per la convalida del certificato. Il gestore della funzione deve chiamare allow o deny.

  7. Facoltativo: è possibile associare un KeyValue archivio alla Connection Function per implementare il controllo della revoca.

  8. Scegli Save changes (Salva modifiche).

Per creare una funzione di connessione (AWS CLI)

L'esempio seguente mostra come creare una funzione di connessione:

Scrivete il codice della funzione in un file separato, ad esempio code.js:

function connectionHandler(connection) { connection.allow(); }
aws cloudfront create-connection-function \ --name "certificate-validator" \ --connection-function-config '{ "Comment": "Client certificate validation function", "Runtime": "cloudfront-js-2.0" }' \ --connection-function-code fileb://code.js

Struttura del codice della funzione di connessione

Le funzioni di connessione implementano la funzione ConnectionHandler che riceve un oggetto di connessione contenente informazioni sul certificato e sulla connessione. La funzione deve utilizzare connection.allow() o connection.deny() per prendere una decisione sulla connessione.

Esempio di funzione di connessione di base

L'esempio seguente mostra una semplice funzione di connessione che verifica il campo oggetto dei certificati client:

function connectionHandler(connection) { // Only process if a certificate was presented if (!connection.clientCertificate) { console.log("No certificate presented"); connection.deny(); } // Check the subject field for specific organization const subject = connection.clientCertificate.certificates.leaf.subject; if (!subject.includes("O=ExampleCorp")) { console.log("Certificate not from authorized organization"); connection.deny(); } else { // All checks passed console.log("Certificate validation passed"); connection.allow(); } }

Le specifiche complete delle proprietà dei certificati client disponibili sull'oggetto di connessione sono disponibili qui:

{ "connectionId": "Fdb-Eb7L9gVn2cFakz7wWyBJIDAD4-oNO6g8r3vXDV132BtnIVtqDA==", // Unique identifier for this TLS connection "clientIp": "203.0.113.42", // IP address of the connecting client (IPv4 or IPv6) "clientCertificate": { "certificates": { "leaf": { "serialNumber": "4a:3f:5c:92:d1:e8:7b:6c", // Unique serial number assigned by the issuing CA (hexadecimal) "issuer": "CN=Example Corp Intermediate CA,O=Example Corp,C=US", // Distinguished Name (DN) of the certificate authority that issued this certificate. "subject": "CN=client.example.com,O=Example Corp,C=US", // Distinguished Name (DN) of the certificate holder. "validity": { "notBefore": "2024-01-15T00:00:00Z", // Certificate validity start date (ISO 8601 format) "notAfter": "2025-01-14T23:59:59Z" // Certificate expiration date (ISO 8601 format) }, "sha256Fingerprint": "a1b2c3d4e5f6...abc123def456", // SHA-256 hash of the certificate (64 hex characters) "ocspEndpoint": "http://ocsp.example.com", // OCSP responder URL from the certificate's AIA extension. "san": "DNS:client.example.com,DNS:api.example.com", // Subject Alternative Names. "spki": "30820122300d06092a864886f70d01010105000382010f003082010a0282010100...", // Subject Public Key Info (DER-encoded, hex). "sanHex": "3032820f636c69656e742e6578616d706c652e636f6d820f6170692e6578616d706c652e636f6d..." // Subject Alternative Names (DER-encoded, hex). }, "intermediates": [ { "serialNumber": "00:d4:04:a5:fd:cb:20:37:54", // Serial number of the intermediate certificate. "issuer": "CN=Example Corp Root CA,O=Example Corp,C=US", // Issuer of the intermediate certificate. "subject": "CN=Example Corp Intermediate CA,O=Example Corp,C=US", // Subject of the intermediate certificate. "validity": { "notBefore": "2020-01-01T00:00:00Z", "notAfter": "2030-01-01T23:59:59Z" }, "sha256Fingerprint": "b2c3d4e5f6a1...def456abc123", "ocspEndpoint": "http://ocsp.example.com/intermediate", "san": "DNS:ca.example.com", "spki": "30820122300d06092a864886f70d01010105000382010f003082010a0282010100b389dd513b...", "sanHex": "3015820d63612e6578616d706c652e636f6d..." } ] } } }

Associare una funzione di connessione

Dopo aver creato la funzione di connessione, devi pubblicarla nella fase LIVE e associarla alla tua distribuzione.

Per pubblicare e associare una funzione di connessione (console)

  1. Accedi Console di gestione AWS e apri la CloudFront console all'indirizzohttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Nel pannello di navigazione, scegli Funzioni

  3. Scegli la scheda Funzioni di connessione e seleziona la tua funzione di connessione.

  4. Scegli Pubblica per spostarlo nella fase LIVE.

  5. Scegli Aggiungi associazione nella tabella delle distribuzioni associate sotto la sezione di pubblicazione.

  6. Seleziona la distribuzione con Viewer MTL abilitato che desideri associare.

In alternativa, le funzioni di connessione pubblicate possono essere associate anche dalla pagina dei dettagli della distribuzione.

  1. Vai alla home page della console in cui sono elencate tutte le tue distribuzioni.

  2. Seleziona la distribuzione che desideri associare.

  3. Scegli la scheda Generale.

  4. Nella sezione Settings (Impostazioni), scegli Edit (Modifica).

  5. Nella sezione Connettività, trova l'autenticazione reciproca di Viewer (MTL).

  6. Per Funzione di connessione, seleziona la tua funzione.

  7. Scegli Save changes (Salva modifiche).

Per associare una funzione di connessione (AWS CLI)

L'esempio seguente mostra come associare una funzione di connessione a una distribuzione:

// DistributionConfig: { ...other settings, "ConnectionFunctionAssociation": { "Id": "cf_30c2CV2elHwCoInb3LtcaUJkZeD" } }

Casi d'uso per le funzioni di connessione

Le funzioni di connessione consentono diversi casi d'uso avanzati degli MTL:

  • Convalida degli attributi del certificato: verifica campi specifici nei certificati client, ad esempio i requisiti delle unità organizzative o i modelli di nome alternativi dei soggetti.

  • Controllo della revoca del certificato: implementa il controllo personalizzato della revoca dei certificati utilizzando la memorizzazione dei numeri KeyValueStore di serie dei certificati revocati.

  • IP-based politiche di certificazione: applica politiche di certificazione diverse in base agli indirizzi IP dei client o alle restrizioni geografiche.

  • Multi-tenant convalida: implementa regole di convalida specifiche del tenant in cui si applicano requisiti di certificato diversi in base ai nomi host o agli attributi del certificato.

Nota

Le funzioni di connessione vengono eseguite una volta per connessione client durante l'handshake TLS.

Le funzioni di connessione possono solo consentire o negare le connessioni, non modificare HTTP. requests/responses

Solo le funzioni LIVE stage (pubblicate) possono essere associate alle distribuzioni.

Ogni distribuzione può avere al massimo una funzione di connessione.

Fasi successive

Dopo aver associato una funzione di connessione alla CloudFront distribuzione, puoi configurare impostazioni opzionali per personalizzare il comportamento dell'implementazione MTL. Per istruzioni dettagliate sulla configurazione di impostazioni aggiuntive, ad esempio una modalità opzionale di convalida del certificato client, vedere. Configurazione di impostazioni aggiuntive