AWS IAM在EC2中的角色,并从Jupyterhub访问S3



在jupyterhub中,安装在EC2实例中,带有IAM角色,当我尝试使用此代码中访问该存储桶中的文件时,允许访问特定的S3存储桶:

s3nRdd = spark.sparkContext.textFile("s3n://bucket/file")

我得到此错误:

IllegalargumentException:u'aws访问密钥ID和秘密访问密钥 必须指定为S3N的用户名或密码 URL,或通过设置FS.S3N.AWSACCESSKEYID或 fs.s3n.awssecretaccesskey属性(分别)。'

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

最好的做法是使用IAM角色,为什么EC2角色在这种情况下不起作用?

- 更新 - EC2 IAM角色具有这两个政策:

{
    "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": [
                "*"
            ]
        }
    ]
}

另外,我正在使用不支持s3a协议的Hadoop版本2.4.0,并且不是一个选项。

s3n不支持IAM角色,而2.4无论如何都是非常过时的版本。在S3N方面不如2.5,但仍然不那么完美。

如果您想使用IAM角色,则必须切换到S3A,是的,对您来说,这确实意味着升级Hadoop。抱歉。

您必须创建一个存储策略,以允许从特定的IAM角色访问。由于S3不信任这些角色,因此API只是后备并要求访问密钥。

只需在您的存储策略中添加这样的soemthing,将所有自定义&lt;>参数替换为您自己的值。

{
    "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://架构检查SPARK访问的文档。否则,使用s3a://

相关内容

  • 没有找到相关文章