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

Date de la dernière mise à jour : 20/01/2020

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 stratégie attachée qui applique le chiffrement du côté du serveur avec AWS Key Management Service (SSE-KMS). L'écriture du journal échoue avec une erreur 403 similaire à celle-ci :

2020-01-15 04:01:25,247 INFO logspusher-6: Failed to upload 126 logs:
USE: /emr/instance-state/instance-state.log-2020-01-14-20-15.gz reason: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 8B99FE94D1678AAB)

Brève description

Lorsque la journalisation est activée pour un cluster Amazon EMR, le service LogPusher archive les journaux du 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 stratégie de chiffrement SSE-KMS, utilisez la commande sync (synchronisation) pour charger manuellement les fichiers.

Solution

1.    Connectez-vous au nœud principal en utilisant 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.