SSE-KMS 暗号化を適用するポリシーがアタッチされている S3 バケットに Amazon EMR クラスターログが表示されないのはなぜですか ?

最終更新日: 2020 年 1 月 20 日

Amazon EMR クラスターログが、指定した Amazon Simple Storage Service (Amazon S3) バケットにアーカイブされません。S3 バケットには、AWS Key Management Service (SSE-KMS) によるサーバー側の暗号化を適用するポリシーがアタッチされています。ログの書き込みは、次のような 403 エラーで失敗します。

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)

簡単な説明

Amazon EMR クラスターでログ記録を有効にすると、LogPusher サービスはクラスターログを指定された S3 バケットにアーカイブします。LogPusher は、SSE-KMS ではなく AES-256 暗号化を使用してログを書き込みます。SSE-KMS 暗号化ポリシーを持つ S3 バケットにログを書き込むには、sync コマンドを使用して手動でファイルをアップロードします。

解決方法

1.    SSH を使用してマスターノードに接続します

2.    コピーするログファイルを見つけます。たとえば、ステップログはマスターノードの /mnt/var/log/hadoop/steps に保存されます。

3.    ログファイルを S3 バケットにコピーするには、--sse-kms-key-id フィールドで sync コマンドを実行します。例:

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

cron ジョブを使用して、sync コマンドを自動化できます。cron ジョブを設定するには、Amazon EMR クラスターの起動時にすべてのノードで カスタムブートストラップアクション を実行します。