如何配置EMR以通过用户访问ID和秘密密钥从S3存储桶读取

时间:2020-05-05 15:14:16

标签: amazon-web-services amazon-s3 amazon-iam amazon-emr

是否有一种方法可以读取不在您的AWS账户中的S3存储桶,并且您不能承担获取访问权限的角色-特别是在EMR中。

在普通Hadoop或Spark中,您可以指定:

fs.s3.access.key=<accessKey>
fs.s3.secret.ket=<secretKey>

上使用SimpleAWSCredentialsProvider的Hadoop配置。 这在本地工作,但是当尝试在使用EMRS的EMR上运行时,我无法使它正常工作,我总是收到403:

com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403

我只有IAM用户访问ID和密钥可以从存储桶中读取,我创建EMR EC2实例的实例配置文件没有读取存储桶的权限。

要提供更多背景信息,我从提供EMR的帐户中的多个s3存储桶中进行读取和写入,但是有一个存储桶位于我尝试访问的外部。

编辑

这是针对Scala Spark应用程序的,我正在其中尝试将S3存储桶的内容直接加载到数据帧中。

2 个答案:

答案 0 :(得分:0)

您能否尝试使用pyspark中的“ boto3”库来查看是否可以读取文件。

类似这样的东西:

s3 = boto3.client('s3',aws_access_key_id = ACCESS_KEY,aws_secret_access_key_id = SECRET_KEY))

对于s3.buckets.all()中的存储桶: ...打印(bucket.name)

链接到示例:https://www.datastackpros.com/2020/05/upload-file-to-s3-bucket-using-python.html

更多的boto3功能:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/collections.html

答案 1 :(得分:0)

可悲的是,您尝试使用Apache S3A连接器的配置选项,但在运行有自己的连接器和自己的配置密钥的Amazon EMR上运行。

查看其中有哪些选项,并将它们与s3a选项一起设置在您的工作中

相关问题