2013-11-21 9 views
14

Я пытаюсь сузить минимальную политику для запуска предопределенного машинного образа. Изображение основано на двух моментальных снимках, и мне нужны только типы экземпляров «m1.medium».Минимальная политика IAM для ec2: RunInstances

Основываясь на том, что и с помощью this page и this article, я разработал следующую политику:

{ 
    "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 следующим образом, как описано here:

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": "*" решает проблему, очевидно, но я хочу получить более полное представление о том, почему приведенное выше не работает. Я полностью понимаю, что это связано с некоторой догадкой, поэтому я приветствую любые идеи.

ответ

24

С нами связался Джефф Барр из 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 documentation следует читать как:

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

Добавление номера счета или * в основной проблемы затронутой 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/*" 
] 
+0

ARN МАСС не принимает расходную # - так это либо пустой, либо «*». Спасибо за этот пост - я бы никогда не разрешил это без него! –

+0

Я сделал то же самое, что и вы, но мой, инициализация не удалась ... не понимаю. Можете ли вы поделиться своей полной политикой? – Kernelv5

+0

@Shafiulkarim Это действительно вся моя политика; Я думаю, если это не ответит на ваш вопрос, не стесняйтесь спрашивать другого и пинговать мне ссылку. –

Смежные вопросы