AWS限制EC2的策略权限创建

时间:2018-06-05 17:19:14

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

什么是最有限的iam政策我可以让用户仍允许他们创建EC2?他们的政策不需要任何其他东西,我已经打开和关闭了一天,并且无法获得正确的组合?

1 个答案:

答案 0 :(得分:1)

通过AWS Command-Line Interface (CLI)启动Amazon EC2实例的最低权限只是RunInstances

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "RunInstances",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": "*"
        }
    ]
}

使用该策略,我使用此AWS CLI命令启动了一个实例:

aws ec2 run-instances --image-id ami-xxx --key-name my-key --security-group-id sg-xxx --instance-type t2.nano

如何调试权限错误

如果添加任何其他参数,则命令可能会失败。

例如,我添加了这个参数:

--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=Temp}]'

这失败了:

  

调用RunInstances操作时发生错误(UnauthorizedOperation):您无权执行此操作。编码授权失败消息:xxx

然后我使用以下方法解密编码的失败消息(使用Admin IAM用户)

aws sts decode-authorization-message --encoded-message xxx

这返回:

{
    "allowed": false,
    "explicitDeny": false,
    "matchedStatements": {
        "items": []
    },
    "failures": {
        "items": []
    },
    "context": {
        "principal": {
            "id": "AIDAxxx",
            "name": "my-user",
            "arn": "arn:aws:iam::123456789012:user/my-user"
        },
        "action": "ec2:CreateTags",
        "resource": "arn:aws:ec2:ap-southeast-2:123456789012:instance/*",
        "conditions": {
            "items": [
                {
                    "key": "aws:Resource",
                    "values": {
                        "items": [
                            {
                                "value": "instance/*"
                            }
                        ]
                    }
                },
                ...
            ]
        }
    }
}

显然问题出在ec2:CreateTags,因为我的命令要求将标签添加到实例中。因此,我需要添加这些权限,或从RunInstances命令中删除tag参数。

<强>琐事

你有没有想过为什么命令被调用RunInstances而不是LaunchInstancesCreateInstances

(我认为)这是因为在Amazon EC2的早期,只有实例存储(没有Amazon Elastic Block Storage(EBS))。因此,无法停止实例,因为这会丢失磁盘内容,并且实例无法再次启动。因此,命令为RunInstancesTerminateInstances

现在,我们可以StartInstancesStopInstances。但是,RunInstances的旧术语仍然存在,这对新用户来说总是有点混乱,因为它不明显是否意味着启动启动