Chiffrement des entrées client - Amazon Connect

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 des entrées client

Vous pouvez chiffrer les données sensibles qui sont collectées par les flux. Pour ce faire, vous devez utiliser le chiffrement de clé publique.

Lorsque vous configurez Amazon Connect, vous devez d'abord fournir la clé publique. Il s'agit de la clé utilisée lors du chiffrement des données. Plus tard, vous fournirez le certificat X.509, qui inclut une signature prouvant que vous possédez la clé privée.

Dans un flux qui collecte des données, fournissez un certificat X.509 pour chiffrer les données capturées à l'aide de l'attribut système Entrées client stockées. Vous devez charger une clé au format .pem pour utiliser cette fonction. La clé de chiffrement sert à vérifier la signature du certificat utilisé dans le flux.

Note

Vous pouvez avoir jusqu'à deux clés de chiffrement actives à la fois pour faciliter la rotation.

Pour déchiffrer les données de l'attribut Entrées client stockées, utilisez le kit de développement logiciel (SDK) de chiffrement AWS. Pour plus d'informations, consultez le Guide du développeur AWS Encryption SDK.

Pour obtenir la description d’une procédure pas à pas, consultez Création d'une solution sécurisée IVR avec Amazon Connect. Cette rubrique montre comment :

  • Configurer Amazon Connect pour collecter un numéro de carte de crédit.

  • Crypter les chiffres d’une carte de crédit.

  • L’envoyer à notre serveur principal AWS Lambda pour le déchiffrement, à l'aide de la clé de déchiffrement fournie par le client.

Il fournit deux commandes utilisant OpenSSL :

  • L'une pour générer une paire de clés RSA et un certificat X.509 auto-signé

  • L'autre pour extraire la clé publique de la paire de clés RSA

Comment déchiffrer des données chiffrées par Amazon Connect

L'exemple de code suivant montre comment déchiffrer des données à l'aide du kit SDK de chiffrement AWS.

package com.amazonaws; import com.amazonaws.encryptionsdk.AwsCrypto; import com.amazonaws.encryptionsdk.CryptoResult; import com.amazonaws.encryptionsdk.jce.JceMasterKey; import org.bouncycastle.jce.provider.BouncyCastleProvider; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Paths; import java.security.GeneralSecurityException; import java.security.KeyFactory; import java.security.Security; import java.security.interfaces.RSAPrivateKey; import java.security.spec.PKCS8EncodedKeySpec; import java.util.Base64; public class AmazonConnectDecryptionSample { // The Provider 'AmazonConnect' is used during encryption, this must be used during decryption for key // to be found private static final String PROVIDER = "AmazonConnect"; // The wrapping algorithm used during encryption private static final String WRAPPING_ALGORITHM = "RSA/ECB/OAEPWithSHA-512AndMGF1Padding"; /** * This sample show how to decrypt data encrypted by Amazon Connect. * To use, provide the following command line arguments: [path-to-private-key] [key-id] [cyphertext] * Where: * path-to-private-key is a file containing the PEM encoded private key to use for decryption * key-id is the key-id specified during encryption in your flow * cyphertext is the result of the encryption operation from Amazon Connect */ public static void main(String[] args) throws IOException, GeneralSecurityException { String privateKeyFile = args[0]; // path to PEM encoded private key to use for decryption String keyId = args[1]; // this is the id used for key in your flow String cypherText = args[2]; // the result from flow Security.addProvider(new BouncyCastleProvider()); // read the private key from file String privateKeyPem = new String(Files.readAllBytes(Paths.get(privateKeyFile)), Charset.forName("UTF-8")); RSAPrivateKey privateKey = getPrivateKey(privateKeyPem); AwsCrypto awsCrypto = new AwsCrypto(); JceMasterKey decMasterKey = JceMasterKey.getInstance(null,privateKey, PROVIDER, keyId, WRAPPING_ALGORITHM); CryptoResult<String, JceMasterKey> result = awsCrypto.decryptString(decMasterKey, cypherText); System.out.println("Decrypted: " + result.getResult()); } public static RSAPrivateKey getPrivateKey(String privateKeyPem) throws IOException, GeneralSecurityException { String privateKeyBase64 = privateKeyPem .replace("-----BEGIN RSA PRIVATE KEY-----\n", "") .replace("-----END RSA PRIVATE KEY-----", "") .replaceAll("\n", ""); byte[] decoded = Base64.getDecoder().decode(privateKeyBase64); KeyFactory kf = KeyFactory.getInstance("RSA"); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(decoded); RSAPrivateKey privKey = (RSAPrivateKey) kf.generatePrivate(keySpec); return privKey; } }