是否可以通过 IAM 角色限制从 EMR (zeppelin) 访问 S3 数据?

Posted

技术标签:

【中文标题】是否可以通过 IAM 角色限制从 EMR (zeppelin) 访问 S3 数据?【英文标题】:Is it possible to restrict access to S3 data from EMR (zeppelin) by IAM roles? 【发布时间】:2018-07-23 01:26:15 【问题描述】:

我已经设置了一个安装了 Zeppelin 的 EMR 集群。我为 Zeppelin 配置了 Active Directory 身份验证,并将这些 AD 用户与 IAM 角色相关联。在使用 AD 凭据登录 zeppelin 后,我希望限制对 S3 上特定资源的访问。但是,它似乎不尊重 IAM 角色定义的权限。 EMR 角色具有 S3 访问权限,所以我想知道这是否覆盖了权限,或者这实际上是它在这种情况下关心的唯一角色

有人知道吗?

【问题讨论】:

【参考方案1】:

这周我实际上将尝试解决这个问题。我会尝试发布更新,因为我有一些。我知道这是一篇旧帖子,但我在这个网站上发现了很多有用的东西,我认为即使对原始发帖人没有帮助,它也可能对其他人有所帮助。

问题是是否有人有任何想法,而我确实有想法。因此,即使我不确定它是否会起作用,我仍然会发布我的想法作为对问题的回应。

到目前为止,我发现对于大型组织来说并不理想,因为它需要在主节点上对每个用户进行一些修改,但对于我需要的集群规模,我还没有遇到任何阻碍成为。至少没有一些配置管理工具脚本无法解决的问题。

这个想法是:

    创建一个普通的 Amazon EMR 集群 配置 SSL 通过 Active Directory 配置身份验证 (这一步是我目前正在做的)配置 Zeppelin 以使用模拟(即以经过身份验证的用户身份运行实际的笔记本进程),到目前为止,这似乎需要创建一个本地 OS (Linux) 用户(用户名匹配AD 用户名)用于将向 Zeppelin UI 进行身份验证的每个用户。使用其中一种模拟配置会导致 Zeppelin 以该操作系统用户身份运行笔记本(可能有几种不同的模拟配置)。 模拟开始后,手动配置我自己的操作系统帐户的 ~/.aws/credentials 和 ~/.aws/config 文件。 编写一个笔记本,将根据临时附加到我的帐户的不同策略测试各种访问组合。

这个想法是让 Zeppelin 笔记本进程以与 AD 身份验证用户同名的操作系统用户身份启动,然后在每个用户中都有一个 ~/.aws/credentials 和 ~/.aws/config 文件' 主目录,希望这可能导致与 S3 的连接遵循附加到与每个用户凭证文件中的密钥关联的 AWS 账户的规则。

我希望这会奏效,因为如果它不起作用,我对如何实现这一目标的想法将变得更加复杂。我打算明天下午继续解决这个问题。当我取得更多进展时,我会尝试发布更新。

【讨论】:

所以,我从来没有最终这样做,因为我们最终走了一条不同的路线,但我确实与做过这件事的人交谈过。你是对的,用户名必须匹配才能工作。查看此资源以获得解释:github.com/sudheer0553/zeppelin-user-impersonation/tree/master【参考方案2】:

允许 IAM 用户/角色访问 S3 的一种方法是满足以下两个条件:

    创建将 S3 资源与 IAM 用户/角色匹配的 S3 存储桶策略。这应该在 S3/您的存储桶/权限/存储桶策略中完成。 示例:

    
        "Version": "2012-10-17",
        "Id": "Policy...843",
        "Statement": [
            
                "Sid": "Stmt...434",
                "Effect": "Allow",
                "Principal": 
                    "AWS": [
                        "arn:aws:iam::<account-id>:user/your-s3-user",
                        "arn:aws:iam::<account-id>:role/your-s3-role"
                    ]
                ,
                "Action": "s3:*",
                "Resource": [
                    "arn:aws:s3:::target-bucket/*",
                    "arn:aws:s3:::other-bucket/specific-resource"
                ]
            
        ]
    
    

    允许对您的 IAM 用户/角色执行 S3 操作。这应该在 IAM/Users/your user/Permissions/Add inline policy 中完成。示例:

    
        "Version": "2012-10-17",
        "Statement": [
            
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "s3:ListAllMyBuckets",
                    "s3:HeadBucket",
                    "s3:ListObjects"
                ],
                "Resource": "s3:*"
            
        ]
    
    

请注意,这可能不是唯一和/或最好的方法,但它对我有用。

【讨论】:

嘿,感谢您的回复,但这不适用于我的用例。主要问题是 EMR 使用一个角色来决定其对 S3 资源的访问。我想将此更改为根据通过 LDAP 登录到 EMR Zeppelin 应用程序的 Active Directory 用户承担角色。

以上是关于是否可以通过 IAM 角色限制从 EMR (zeppelin) 访问 S3 数据?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从另一个账户使用 IAM 角色访问 Redshift?如何?

有啥方法可以限制 IAM 用户/假定角色在 AWS cognito 中启用未经身份验证的用户身份?

从 Cognito 组担任 IAM 角色

AWS IAM 策略:按用户/角色限制存储桶/文件夹访问?

如何限制 AWS IAM 组访问 AWS Secret Manager?

如何将 S3 存储桶锁定到特定用户和 IAM 角色