AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 833775
Accepted
ALex_hha
ALex_hha
Asked: 2017-02-21 12:11:47 +0800 CST2017-02-21 12:11:47 +0800 CST 2017-02-21 12:11:47 +0800 CST

如何向特定 IAM 用户授予对 SQS 的访问权限

  • 772

我需要创建一个非常简单的 IAM 策略并将其授予特定队列。我需要仅向特定 IAM 用户授予对队列的访问权限(应该是完全访问权限)。

因为目前默认情况下,所有具有策略AmazonSQSFullAccess / AdministratorAccess的 IAM 用户都可以向队列发送/读取消息。

我尝试了以下策略但没有成功

政策一

{
  "Version": "2012-10-17",
  "Id": "arn:aws:sqs:us-east-1:930XXXXXX332:task-queue/SQSDefaultPolicy",
  "Statement": [
    {
      "Sid": "Sid1487598389851",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "SQS:*",
      "Resource": "arn:aws:sqs:us-east-1:930XXXXXX332:task-queue",
      "Condition": {
        "ArnNotEquals": {
          "aws:SourceArn": "arn:aws:iam::930XXXXXX332:user/test-sqs"
        }
      }
    },
    {
      "Sid": "Sid1487599825058",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::930XXXXXX332:user/test-sqs"
      },
      "Action": "SQS:*",
      "Resource": "arn:aws:sqs:us-east-1:930XXXXXX332:task-queue"
    }
  ]
}

策略 2(与上述相同,但我尝试了另一种情况)

"Condition": {
        "NotPrincipal": { 
             "AWS": "arn:aws:iam::930XXXXXX332:user/test-sqs" 
        }
  }

换句话说 - 我需要得到类似以下的东西

Allow: user1, user2
Deny: *

有可能吗?

目前我必须在拒绝效果中明确指定每个用户。这非常不方便

amazon-web-services
  • 2 2 个回答
  • 5734 Views

2 个回答

  • Voted
  1. Best Answer
    ALex_hha
    2017-02-22T02:42:02+08:002017-02-22T02:42:02+08:00

    最后我找到了解决方法。使用下面的政策,它可以按预期工作

    {
      "Version": "2012-10-17",
      "Id": "arn:aws:sqs:us-east-1:930XXXXXX332:test-queue",
      "Statement": [
        {
          "Sid": "Sid1472529596416",
          "Effect": "Deny",
          "NotPrincipal": {
            "AWS": [
              "arn:aws:iam::930XXXXXX332:user/test-sqs",
              "arn:aws:iam::930XXXXXX332:root"
            ]
          },
          "Action": "SQS:*",
          "Resource": "arn:aws:sqs:us-east-1:930XXXXXX332:test-queue"
        }
      ]
    }
    

    关键部分是 - 您必须明确指定 root 帐户。没有它——它根本行不通。对我来说,这是一些 AWS 魔法 :) 但可能有人可以对这种情况有所了解。

    更新 01.03.2017 看来我已经找到了这种行为的描述 - http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#NotPrincipal

    在以下示例中,除 AWS 账户 444455556666 中名为 Bob 的用户之外的所有委托人都被明确拒绝访问资源。请注意,为实现预期效果,NotPrincipal 元素包含用户 Bob 和 Bob 所属的 AWS 账户 (arn:aws:iam::444455556666:root) 的 ARN。如果 NotPrincipal 元素仅包含 Bob 的 ARN,则策略的效果将是明确拒绝对包含用户 Bob 的 AWS 账户的访问。

    用户不能拥有比其父账户更多的权限,因此如果 Bob 的账户被明确拒绝访问,那么 Bob 也无法访问该资源。

    "Effect": "Deny",
    "NotPrincipal": {
      "AWS": [
        "arn:aws:iam::444455556666:user/Bob",
        "arn:aws:iam::444455556666:root"
      ]
    }
    

    结合 Deny 和 NotPrincipal 是唯一一次 AWS 评估委托人的顺序会有所不同

    • 4
  2. stoned
    2017-02-21T13:00:41+08:002017-02-21T13:00:41+08:00

    初始代码的第一部分失败,因为条件再次验证资源 Arn,因此您实际上拒绝访问所有队列。第二部分应该可以工作,但明确的访问拒绝始终具有优先权。

    “策略 2”是错误的,因为您再次授予所有人访问权限,但您需要授予访问权限的用户。但是您在上面使用的全局否认仍然具有优先权,因此根本没有效果。

    我认为您的问题出在您当前的 IAM 设置的基础上——您不应该为所有用户提供如此广泛的系统访问权限。IAM 在“允许您严格需要”的基础上工作,这对安全性最有利。相反,你让自己陷入了“拒绝一切,但你需要的东西”,这在 IAM 中几乎无法维护,因为“拒绝”声明总是获胜。

    现在的解决方法就是您所做的 - 将拒绝策略应用于组,并将该组应用于所有不应访问的用户。但是,随着可能创建更多队列,您会发现自己陷入了一个永无止境的拒绝策略循环,您需要在拒绝策略中明确设置所有队列的名称。而且 - 这会是安全的还是有意义的?您说您已授予许多用户管理员角色 - 如果他们可以修改他们的 IAM 策略,他们可以做任何事情 - cloudtrail 可能会告诉您发生了什么,但不会带回您的数据。

    我强烈建议您采用不同的方法,并为您的用户定义更有限的策略。根据需要创建额外的策略并使它们具有累积性,将它们附加到组以及从组到用户。利用 arn 值上的通配符,最终为您的资源创建“保留”命名空间,并限制访问。

    • 0

相关问题

  • 与 AWS 中的其他系统相比,CentOS 报告的总内存较低

  • 如何在 Amazon Linux 服务器上升级到 Java 1.8?

  • 了解 Amazon AWS 使用数据

  • 亚马逊提供的负载均衡服务体验如何?

  • ELB 中现有节点的 AWS 自动缩放问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve