ElastiCache crittografia in transito (TLS) - Amazon ElastiCache

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

ElastiCache crittografia in transito (TLS)

Per aiutarti a proteggere i tuoi dati, Amazon ElastiCache e Amazon EC2 forniscono meccanismi di protezione contro l'accesso non autorizzato ai tuoi dati sul server. Fornendo funzionalità di crittografia in transito, ti ElastiCache offre uno strumento che puoi utilizzare per proteggere i tuoi dati quando vengono spostati da una posizione all'altra.

Tutte le cache serverless dispongono della crittografia dei dati in transito abilitata. Per i cluster progettati autonomamente puoi abilitare la crittografia dei dati in transito su un cluster di cache impostando il parametro TransitEncryptionEnabled su true (CLI: --transit-encryption-enabled) durante la creazione del cluster di cache utilizzando l'operazione CreateCacheCluster (CLI: create-cache-cluster).

Panoramica della crittografia dei dati in transito

La crittografia ElastiCache in transito di Amazon è una funzionalità che consente di aumentare la sicurezza dei dati nei punti più vulnerabili, quando sono in transito da una posizione all'altra. Poiché la crittografia e la decrittografia dei dati richiede l'elaborazione a livello di endpoint, l'abilitazione della crittografia dei dati in transito può in parte influire sulle prestazioni. È opportuno creare un riferimento per i dati con o senza crittografia dei dati in transito per determinare l'impatto sulle prestazioni per i propri casi d'uso.

ElastiCache la crittografia in transito implementa le seguenti funzionalità:

  • Connessioni client crittografate: le connessioni client ai nodi di cache sono crittografate con TLS.

  • Connessioni server crittografate: i dati che si spostano tra i nodi di un cluster sono crittografati.

  • Autenticazione del server: i client possono autenticare che si stanno connettendo al server giusto.

Condizioni di crittografia dei dati in transito

I seguenti vincoli sulla crittografia ElastiCache in transito di Amazon devono essere tenuti presenti quando pianifichi l'implementazione del cluster progettata autonomamente:

  • La crittografia in transito è supportata su cluster che eseguono Memcached versione 1.6.12 e successive.

  • La crittografia dei dati in transito supporta Transport Layer Security (TLS) versioni 1.2 e 1.3.

  • La crittografia in transito è supportata solo per cluster in esecuzione in un VPC Amazon.

  • La crittografia in transito non è supportata per i gruppi di replica che eseguono i seguenti tipi di nodi: M1, M2, M3, R3, T2.

    Per ulteriori informazioni, consulta Tipi di nodi supportati.

  • La crittografia dei dati in transito è abilitata impostando in maniera esplicata il parametro TransitEncryptionEnabled su true.

  • Puoi abilitare la crittografia in transito su un cluster solo durante la creazione del cluster. Non puoi attivare o disattivare la crittografia in transito modificando un cluster.

  • Assicurati che il client di cache supporti la connettività TLS e che sia abilitata nella configurazione del client.

Best practice per la crittografia in transito

  • A causa dell'elaborazione richiesta per crittografare e decrittografare i dati a livello degli endpoint, l'implementazione della crittografia dei dati in transito può ridurre le prestazioni. Raffronta la crittografia dei dati in transito con l'assenza di crittografia sui dati per determinare il suo impatto sulle prestazioni per l'implementazione.

  • Siccome la creazione di nuove connessioni può richiedere molte risorse, puoi ridurre l'impatto della crittografia in transito sulle prestazioni mantenendo le connessioni SSL.

Abilitazione della crittografia dei dati in transito

Per abilitare la crittografia in transito creando un cluster Memcached tramite AWS Management Console, effettua le selezioni seguenti:

  • Scegli Memcached come motore.

  • Scegli la versione del motore 1.6.12 o successiva.

  • In Encryption in transit (Crittografia in transito), scegli Enable (Abilita).

Per il step-by-step processo, vedere Creazione di un cluster Memcached (console).

Connessione a nodi con crittografia in transito abilitata tramite Openssl

