2014-06-25 12 views
8

Sto cercando di creare l'istanza EC2 tramite ansible utilizzando ruoli IAM ma mentre il lancio di nuova istanza ottengo l'erroreAWS EC2 esempio creare tramite ruoli Ansible IAM instance_profile_name UnauthorizedOperation: Errore

failed: [localhost] => (item= IAMRole-1) => {"failed": true, "item": " IAMRole-1"} 
msg: Instance creation failed => UnauthorizedOperation: You are not authorized to perform 
this operation. Encoded authorization failure message: Ckcjt2GD81D5dlF6XakTSDypnwrgeQb0k 
ouRMKh3Ol1jue553EZ7OXPt6fk1Q1-4HM-tLNPCkiX7ZgJWXYGSjHg2xP1A9LR7KBiXYeCtFKEQIC 
W9cot3KAKPVcNXkHLrhREMfiT5KYEtrsA2A-xFCdvqwM2hNTNf7Y6VGe0Z48EDIyO5p5DxdNFsaSChUcb 
iRUhSyRXIGWr_ZKkGM9GoyoVWCBk3Ni2Td7zkZ1EfAIeRJobiOnYXKE6Q 

considerando che il ruolo IAM ha accesso completo EC2 , con la seguente politica

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Action": "ec2:*", 
     "Effect": "Allow", 
     "Resource": "*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": "elasticloadbalancing:*", 
     "Resource": "*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": "cloudwatch:*", 
     "Resource": "*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": "autoscaling:*", 
     "Resource": "*" 
    } 
    ] 
} 

Qualsiasi suggerimento, per favore.

risposta

10

Il problema qui non è con lo IAM Role for Amazon EC2 stesso, piuttosto che voi (cioè le credenziali AWS che utilizzate voi stessi) sembra mancare l'autorizzazione iam:PassRole che è richiesta per "passare" quel ruolo a un'istanza EC2 richiesta all'avvio, vedere la sezione Autorizzazioni necessarie per l'utilizzo di ruoli con Amazon EC2 entro Granting Applications that Run on Amazon EC2 Instances Access to AWS Resources per i dettagli:

per avviare un'istanza con un ruolo, lo sviluppatore deve avere l'autorizzazione per lanciare istanze EC2 di Amazon e il permesso di passare ruoli IAM.

Il seguente criterio di esempio consente agli utenti di utilizzare la console di gestione AWS per avviare un'istanza con un ruolo. Il criterio consente a un utente di di passare qualsiasi ruolo e di eseguire tutte le azioni Amazon EC2 specificando un asterisco (*). L'azione ListInstanceProfiles consente agli utenti di visualizzare tutti i ruoli disponibili nell'account AWS.

politica Esempio che concede un permesso all'utente di lanciare un'istanza con qualsiasi ruolo utilizzando la console di Amazon EC2

{ 
    "Version": "2012-10-17", 
    "Statement": [{ 
    "Effect": "Allow", 
    "Action": [ 
     "iam:PassRole", 
     "iam:ListInstanceProfiles", 
     "ec2:*" 
    ], 
    "Resource": "*" 
    }] 
} 

La ragione per richiedere questo riferimento indiretto tramite il permesso PassRole è la capacità di limitare il ruolo che un utente può passare a un'istanza Amazon EC2 quando l'utente avvia l'istanza:

Questo aiuta a impedire all'utente di eseguire applicazioni che hanno autorizzazioni maggiori di quelle che l'utente è stato concesso, ovvero, dal essere in grado di ottenere privilegi elevati. Ad esempio, immagina che l'utente di Alice abbia le autorizzazioni solo per avviare le istanze Amazon EC2 e per funzioni con bucket di Amazon S3, ma il ruolo che passa a un'istanza Amazon EC2 dispone delle autorizzazioni per lavorare con IAM e DynamoDB. In tal caso, Alice potrebbe essere in grado di avviare l'istanza, accedere a esso, ottenere le credenziali di sicurezza temporanee e quindi eseguire azioni IAM o DynamoDB per cui non è autorizzata la .

Si potrebbe desiderare di leggere la mia risposta a How to specify an IAM role for an Amazon EC2 instance being launched via the AWS CLI? per una spiegazione più elaborata, che collega anche al bel articolo di Mike Pope su Granting Permission to Launch EC2 Instances with IAM Roles (PassRole Permission), il che spiega l'oggetto da un punto di vista AWS.

Problemi correlati