Минимальная политика IAM для ec2: RunInstances

Я пытаюсь сузить минимальную политику для запуска предопределенного образа машины. Образ основан на двух снимках, и я хочу, чтобы запускались только экземпляры типа «m1.medium».

На основании этого и с помощью этой страницы и эту статью, Я выработал такую ​​политику:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1385026304010",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:InstanceType": "m1.medium"
                }
            },
            "Resource": [
                "arn:aws:ec2:us-east-1::instance/*",
                "arn:aws:ec2:us-east-1::image/ami-f1c3e498",
                "arn:aws:ec2:us-east-1::snapshot/snap-e2f51ffa",
                "arn:aws:ec2:us-east-1::snapshot/snap-18ca2000",
                "arn:aws:ec2:us-east-1::key-pair/shenton",
                "arn:aws:ec2:us-east-1::security-group/sg-6af56d02",
                "arn:aws:ec2:us-east-1::volume/*"
            ]
        }
    ]
}

Политика сужает точное изображение, моментальные снимки, группу безопасности и пару ключей, оставляя открытыми конкретный экземпляр и том.

Я использую инструменты CLI следующим образом, как описано здесь:

aws ec2 run-instances --dry-run \
    --image-id ami-f1c3e498 \
    --key-name shenton \
    --security-group-ids sg-6af56d02 \
    --instance-type m1.medium

~/.aws/config выглядит следующим образом:

[default]
output = json
region = us-east-1
aws_access_key_id = ...
aws_secret_access_key = ...

Команда приводит к общему сообщению You are not authorized to perform this operation, а закодированное сообщение об ошибке авторизации указывает, что ни один из моих операторов не был найден, и поэтому оно отклоняет действие.

Очевидно, что переход на "Resource": "*" решает проблему, но я хочу лучше понять, почему вышеперечисленное не работает. Я полностью понимаю, что это требует некоторой степени догадок, поэтому я приветствую любые идеи.


person Ja͢ck    schedule 21.11.2013    source источник


Ответы (1)


Со мной связался Джефф Барр из Amazon Web Services, и он любезно помог мне выяснить, в чем проблема.

Сначала вам нужно расшифровать сообщение об ошибке авторизации, используя следующую инструкцию:

$ aws sts decode-authorization-message --encoded-message 6gO3mM3p....IkgLj8ekf

Убедитесь, что пользователь / роль IAM имеет разрешение на sts:DecodeAuthorizationMessage действие.

Ответ содержит DecodedMessage ключ, содержащий другое тело в кодировке JSON:

{
    "allowed": false,
    "explicitDeny": false,
    "matchedStatements": {
        "items": []
    },
    "failures": {
        "items": []
    },
    "context": {
        "principal": {
            "id": "accesskey",
            "name": "testuser",
            "arn": "arn:aws:iam::account:user/testuser"
        },
        "action": "ec2:RunInstances",
        "resource": "arn:aws:ec2:us-east-1:account:instance/*",
        "conditions": { ... }
    }
}

Под context => resource он покажет, какой ресурс он пытался сопоставить с политикой; как видите, он ожидает номер счета. Поэтому следует прочитать arn документацию в качестве:

Если не указано иное, требуются регион и учетная запись.

Добавление номера учетной записи или * в затронутые ARN устранило проблему:

"Resource": [
    "arn:aws:ec2:us-east-1:*:instance/*",
    "arn:aws:ec2:us-east-1:*:image/ami-f1c3e498",
    "arn:aws:ec2:us-east-1:*:snapshot/snap-e2f51ffa",
    "arn:aws:ec2:us-east-1:*:snapshot/snap-18ca2000",
    "arn:aws:ec2:us-east-1:*:key-pair/shenton",
    "arn:aws:ec2:us-east-1:*:security-group/sg-6af56d02",
    "arn:aws:ec2:us-east-1:*:volume/*"
]
person Ja͢ck    schedule 21.11.2013
comment
В arn для AMI не указан номер учетной записи, поэтому он либо пуст, либо *. Спасибо за этот пост - без него я бы никогда не решил эту проблему! - person curious_george; 29.05.2015
comment
Я сделал то же самое, что и вы, но моя инициализация не удалась ... не понимаю. Не могли бы вы поделиться своей полной политикой - person Kernelv5; 25.06.2015
comment
@Shafiulkarim Вот и вся моя политика; Думаю, если это не ответ на ваш вопрос, не стесняйтесь задать другой и отправить мне ссылку. - person Ja͢ck; 26.06.2015
comment
Да, я добавляю новую ссылку на сообщение. - person Kernelv5; 26.06.2015
comment
Я создал небольшую функцию оболочки, которая анализирует сообщение, отменяет его экранирование и распечатывает. это, учитывая только начальное закодированное сообщение. - person Xiong Chiamiov; 15.04.2016
comment
Команда STS decode-authorization-message помогла мне решить мою проблему, которая отличалась от вашей. Спасибо за это! - person AnthonyD973; 13.02.2019
comment
В конце добавьте: $ aws sts decode-authorization-message --encoded-message <message> --output text, чтобы было легче форматировать. - person Edenshaw; 19.05.2021