AWS 限制 EC2 创建的策略权限
AWS limiting policy permissions for EC2 create
我可以给用户的最有限的 iam 策略是什么,仍然允许他们创建 EC2?他们的政策不需要任何其他东西,我断断续续搞了一天,还是找不到正确的组合?
通过 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}]'
这失败了:
An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation. Encoded authorization failure message: 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
命令中删除标记参数。
知识问答
您是否想过为什么该命令被称为 RunInstances
而不是 LaunchInstances
或 CreateInstances
?
(我认为)是因为早期的Amazon EC2,只有Instance Storage(没有Amazon Elastic Block Storage (EBS))。因此,无法停止实例,因为这会丢失磁盘内容并且无法再次启动该实例。因此,命令是 RunInstances
和 TerminateInstances
.
这些天,我们可以 StartInstances
和 StopInstances
。然而,RunInstances
的旧术语仍然存在,这对于新用户来说总是有点混乱,因为它的意思是 launch 还是 start[= 并不明显60=].
我可以给用户的最有限的 iam 策略是什么,仍然允许他们创建 EC2?他们的政策不需要任何其他东西,我断断续续搞了一天,还是找不到正确的组合?
通过 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}]'
这失败了:
An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation. Encoded authorization failure message: 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
命令中删除标记参数。
知识问答
您是否想过为什么该命令被称为 RunInstances
而不是 LaunchInstances
或 CreateInstances
?
(我认为)是因为早期的Amazon EC2,只有Instance Storage(没有Amazon Elastic Block Storage (EBS))。因此,无法停止实例,因为这会丢失磁盘内容并且无法再次启动该实例。因此,命令是 RunInstances
和 TerminateInstances
.
这些天,我们可以 StartInstances
和 StopInstances
。然而,RunInstances
的旧术语仍然存在,这对于新用户来说总是有点混乱,因为它的意思是 launch 还是 start[= 并不明显60=].