Considerazioni sulla sicurezza per Canary Synthetics - Amazon CloudWatch

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à.

Considerazioni sulla sicurezza per Canary Synthetics

Nelle sezioni seguenti vengono descritti i problemi di sicurezza che occorre considerare durante la creazione e l'esecuzione di Canary in Synthetics.

Utilizzo di connessioni sicure

Poiché il codice Canary e i risultati delle sessioni di test Canary possono contenere informazioni riservate, non connettere il Canary a endpoint su connessioni non crittografate. Utilizza sempre connessioni crittografate, ad esempio quelle che iniziano con https://.

Considerazioni sulle convenzioni di denominazione dei Canary

L'Amazon Resource Name (ARN) di un canary è incluso nell'intestazione user-agent come parte delle chiamate in uscita effettuate dal browser Chromium basato su Puppeteer, incluso nella libreria wrapper Synthetics. CloudWatch Questo aiuta a identificare CloudWatch il traffico canarino di Synthetics e a ricollegarlo ai canarini che effettuano chiamate.

L'ARN del Canary include il nome Canary. Scegli nomi Canary che non rivelano informazioni proprietarie.

Inoltre, assicurati di indirizzare i Canary solo ai siti Web e agli endpoint che controlli.

Segreti e informazioni sensibili in codice canary

Se trasmetti il codice canarino direttamente al canarino utilizzando un file zip, il contenuto dello script può essere visualizzato nei log. AWS CloudTrail

Se lo script canary contiene informazioni sensibili o segreti (come chiavi di accesso o credenziali del database), ti consigliamo di archiviare lo script come oggetto con controllo delle versioni in Amazon S3 e trasferire la posizione Amazon S3 al canary, invece di trasferire il codice canary tramite un file con estensione zip.

Se vuoi utilizzare un file con estensione zip per trasferire lo script canary, ti consigliamo di non includere segreti o informazioni sensibili nel codice sorgente del canary. Per ulteriori informazioni su come utilizzare per AWS Secrets Manager proteggere i tuoi segreti, vedi Cos'è? AWS Secrets Manager .

Considerazioni sulle autorizzazioni

Ti consigliamo di limitare l'accesso alle risorse create o utilizzate da CloudWatch Synthetics. Utilizza le autorizzazioni strette sui bucket Amazon S3 in cui i Canary archiviano i risultati della sessione di test e altri artefatti, come log e screenshot.

Allo stesso modo, mantieni autorizzazioni strette sulle posizioni in cui è archiviato il codice sorgente del Canary, in modo che nessun utente cancelli accidentalmente o intenzionalmente i livelli Lambda o le funzioni Lambda utilizzate per il Canary.

Per essere sicuro di eseguire il codice Canary desiderato, puoi utilizzare funzione Versioni multiple degli oggetti sul bucket Amazon S3 in cui è archiviato il codice del Canary. Quindi, quando specifichi questo codice da eseguire come un Canary, puoi includere l'oggetto versionId come parte del percorso, come negli esempi seguenti.

https://bucket.s3.amazonaws.com/path/object.zip?versionId=version-id https://s3.amazonaws.com/bucket/path/object.zip?versionId=version-id https://bucket.s3-region.amazonaws.com/path/object.zip?versionId=version-id

Tracce di stack e messaggi di eccezione

Per impostazione predefinita, CloudWatch Synthetics canaries cattura qualsiasi eccezione generata dal tuo script canary, indipendentemente dal fatto che lo script sia personalizzato o provenga da un blueprint. CloudWatch Synthetics registra sia il messaggio di eccezione che la traccia dello stack in tre posizioni:

  • Torna al servizio CloudWatch Synthetics per velocizzare il debug quando descrivi le esecuzioni dei test

  • Into CloudWatch Logs in base alla configurazione con cui vengono create le funzioni Lambda

  • Nel file di log Synthetics, che è un file di testo normale che viene caricato nella posizione Amazon S3 specificata dal valore impostato per il resultsLocation del Canary

Se desideri inviare e archiviare meno informazioni, puoi acquisire le eccezioni prima che tornino alla libreria wrapper CloudWatch Synthetics.

Puoi anche inserire gli URL di richiesta nei tuoi errori. CloudWatch Synthetics analizza tutti gli URL presenti nell'errore generato dallo script e ne rimuove i parametri URL limitati in base alla configurazione. restrictedUrlParameters Se registri messaggi di errore nello script, puoi utilizzare getSanitizedErrorMessaggio per redigere gli URL prima della registrazione.

Restrizione dell'ambito dei ruoli IAM

Ti consigliamo di non configurare il Canary per visitare URL o endpoint potenzialmente dannosi. Indirizzare il Canary a siti Web o endpoint non attendibili o sconosciuti potrebbe esporre il codice della funzione Lambda a script di utenti malintenzionati. Se un sito Web dannoso interrompe Chromium, potrebbe accedere al codice Lambda in modo simile a quanto accade quando ci si connette utilizzando un browser Internet.

Esegui la funzione Lambda con un ruolo di esecuzione IAM che dispone di un numero minore di autorizzazioni. In questo modo, se la tua funzione Lambda è compromessa da uno script dannoso, è limitata nelle azioni che può intraprendere quando è in esecuzione come account del tuo canarino. AWS

Quando usi la CloudWatch console per creare un canarino, questa viene creata con un ruolo di esecuzione IAM ristretto.

Redazione dei dati sensibili

CloudWatch Synthetics acquisisce URL, codice di stato, motivo dell'errore (se presente) e intestazioni e corpi di richieste e risposte. Ciò consente a un utente canary di comprendere, monitorare ed eseguire il debug dei canary.

Le configurazioni descritte nelle sezioni seguenti possono essere impostate in qualsiasi momento dell'esecuzione del canary. Puoi anche scegliere di applicare configurazioni diverse a diversi passaggi di Synthetics.

URL della richiesta

Per impostazione predefinita, CloudWatch Synthetics registra gli URL delle richieste, i codici di stato e il motivo dello stato per ogni URL nei registri di Canary. Gli URL della richiesta possono essere visualizzati anche nei report di esecuzione dei canary, nei file HAR e così via. L'URL della richiesta potrebbe contenere parametri di query sensibili, ad esempio token di accesso o password. È possibile impedire che le informazioni sensibili vengano registrate da CloudWatch Synthetics.

Per oscurare le informazioni sensibili, imposta la proprietà di configurazione. restrictedUrlParameters Per ulteriori informazioni, consulta SyntheticsConfiguration classe. Ciò fa sì che CloudWatch Synthetics rediga i parametri URL, inclusi i valori dei parametri di percorso e query, in base a prima della registrazione. restrictedUrlParameters Se registri gli URL nello script, puoi utilizzare getSanitizedUrl(url, stepConfig = null) per redigere gli URL prima della registrazione. Per ulteriori informazioni, consulta SyntheticsLogHelper classe.

Headers

Per impostazione predefinita, CloudWatch Synthetics non registra le intestazioni di richiesta/risposta. Per i canary dell'interfaccia utente, questo è il comportamento predefinito per i canary che utilizzano la versione di runtime syn-nodejs-puppeteer-3.2 e versioni successive.

Se le intestazioni non contengono informazioni sensibili, puoi abilitare le intestazioni nei file HAR e nei report HTTP impostando le proprietà and su. includeRequestHeadersincludeResponseHeaderstrue Puoi abilitare tutte le intestazioni, ma scegliere di limitare i valori delle chiavi di intestazione sensibili. Puoi ad esempio scegliere di redigere solo intestazioni Authorization da artefatti prodotti dai canary.

Corpo della richiesta e della risposta

Per impostazione predefinita, CloudWatch Synthetics non registra il corpo della richiesta/risposta nei registri o nei report di Canary. Queste informazioni sono particolarmente utili per i canary delle API. Synthetics acquisisce tutte le richieste HTTP e può mostrare intestazioni e corpi delle richieste e della risposta. Per ulteriori informazioni, consulta executeHttpStep(stepNamerequestOptions, [callback], []) stepConfig. È possibile scegliere di abilitare il corpo della richiesta/risposta impostando le proprietà and su. includeRequestBodyincludeResponseBodytrue