Pourquoi ne puis-je pas voir les journaux de cluster Amazon EMR dans un compartiment S3 auquel une politique attachée applique le chiffrement SSE-KMS ?

Date de la dernière mise à jour : 06/07/2021

Mes journaux de cluster Amazon EMR ne sont pas archivés dans le compartiment Amazon Simple Storage Service (Amazon S3) que j'ai spécifié. Le compartiment S3 possède une politique attachée qui applique le chiffrement du côté serveur avec AWS Key Management Service (SSE-KMS). L'écriture du journal échoue avec une erreur 403 similaire à la suivante :

2020-01-15 04:01:25 ,247 INFO logspusher-6 : Impossible de charger 126 journaux :
UTILISATION : /emr/instance-state/instance-state.log-2020-01-14-20-15.gz raison : Accès refusé (Service : Amazon S3 ; Code d'état : 403 ; Code d'erreur : AccessDenied ; ID de demande : 8B99FE94D1678AAB)

Brève description

Lorsque la journalisation est activée pour un cluster Amazon EMR, le service LogPusher archive les journaux de cluster dans le compartiment S3 spécifié. LogPusher utilise le chiffrement AES-256, plutôt que SSE-KMS, pour écrire des journaux. Pour écrire des journaux dans un compartiment S3 qui dispose d'une politique de chiffrement SSE-KMS, utilisez la commande sync (synchronisation) pour charger manuellement les fichiers.

Remarque : en cas d'erreurs lors de l'exécution de commandes depuis AWS CLI, assurez-vous d'utiliser la version la plus récente d'AWS CLI.

Résolution

Remarque : Avec la version 5.30.0 et ultérieure d'Amazon EMR (à l'exception d'Amazon EMR 6.0.0), vous pouvez chiffrer les fichiers journaux stockés dans Amazon S3 avec une clé gérée par le client AWS KMS.

1.    Connectez-vous au nœud maître à l'aide de SSH.

2.    Recherchez les fichiers journaux que vous souhaitez copier. Par exemple, les journaux d'étape sont stockés dans /mnt/var/log/hadoop/steps sur le nœud principal.

3.    Pour copier les fichiers journaux dans le compartiment S3, exécutez la commande sync (synchronisation) avec le champ -ses-kms-key-id. Exemple :

aws s3 sync /mnt/var/log/hadoop/steps/ s3://awsexamplebucket/elasticmapreduce/${cluster_id}/steps/ --sse aws:kms --sse-kms-key-id 17246c74-6ff4-4adb-86e5-76f7f1603f00

Vous pouvez utiliser une tâche Cron pour automatiser la commande sync (synchronisation). Pour configurer la tâche Cron, exécutez une action d'amorçage personnalisée sur tous les nœuds lorsque vous lancez un cluster Amazon EMR.