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

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

有人知道吗?

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-iam emr apache-zeppelin


    【解决方案1】:

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

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

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

    这个想法是:

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

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

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

    【讨论】:

    【解决方案2】:

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

    1. 创建将 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"
                  ]
              }
          ]
      }
      
    2. 允许对您的 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 用户承担角色。
    猜你喜欢
    • 2015-11-02
    • 2019-06-10
    • 1970-01-01
    • 2016-07-10
    • 2017-05-27
    • 2015-02-19
    • 1970-01-01
    • 2022-06-10
    • 2019-07-08
    相关资源
    最近更新 更多