AWS, ограничивающие разрешения для EC2, создает

ehime спросил: 12 мая 2018 в 03:39 в: amazon-web-services

В чем же наиболее ограниченная политика iam, я могу дать пользователю все еще разрешить им создавать EC2? Им политика не нужна ничто другое, я перепутал ее с ней в течение дня и не могу получить правильную комбинацию?


2 ответа

Есть решение
John Rotenstein ответил: 12 мая 2018 в 09:18

Минимальные разрешения на запуск экземпляра Amazon EC2 через интерфейс командной строки AWS - это просто 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}]'

Это не удалось:

(UnauthorizedOperation) при вызове операции RunInstances: у вас нет разрешения на выполнение этой операции. Закодированное сообщение об ошибке авторизации: xxx

Затем я расшифровал сообщение об ошибке с кодировкой (используя пользователя 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, которая всегда немного запутана для новых пользователей, поскольку неясно, означает ли это запуск или start .

ehime ответил: 12 мая 2018 в 09:25
Принял и плюс один вам, сэр, спасибо. Также любите мелочи, lmao
Есть решение
John Rotenstein ответил: 12 мая 2018 в 09:18

Минимальные разрешения на запуск экземпляра Amazon EC2 через интерфейс командной строки AWS - это просто 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}]'

Это не удалось:

(UnauthorizedOperation) при вызове операции RunInstances: у вас нет разрешения на выполнение этой операции. Закодированное сообщение об ошибке авторизации: xxx

Затем я расшифровал сообщение об ошибке с кодировкой (используя пользователя 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, которая всегда немного запутана для новых пользователей, поскольку неясно, означает ли это запуск или start .