Минимальные разрешения для запуска экземпляра Amazon EC2 через Интерфейс командной строки AWS (CLI) просто RunInstances
:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RunInstances",
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "*"
}
]
}
Используя эту политику, я запустилэкземпляр с этой командой CLI AWS:
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}]'
Сбой:
Произошла ошибка (UnauthorizedOperation) при вызове операции RunInstances: у вас нет прав на выполнениеэта операция.Закодированное сообщение об ошибке авторизации: 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 было только хранилище экземпляров (без Amazon Elastic Block Storage (EBS)).Поэтому было невозможно остановить экземпляр, так как это потеряло бы содержимое диска, и экземпляр не мог быть запущен снова.Таким образом, команды были RunInstances
и TerminateInstances
.
В наши дни мы можем StartInstances
и StopInstances
.Однако старая терминология RunInstances
остается, что всегда немного сбивает с толку новых пользователей, поскольку неясно, означает ли это запуск или начало .