将 EMR 与 S3 集成时遇到问题

Trouble integrating EMR with S3

我在将 EMR 与 S3 集成时遇到问题,即实施 EMRFS

电子病历版本:emr-5.4.0

当我 运行 hdfs dfs -ls s3://pathto/bucket/ 我得到以下错误

ls: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: XXXX), S3 Extended Request ID: XXXXX**

请指导那是什么,我缺少什么?

我已完成以下步骤

  1. 为 EMR 创建了 KMS 密钥
  2. 在新创建的 KMS 密钥中添加 EMR_EC2_DefaultRole 作为密钥用户
  3. 为 EMR 创建了 S3 服务器端加密安全配置策略
  4. 为 role/EMR_EC2_DefaultRole 和 EMR_DefaultRole 为 S3 存储桶访问创建了新的内联策略
  5. 使用新的 EMR 安全策略和以下配置分类手动创建了 EMR 集群

    "fs.s3.enableServerSideEncryption": "true",
    "fs.s3.serverSideEncryption.kms.keyId":"KEYID"
    

默认情况下,EMR 将使用实例配置文件凭证(EMR_EC2_DefaultRole)来访问您的 S3 存储桶。该错误表示此角色没有访问 S3 存储桶的必要权限。

您将需要验证该角色的 IAM 角色策略,以允许对存储桶和对象执行必要的 S3 操作(如 s3:list*)。还要检查您是否有任何明确的拒绝等。 http://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html

由于在您尝试访问的 S3 存储桶上设置了存储桶策略,访问也可能被拒绝。 http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html https://aws.amazon.com/blogs/security/iam-policies-and-bucket-policies-and-acls-oh-my-controlling-access-to-s3-resources/

您的 EMR 集群可能正在使用 VPC endpoint for S3 而不是 Internet/NAT 来访问 S3。在这种情况下,您还需要验证 VPC 端点策略https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html#vpc-endpoints-policies-s3