为什么我无法在附加了实施 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 使用 AES-256 加密而不是 SSE-KMS 写入日志。要将日志写入具有 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 集群时在所有节点上运行自定义引导操作