是否可以通过 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 中启用未经身份验证的用户身份?