EC1实例级别的AWS IAM自定义策略不起作用

时间:2017-01-18 06:44:19

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

为用户创建了一个AWS IAM策略,仅授予停止和启动实例的权限,但如果我提供特定的实例ARN资源,则它不起作用。默认EC2只读权限已授予用户描述EC2实例的权限,并在该添加的自定义样本策略之上,如下所示:

示例政策:

  {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "ec2:Describe*",
                    "ec2:StopInstances",
                    "ec2:RunInstances",
                    "ec2:StartInstances"
                ],
                "Effect": "Allow",
                "Resource": "*"    
  

此作品

                "Resource": "arn:aws:ec2:<region>:<account id>:instance/<instance id>"  
                "Resource": "arn:aws:ec2:<region>:<account id>:instance/*" 
                "Resource": "arn:aws:ec2:<region>::instance/*"
                "Resource": "arn:aws:ec2:::instance/*"
                "Resource": "arn:aws:ec2:::*"     
  

这些不起作用

            }
        ]
    }

1月23日编辑(显示我到底做了什么)

目标:启动和停止对用户的单个EC2实例的实例权限。

测试了不同的组合策略,但除了"Resource": "*"之外,它们都没有工作:

已登录: admin_user(完全访问权限)

按如下方式创建实例:

  1. 地区:俄勒冈州

  2. 可用区: us-west-2c

  3. 实例ID: i-xxx3dxxx32xxxxxxe

  4. 所有者: xxx23xxx11

  5. 创建了一个用户: testec2_user

    授予用户的权限:

    1. EC2只读(可用政策)
    2. 自定义政策,只允许停止和启动i-xxx38xxx32xx45实例,如下所示:

      {
      "Version": "2012-10-17",
      "Statement": [
          {
              "Action": [
                  "ec2:Describe*",
                  "ec2:RunInstances"
              ],
              "Effect": "Allow",
              "Resource": "*"
          },
          {
              "Action": [
                  "ec2:StopInstances",
                  "ec2:StartInstances"
              ],
              "Effect": "Allow",
              "Resource": "arn:aws:ec2:us-west-2c:xxx23xxx11:instance/i-xxx3dxxx32xxxxxxe"
          }
              ] }
      
    3. testec2_user登录并尝试启动已停止的实例并收到以下错误:

      You are not authorized to perform this operation. Encoded authorization failure message
      

      我计划使用sts decode authorization message AWS解析收到的消息。

2 个答案:

答案 0 :(得分:2)

DescribeInstances 不支持资源级权限。 (见Unsupported Resource-Level Permissions)。

  

如果Amazon EC2 API操作不支持资源级别   权限,您可以授予用户使用该操作的权限,但是您   必须为策略声明的资源元素指定*。

     

Read more

因此,您可以将您的政策重写为:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "ec2:Describe*",
                "ec2:RunInstances"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "ec2:StopInstances",
                "ec2:StartInstances"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:ec2:<region>:<account>:instance/<instance-id>"
        }
    ]
}

修改

除了 Instance 之外,

RunInstances 需要访问多种资源类型(例如图像密钥对网络接口展示位置组安全组快照子网)并为每种资源类型接受特定的ARN格式。因此,arn:aws:ec2:<region>:<account id>:instance/*是不够的,您将收到UnauthorizedOperation错误。 “资源”元素应为:

"Resource": "*"

哪种方法最简单,或者:

"Resource": [
    "arn:aws:ec2:<region>:<account>:instance/*",
    "arn:aws:ec2:<region>::image/*",
    "arn:aws:ec2:<region>:<account>:key-pair/*",
    "arn:aws:ec2:<region>:<account>:network-interface/*",
    "arn:aws:ec2:<region>:<account>:placement-group/*",
    "arn:aws:ec2:<region>:<account>:security-group/*",
    "arn:aws:ec2:<region>::snapshot/*",
    "arn:aws:ec2:<region>:<account>:subnet/*",
    "arn:aws:ec2:<region>:<account>:volume/*"
]

哪个更复杂,但对每个资源提供细粒度控制。例如,您可以仅对特定的EC2映像ID或子网ID执行 RunInstances 执行。有关详细信息,请参阅RunInstances部分here

关于PassRole权限的补充说明

执行 RunInstances 时,如果EC2实例应包含实例配置文件,则启动EC2实例的用户还必须具有IAM PassRole权限才能将角色与启动时的实例。例如:

{
    "Version": "2012-10-17",
    "Statement": [
        ...
        {
            "Action": "iam:PassRole",
            "Effect": "Allow",
            "Resource":"arn:aws:iam::<account>:role/<role-name>"
        }
    ]
}

这样,您可以确保用户未将角色传递给EC2实例,其中角色的权限超出了您希望用户拥有的权限。

有关授予使用IAM角色启动EC2实例的权限的详细信息,请参阅this AWS博客文章。

答案 1 :(得分:0)

这是您指定多个资源的方式:

…
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::BUCKET-NAME/home/${aws:username}",
        "arn:aws:s3:::BUCKET-NAME/home/${aws:username}/*"
      ]
    }
  ]
}

来源: http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_examples.html

修改

如果您想过滤掉而不是手动包含所有必需资源,也可以使用条件。