在 JupyterHub 中,安装在具有 IAM 角色的 EC2 实例中,当我尝试使用以下代码访问该存储桶中的文件时,该角色允许访问特定的 S3 存储桶:
s3nRdd = spark.sparkContext.textFile("s3n://bucket/file")
我收到此错误:
IllegalArgumentException: u'AWS 访问密钥 ID 和秘密访问密钥必须分别指定为 s3n URL 的用户名或密码,或者通过设置 fs.s3n.awsAccessKeyId 或 fs.s3n.awsSecretAccessKey 属性(分别)。
但是,当我在与该角色具有相同策略的内核配置中导出 AWS 访问密钥 ID 和秘密访问密钥时,该文件的读取成功。
由于最佳实践是使用 IAM 角色,为什么 EC2 角色在这种情况下不起作用?
--update-- EC2 IAM 角色具有以下 2 个策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1488892557621",
"Action": "s3:*",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::<bucket_name>",
"arn:aws:s3:::<bucket_name>/*"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "ec2:*",
"Effect": "Allow",
"Resource": "*"
},
{
"Sid": "Stmt1480684159000",
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": [
"*"
]
}
]
}
另外,我使用的 hadoop 版本 2.4.0 不支持s3a
协议并且更新不是一个选项。