【问题标题】:AWS IAM Policy grant permissions for some EC2 instances某些 EC2 实例的 AWS IAM 策略授予权限
【发布时间】:2019-07-13 03:29:42
【问题描述】:

我想限制特定用户只能查看少数 EC2 实例的访问权限。我在 IAM 角色中创建了一个新用户,并向其附加了一个新策略。该政策的内容附在下面。我试图查看文档并自己这样做:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:*",
            "Resource": [
                "arn:aws:ec2:eu-west-1:ACCOUNT_ID:instance/i-INSTANCE_ID1",
                "arn:aws:ec2:eu-west-1:ACCOUNT_ID:instance/i-INSTANCE_ID2"
            ]
        }
    ]
}

我放置了我的regionACCOUNT_ID(所有者 ID,而不是创建的新用户)和 instance-id,但是当我与该用户连接并列出所有实例时,我得到了这个 An error occurred fetching instance data: You are not authorized to perform this operation. .

在我将代码放入 JSON 编辑器后,在 Policy Review 步骤中,我收到了以下消息:

此政策定义了一些行为、资源或条件,它们不 提供权限。要授予访问权限,策略必须具有操作 具有适用的资源或条件的。有关详细信息,请选择显示 了解更多

AWS documentation 提及完全相同的配置或these examples

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-iam


    【解决方案1】:

    我假设您在控制台中以该用户的身份连接(但使用 CLI 也是如此)这是我认为正在发生的事情:

    要列出所有实例,控制台最有可能调用DescribeInstances API。根据 IAM 策略中可使用的action/resources/tags 列表,此 API 不支持 IAM 中的资源过滤器。

    这意味着您的用户无权列出实例,并且它们不会显示在控制台中。您可以通过使用 CLI 请求特定实例 id 的详细信息来验证这个理论,如果我的假设是正确的,它将被授权。

    由于DescribeInstances不能被资源或标签限制,我认为不可能为用户过滤实例列表。

    要使控制台正常工作,您需要在 IAM 策略中添加以下语句

     "Statement": [
         { your existing statement }, 
    
         {
             "Effect": "Allow",
             "Action": "ec2:DescribeInstances",
             "Resource": "*"
         }
     ]
    

    如果我是对的,请报告 :-) 您问题中的 example you mentioned 准确地表明:Resources = * 上的 DescribeInstances 和资源特定的 InstanceId 上的其他操作。

    【讨论】:

    • 您好,感谢您的回复。你的建议不适合我。通过添加该语句,我可以看到我帐户中的所有实例,而不仅仅是我的示例中的 2 个。
    • 这正是我在回答中所说的。无法限制 查看 实例,您的用户将看到所有实例,但只能对您按资源 ID 列入白名单的实例执行操作
    • 这确实有效,但不是我想要的。我理解这些限制。但是,我需要对所有实例和安全组做同样的事情......等等。问题是我想将项目外部化给其他人,而不显示我帐户中的所有内容。你知道任何解决方法吗?至少不显示实例名称?
    • 使用多个 AWS 账户?或者开发一个简化的控制台,即一个简单的网页,您的客户只能在其中启动/停止他们的实例。恐怕从 IAM 政策的角度来看,没有简单的解决方案
    【解决方案2】:

    前面的回答错了,可以通过标签名有条件地允许访问ec2:DescribeInstances。这也是 AWS 的最佳实践。还明确拒绝访问 ec2:CreateTags 和 ec2:DeleteTags 操作,以防止用户创建或删除标签以控制实例。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "ec2:DescribeInstances",
          "Resource": "*",
          "Condition": {
            "StringEquals": {
              "ec2:ResourceTag/UserName": "${aws:username}"
            }
          }
        },
        {
          "Effect": "Deny",
          "Action": [
            "ec2:CreateTags",
            "ec2:DeleteTags"
          ],
          "Resource": "*"
        }
      ]
    }
    

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 2019-05-21
        • 1970-01-01
        • 2022-01-17
        • 2019-08-06
        • 2019-02-19
        • 2020-08-19
        • 1970-01-01
        • 1970-01-01
        • 2019-04-18
        相关资源
        最近更新 更多