Per accedere ai dati provenienti dai ElastiCache nodi Memcached abilitati con la crittografia in transito, è necessario utilizzare client che funzionano con Secure Socket Layer (SSL). Su Amazon linux e Amazon Linux 2, puoi utilizzare anche Openssl s_client.

Per utilizzare Openssl s_client per la connessione a un cluster Memcached con crittografia in transito abilitata su Amazon Linux 2 o Amazon Linux:

/usr/bin/openssl s_client -connect memcached-node-endpoint:memcached-port

Creazione di un client TLS Memcached utilizzando Java

Per creare un client in modalità TLS, effettua le operazioni seguenti per inizializzare il client con l'SSLContex appropriato:

import java.security.KeyStore; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManagerFactory; import net.spy.memcached.AddrUtil; import net.spy.memcached.ConnectionFactoryBuilder; import net.spy.memcached.MemcachedClient; public class TLSDemo { public static void main(String[] args) throws Exception { ConnectionFactoryBuilder connectionFactoryBuilder = new ConnectionFactoryBuilder(); // Build SSLContext TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init((KeyStore) null); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, tmf.getTrustManagers(), null); // Create the client in TLS mode connectionFactoryBuilder.setSSLContext(sslContext); MemcachedClient client = new MemcachedClient(connectionFactoryBuilder.build(), AddrUtil.getAddresses("mycluster.fnjyzo.cfg.use1.cache.amazonaws.com:11211")); // Store a data item for an hour. client.set("theKey", 3600, "This is the data value"); } }

Creazione di un client TLS Memcached utilizzando PHP

Per creare un client in modalità TLS, effettua le operazioni seguenti per inizializzare il client con l'SSLContex appropriato:

<?php /** * Sample PHP code to show how to create a TLS Memcached client. In this example we * will use the Amazon ElastiCache Auto Descovery feature, but TLS can also be * used with a Static mode client. * See Using the ElastiCache Cluster Client for PHP (https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/AutoDiscovery.Using.ModifyApp.PHP.html) for more information * about Auto Discovery and persistent-id. */ /* Configuration endpoint to use to initialize memcached client. * this is only an example */ $server_endpoint = "mycluster.fnjyzo.cfg.use1.cache.amazonaws.com"; /* Port for connecting to the cluster. * This is only an example */ $server_port = 11211; /* Initialize a persistent Memcached client and configure it with the Dynamic client mode */ $tls_client = new Memcached('persistent-id'); $tls_client->setOption(Memcached::OPT_CLIENT_MODE, Memcached::DYNAMIC_CLIENT_MODE); /* Add the memcached's cluster server/s */ $tls_client->addServer($server_endpoint, $server_port); /* Configure the client to use TLS */ if(!$tls_client->setOption(Memcached::OPT_USE_TLS, 1)) { echo $tls_client->getLastErrorMessage(), "\n"; exit(1); } /* Set your TLS context configurations values. * See MemcachedTLSContextConfig in memcached-api.php for all configurations */ $tls_config = new MemcachedTLSContextConfig(); $tls_config->hostname = '*.mycluster.fnjyzo.use1.cache.amazonaws.com'; $tls_config->skip_cert_verify = false; $tls_config->skip_hostname_verify = false; /* Use the created TLS context configuration object to create OpenSSL's SSL_CTX and set it to your client. * Note: These TLS context configurations will be applied to all the servers connected to this client. */ $tls_client->createAndSetTLSContext((array)$tls_config); /* test the TLS connection with set-get scenario: */ /* store the data for 60 seconds in the cluster. * The client will decide which cache host will store this item. */ if($tls_client->set('key', 'value', 60)) { print "Successfully stored key\n"; } else { echo "Failed to set key: ", $tls_client->getLastErrorMessage(), "\n"; exit(1); } /* retrieve the key */ if ($tls_client->get('key') === 'value') { print "Successfully retrieved key\n"; } else { echo "Failed to get key: ", $tls_client->getLastErrorMessage(), "\n"; exit(1); }

Per ulteriori informazioni sull’utilizzo del client PHP, consulta Installazione del client del cluster ElastiCache per PHP.