首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >AWS在EC2中的作用和JupyterHub对S3的访问

AWS在EC2中的作用和JupyterHub对S3的访问
EN

Stack Overflow用户
提问于 2017-03-08 23:39:20
回答 2查看 598关注 0票数 3

在JupyterHub中,安装在具有IAM角色的EC2实例中,当我尝试使用以下代码访问该桶中的文件时,该角色允许访问特定的S3桶:

代码语言:javascript
代码运行次数:0
运行
复制
s3nRdd = spark.sparkContext.textFile("s3n://bucket/file")

我知道这个错误:

IllegalArgumentException: U‘’AWS访问密钥ID和秘密访问密钥必须指定为s3n URL的用户名或密码,或者通过设置fs.s3n.awsAccessKeyId或fs.s3n.awsSecretAccessKey属性(分别)。

但是,当我在具有与该角色相同的策略的内核配置中导出AWS访问密钥id和秘密访问密钥时,该文件的读取将成功。

由于最佳实践是使用IAM角色,为什么EC2角色在这种情况下不能工作?

-更新

代码语言:javascript
代码运行次数:0
运行
复制
{
    "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": [
                "*"
            ]
        }
    ]
}

另外,我使用的是Hadoop2.4.0版本,它不支持s3a协议,更新也不是一种选择。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-13 11:46:12

S3n不支持IAM角色,而且2.4是一个非常过时的版本。当涉及到s3n时,比2.5更少,但仍然不够完美。

如果您想使用IAM角色,您将不得不切换到S3a,对您来说,这确实意味着升级Hadoop。抱歉的。

票数 2
EN

Stack Overflow用户

发布于 2017-03-09 13:04:09

您必须创建一个桶策略,以允许来自特定IAM角色的访问。因为S3不信任角色,所以API只会后退,请求访问密钥。

只需在桶策略中添加如下内容,将所有自定义<>参数替换为您自己的值。

代码语言:javascript
代码运行次数:0
运行
复制
{
    "Version": "2012-10-17",
    "Id": "EC2IAMaccesss",
    "Statement": [{
            "Sid": "MyAppIAMRolesAccess",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::<acc_id>:role/<yourIAMroleName>"
                ]
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::<yourbucket>/*",
                "arn:aws:s3:::<yourbucket>"
            ]
        }
    ]
}

(更新)

  1. 确保您为EC2 IAM角色提供了适当的策略,因为IAM角色非常强大,没有任何策略会立即附加到它上。您必须分配策略,例如,对于最小的S3访问,向角色添加AWSS3ReadOnly策略。
  2. 您可能会遇到与IAM角色的火花问题交互的问题。请通过s3n://模式检查有关火花访问的文档。否则,使用s3a://
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42684034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档