Come specificare un ruolo IAM per un'istanza Amazon EC2 avviata tramite l'interfaccia della riga di comando di AWS?


20

Sto usando il comando "aws ec2 run -stances" (dall'interfaccia della riga di comando di AWS (CLI) ) per avviare un'istanza di Amazon EC2 . Voglio impostare un ruolo IAM per l'istanza EC2 che sto lanciando. Il ruolo IAM è configurato e posso utilizzarlo correttamente all'avvio di un'istanza dall'interfaccia utente Web di AWS. Ma quando provo a farlo usando quel comando e l'opzione "--iam-instance-profile", fallisce. Fare "aiuto per istanze di esecuzione di aws ec2" mostra Arn = e Name = sottocampi per il valore. Quando provo a cercare Arn usando "aws iam list-istanza-profili", viene visualizzato questo messaggio di errore:

Si è verificato un errore client (AccessDenied): Utente: arn: aws: sts :: xxxxxxxxxxxx: assunto ruolo / shell / i-15c2766d non autorizzato ad eseguire: iam: ListInstanceProfiles su risorsa: arn: aws: iam :: xxxxxxxxxxxx: istanza -profilo/

(dove xxxxxxxxxxxx è il mio numero di conto AWS a 12 cifre)

Ho cercato la stringa Arn tramite l'interfaccia utente Web e l'ho usata tramite "--iam-instance-profile Arn = arn: aws: iam :: xxxxxxxxxxxx: istanza-profilo / shell" sul comando run-instance, e questo non è riuscito con :

Si è verificato un errore client (UnauthorizedOperation): non sei autorizzato a eseguire questa operazione.

Se lascio completamente l'opzione "--iam-instance-profile", l'istanza si avvierà ma non avrà l'impostazione del ruolo IAM di cui ho bisogno. Quindi l'autorizzazione sembra avere qualcosa a che fare con l'uso di "--iam-instance-profile" o con l'accesso ai dati IAM. Ho ripetuto più volte in caso di anomalie AWS (a volte accadono) e nessun successo.

Sospettavo che forse c'è una restrizione che un'istanza con un ruolo IAM non è autorizzata ad avviare un'istanza con un ruolo IAM più potente. Ma in questo caso, l'istanza in cui sto eseguendo il comando ha lo stesso ruolo IAM che sto cercando di utilizzare. chiamato "shell" (anche se ho anche provato a usarne un altro, senza fortuna).

  • L'impostazione di un ruolo IAM non è nemmeno consentita da un'istanza (tramite le sue credenziali del ruolo IAM)?

  • È necessaria un'autorizzazione di ruolo IAM superiore necessaria per utilizzare i ruoli IAM rispetto a quella necessaria per avviare una semplice istanza?

  • "--Iam-instance-profile" è il modo appropriato per specificare un ruolo IAM?

  • Devo usare un sottoinsieme della stringa Arn o formattarlo in qualche altro modo?

  • È possibile impostare un ruolo IAM in grado di eseguire qualsiasi accesso al ruolo IAM (forse un "Super Root IAM" ... inventando questo nome)?

Cordiali saluti, tutto coinvolge Linux in esecuzione sulle istanze. Inoltre, sto eseguendo tutto questo da un'istanza perché non sono riuscito a installare questi strumenti sul mio desktop. Questo e non voglio mettere le mie credenziali utente IAM su qualsiasi spazio di archiviazione AWS come consigliato da AWS qui .

dopo risposto:

Non ho menzionato l'autorizzazione all'istanza di avvio di "PowerUserAccess" (rispetto a "AdministratorAccess") perché non mi rendevo conto che era necessario un ulteriore accesso al momento della domanda. Ho assunto che il ruolo IAM fosse "informazione" allegato al lancio. Ma è davvero di più. È una concessione dell'autorizzazione.

Risposte:


23

Aggiornare

Mike Pope ha pubblicato un bell'articolo sulla concessione dell'autorizzazione a lanciare istanze EC2 con ruoli IAM (autorizzazione PassRole) sul blog sulla sicurezza di AWS , che spiega l'argomento dal punto di vista di AWS.


Risposta iniziale

La risposta di Skaperen è parzialmente corretta (+1), ma leggermente imprecisa / fuorviante come segue (la spiegazione sembra un po 'troppo complessa per un commento, quindi questa risposta separata):

Per avviare un'istanza EC2 con un ruolo IAM è necessario l'accesso amministrativo alla funzione IAM.

Questo è corretto in quanto tale e indica il problema di base, ma le autorizzazioni amministrative richieste sono piuttosto limitate, quindi la seguente conclusione ...

Poiché i ruoli IAM concedono le autorizzazioni, è chiaramente necessario risolvere un problema di sicurezza. Non vorresti che i ruoli IAM fossero un mezzo per consentire l'escalation delle autorizzazioni.

... è un po 'fuorviante, nella misura in cui il potenziale problema di sicurezza può essere affrontato correttamente. L'argomento è affrontato nella concessione di applicazioni eseguite su istanze Amazon EC2 per l'accesso alle risorse AWS :

Puoi utilizzare i ruoli IAM per gestire le credenziali per le applicazioni eseguite su istanze Amazon EC2. Quando usi i ruoli, non devi distribuire le credenziali AWS alle istanze Amazon EC2. Invece, puoi creare un ruolo con le autorizzazioni necessarie per le applicazioni quando vengono eseguite su Amazon EC2 ed effettuare chiamate ad altre risorse AWS. Quando gli sviluppatori lanciano un'istanza di Amazon EC2, possono specificare il ruolo che hai creato da associare all'istanza. Le applicazioni eseguite sull'istanza possono quindi utilizzare le credenziali del ruolo per firmare le richieste.

Ora, nel caso d'uso a portata di mano, gli sviluppatori citati [che] lanciano un'istanza Amazon EC2 sono in realtà istanze EC2 stesse, il che sembra produrre il problema di sicurezza della cattura 22 che Skaperen ha delineato. Questo non è davvero il caso, come illustrato dalla politica di esempio nella sezione Autorizzazioni necessarie per l'utilizzo dei ruoli con Amazon EC2 :

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

Quindi, iam:PassRolein effetti, è l'unica autorizzazione IAM richiesta e, sebbene tecnicamente di natura amministrativa, ciò non è di vasta portata - ovviamente, la politica di esempio sopra consentirà comunque di intensificare le autorizzazioni mediante l'elenco e, a sua volta, passando qualsiasi ruolo disponibile, ma questo può essere evitato specificando solo quei ruoli che si desidera / possono passare in sicurezza per il caso d'uso a portata di mano - questo è delineato nella sezione Limitazione dei ruoli che possono essere passati alle istanze Amazon EC2 (Uso di PassRole) :

Puoi utilizzare l'autorizzazione PassRole per impedire agli utenti di passare un ruolo ad Amazon EC2 che dispone di più autorizzazioni di quelle già concesse all'utente e quindi di eseguire applicazioni con privilegi elevati per quel ruolo. Nella politica dei ruoli, consenti l'azione PassRole e specifica una risorsa (come arn: aws: iam :: 111122223333: role / ec2Roles / *) per indicare che solo un ruolo specifico o un insieme di ruoli può essere passato a un'istanza Amazon EC2 .

La rispettiva politica di esempio illustra esattamente il caso d'uso a portata di mano, ovvero concede l' autorizzazione per avviare un'istanza con un ruolo utilizzando l'API Amazon EC2 :

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect":"Allow",
      "Action":"ec2:RunInstances",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"iam:PassRole",
      "Resource":"arn:aws:iam::123456789012:role/Get-pics"
    }]
}

