2013-11-21 12 views
14

Sto provando a restringere il criterio minimo per eseguire un'immagine macchina predefinita. L'immagine è basata su due istantanee e voglio solo i tipi di istanza "m1.medium" da avviare.Minimo criterio IAM per ec2: RunInstances

Sulla base di questo e con l'aiuto di this page e this article, ho elaborato la seguente politica:

{ 
    "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/*" 
      ] 
     } 
    ] 
} 

La politica restringe l'immagine esatta, istantanee, gruppo di protezione e di coppia di chiavi, lasciando la specifica istanza e volume aperti.

sto usando gli strumenti CLI come segue, come descritto here:

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

Il ~/.aws/config è la seguente:

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

i risultati dei comandi in un You are not authorized to perform this operation messaggio generico e l'autorizzazione codificato messaggio di errore indica che nessuna delle mie istruzioni è stata abbinata e pertanto rifiuta l'azione.

La modifica a "Resource": "*" risolve il problema ovviamente, ma voglio ottenere maggiore comprensione sul motivo per cui quanto sopra non funziona. Mi rendo perfettamente conto che ciò comporta un certo grado di lavoro sulle ipotesi, quindi accolgo con favore qualsiasi idea.

risposta

24

Sono stato contattato da Jeff Barr da Amazon Web Services e mi ha gentilmente aiutato a scoprire qual era il problema.

In primo luogo è necessario decodificare il messaggio errore di autorizzazione utilizzando la seguente istruzione:

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

Assicurarsi che l'IAM utente/ruolo ha l'autorizzazione per l'azione sts:DecodeAuthorizationMessage.

La risposta contiene una chiave DecodedMessage che comprende un altro corpo JSON codificato:

{ 
    "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": { ... } 
    } 
} 

Sotto context => resource mostrerà quali risorse si stava tentando di abbinare contro la politica; come puoi vedere, si aspetta un numero di conto. Il arn documentation dovrebbe quindi essere letto come:

Se non diversamente specificato, sono necessari la regione e il conto.

Aggiungendo il numero di conto o * nel del ARN colpito risolto il problema:

"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

L'ARN per AMI non tiene conto # - quindi è sia vuoto, o "*". Grazie per questo post - non avrei mai risolto questo senza di esso! –

+0

Ho fatto lo stesso come te, ma il mio, l'inizializzazione fallita ... non capisco. Potete per favore condividere la vostra politica completa – Kernelv5

+0

@Shafiulkarim Questa è davvero l'intera politica che ho; Immagino che se questo non risponde alla tua domanda, sentiti libero di chiederne un altro e di inviarmi un ping con il link. –

Problemi correlati