Chiffrement en transit (TLS) ElastiCache - Amazon ElastiCache

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Chiffrement en transit (TLS) ElastiCache

Afin de vous aider à préserver la sécurité de vos données, Amazon ElastiCache et Amazon EC2 fournissent les mécanismes permettant de protéger vos données sur le serveur de tout accès non autorisé. En fournissant une capacité de chiffrement en transit, ElastiCache met à votre disposition un outil à utiliser afin de protéger vos données lorsqu'elles sont transférées d'un emplacement à un autre.

Le chiffrement en transit est activé pour tous les caches sans serveur. Pour les clusters auto-conçus, vous pouvez activer le chiffrement en transit sur un cluster de cache en définissant le paramètre TransitEncryptionEnabled sur true (interface de ligne de commande : --transit-encryption-enabled) lorsque vous créez le cluster de cache à l’aide de l’opération CreateCacheCluster (interface de ligne de commande : create-cache-cluster).

Présentation du chiffrement en transit

Le chiffrement en transit Amazon ElastiCache est une fonctionnalité qui vous permet de renforcer la sécurité de vos données à leurs états les plus vulnérables : lorsqu’elles sont transférées d’un emplacement à un autre. Puisque certains traitements nécessitaient de chiffrer et de déchiffrer les données aux points de terminaison, l'activation du chiffrement en transit peut avoir un certain impact sur la performance. Vous devez référencer vos données avec et sans le chiffrement en transit pour déterminer l'impact sur la performance pour vos cas d'utilisation.

Le chiffrement en transit ElastiCache implémente les fonctions suivantes :

  • Connexions client chiffrées : les connexions client aux nœuds de cache sont chiffrées à l’aide du protocole TLS.

  • Connexions serveur chiffrées : les données transférées entre les nœuds d’un cluster sont chiffrées.

  • Authentification du serveur : les clients peuvent authentifier leur connexion au bon serveur.

Conditions du chiffrement en transit

Il convient de garder à l’esprit les contraintes suivantes concernant le chiffrement en transit Amazon ElastiCache lorsque vous planifiez votre implémentation de cluster auto-conçu :

  • Le chiffrement en transit est pris en charge sur les clusters exécutant Memcached versions 1.6.12 et ultérieures.

  • Le chiffrement en transit prend en charge le protocole TLS (Transport Layer Security) versions 1.2 et 1.3.

  • Le chiffrement en transit est pris en charge uniquement par les clusters exécutés dans un Amazon VPC.

  • Le chiffrement en transit est pris en charge uniquement pour les clusters exécutant les types de nœud suivants.

    • R6g, R5, R4

    • M6g, M5, M4

    • T4g, T3

    Pour de plus amples informations, veuillez consulter Types de nœuds pris en charge.

  • Le chiffrement en transit est activé en définissant explicitement le paramètre TransitEncryptionEnabled sur true.

  • Vous pouvez activer le chiffrement en transit sur un cluster uniquement lors de la création du cluster. Vous ne pouvez pas activer et désactiver le chiffrement en transit en modifiant un cluster.

  • Assurez-vous que votre client de mise en cache prend en charge la connectivité TLS et que vous l’avez activée dans la configuration du client.

Bonnes pratiques en matière de chiffrement en transit

  • Puisque le traitement nécessitait de chiffrer et de déchiffrer les données aux points de terminaison, l'implémentation du chiffrement en transit peut réduire la performance. Référencez le chiffrement en transit en comparaison avec l'absence de chiffrement sur vos propres données pour déterminer l'impact sur la performance pour votre cas d'utilisation.

  • La création de nouvelles connexions étant parfois coûteuse, vous pouvez réduire l'impact du chiffrement en transit sur les performances en conservant vos connexions TLS.

Activation du chiffrement en transit

Pour activer le chiffrement en transit lors de la création d'un cluster Memcached à l'aide de la Console de gestion AWS, effectuez les sélections suivantes :

  • Choisissez Memcached comme moteur.

  • Choisissez la version de moteur 1.6.12 ou ultérieure.

  • Sous Encryption in transit (Chiffrement en transit), choisissez Enable (Activer).

Pour obtenir le processus étape par étape, consultez Création d'un cluster Memcached (console) (Langue Français non garanti).

Connexion aux nœuds activés avec le chiffrement en transit à l'aide d'openssl

Pour accéder aux données depuis les nœuds ElastiCache for Memcached activés avec le chiffrement en transit, vous devez utilisez des clients qui fonctionnent avec SSL (Secure Socket Layer). Vous pouvez également utiliser openssl s_client sur Amazon Linux et Amazon Linux 2.

Pour utiliser openssl s_client afin de se connecter à un cluster Memcached activé avec le chiffrement en transit sur Amazon Linux 2 ou Amazon Linux :

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

Création d'un client Memcached en mode TLS avec Java

Pour créer un client en mode TLS, procédez comme suit pour initialiser le client avec le contexte SSLContext approprié :

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"); } }

Création d'un client Memcached en mode TLS avec PHP

Pour créer un client en mode TLS, procédez comme suit pour initialiser le client avec le contexte SSLContext approprié :

<?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); }

Pour plus d'informations sur l'utilisation du client PHP, consultez Installation du client de cluster ElastiCache pour .NET.