Grazie per le informazioni su iam: PassRole. Questo è più dettagliato di quello che avevo imparato prima, mostra molto più di quanto si possa fare configurando le autorizzazioni in questo modo.
Skaperen,

1

Per avviare un'istanza EC2 con un ruolo IAM è necessario l'accesso amministrativo alla funzione IAM. Questo vale anche se la nuova istanza deve avere esattamente lo stesso ruolo dell'istanza che sta avviando. L'istanza da cui ho avviato aveva l'autorizzazione "PowerUserAccess", che consentiva l'avvio di un'istanza, ma non l'accesso al ruolo IAM. Una volta che ho avanzato l'autorizzazione nell'istanza di avvio a "AdministratorAccess", ha funzionato.

Poiché i ruoli IAM concedono le autorizzazioni, è chiaramente necessario risolvere un problema di sicurezza. Non vorresti che i ruoli IAM fossero un mezzo per consentire l'escalation delle autorizzazioni. Ma ciò significa anche che per garantire qualsiasi ruolo IAM, l'istanza di avvio deve avere "AdministratorAccess" o utilizzare l'accesso utente / chiavi segrete (con tale autorizzazione) all'interno dell'istanza (non consigliato), che consentirebbe di concedere qualsiasi ruolo IAM.

Sarebbe utile poter avviare un'istanza con la stessa autorizzazione (stesso ruolo IAM) detenuta dall'istanza durante l'avvio, ma EC2 o IAM non hanno questo livello di granularità o non hanno i mezzi per verificarlo in modo sicuro .


1
Hai analizzato / descritto correttamente il problema sottostante (+1), ma le tue conclusioni sono leggermente imprecise / fuorvianti - Ho aggiunto una risposta separata per spiegare correttamente come il potenziale problema di sicurezza viene affrontato da IAM.
Steffen Opel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.