我在将 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 Deny (Service: Amazon S3;状态代码:403;错误代码:访问被拒绝;请求 ID:XXXX), S3 扩展请求 ID:XXXXX**
请指导那是什么,我错过了什么?
我已经完成了以下步骤
- 为 EMR 创建了 KMS 密钥
- 在新创建的 KMS 密钥中添加EMR_EC2_DefaultRole作为密钥用户
- 为 EMR 创建了 S3 服务器端加密安全配置策略
- 为 S3 存储桶访问的角色/EMR_EC2_DefaultRole和EMR_DefaultRole创建新的内联策略
-
使用新的 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 集群可能使用 S3 的 VPC 终端节点来访问 S3,而不是互联网/NAT。在这种情况下,您还需要验证VPC 终端节点策略。 https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html#vpc-endpoints-policies-s3