Wie kann eine IAM-Rolle für eine Amazon EC2-Instanz angegeben werden, die über die AWS-CLI gestartet wird?

20

Ich verwende den Befehl "aws ec2 run-instance" (über die AWS Command Line Interface (CLI) ), um eine Amazon EC2- Instanz zu starten . Ich möchte eine IAM-Rolle für die zu startende EC2-Instanz festlegen . Die IAM-Rolle ist konfiguriert und kann beim Starten einer Instanz über die AWS-Webbenutzeroberfläche erfolgreich verwendet werden. Aber wenn ich dies mit diesem Befehl und der Option "--iam-instance-profile" versuche, ist dies fehlgeschlagen. Wenn Sie "aws ec2 run-instance help" ausführen, werden die Unterfelder Arn = und Name = für den Wert angezeigt. Wenn ich versuche, den Arn mit "aws iam list-instance-profiles" nachzuschlagen, wird folgende Fehlermeldung ausgegeben:

Ein Client-Fehler (AccessDenied) ist aufgetreten: Benutzer: arn: aws: sts :: xxxxxxxxxx: angenommene Rolle / Shell / i-15c2766d ist nicht berechtigt, Folgendes auszuführen: iam: ListInstanceProfiles für Ressource: arn: aws: iam :: xxxxxxxxxxxx: Instanz -Profil/

(wobei xxxxxxxxxxxx meine 12-stellige AWS-Kontonummer ist)

Ich habe die Arn-Zeichenfolge über die Web-Benutzeroberfläche nachgeschlagen und diese über "--iam-instance-profile Arn = arn: aws: iam :: xxxxxxxxxxxx: instance-profile / shell" im Befehl run-instance verwendet :

Ein Clientfehler (UnauthorizedOperation) ist aufgetreten: Sie sind nicht berechtigt, diesen Vorgang auszuführen.

Wenn ich die Option "--iam-instance-profile" vollständig auslasse, wird die Instanz gestartet, verfügt jedoch nicht über die von mir benötigte IAM-Rolleneinstellung. Die Berechtigung scheint also etwas mit der Verwendung von "--iam-instance-profile" oder dem Zugriff auf IAM-Daten zu tun zu haben. Ich habe es im Falle von AWS-Pannen mehrmals wiederholt (sie treten manchmal auf) und es war kein Erfolg zu verzeichnen.

Ich vermutete, dass es möglicherweise eine Einschränkung gibt, dass eine Instanz mit einer IAM-Rolle keine Instanz mit einer leistungsstärkeren IAM-Rolle starten darf. In diesem Fall hat die Instanz, in der ich den Befehl ausführe, dieselbe IAM-Rolle, die ich zu verwenden versuche. namens "shell" (obwohl ich auch versucht habe, eine andere zu verwenden, kein Glück).

  • Ist das Festlegen einer IAM-Rolle nicht einmal für eine Instanz zulässig (über ihre IAM-Rollenanmeldeinformationen)?

  • Ist eine höhere IAM-Rollenberechtigung erforderlich, um IAM-Rollen zu verwenden, als zum Starten einer einfachen Instanz erforderlich ist?

  • Ist "--iam-instance-profile" der geeignete Weg, um eine IAM-Rolle anzugeben?

  • Muss ich eine Teilmenge der Arn-Zeichenfolge verwenden oder auf andere Weise formatieren?

  • Ist es möglich, eine IAM-Rolle einzurichten, die beliebige IAM-Rollenzugriffe ausführen kann (möglicherweise ein "Super Root IAM" ... aus dem dieser Name besteht)?

Zu Ihrer Information, alles beinhaltet Linux, das auf den Instanzen ausgeführt wird. Außerdem starte ich all dies von einer Instanz aus, da ich diese Tools nicht auf meinem Desktop installieren konnte. Das und ich möchten meine IAM-Benutzeranmeldeinformationen nicht auf einem AWS-Speicher ablegen, wie von AWS hier empfohlen .

nachdem geantwortet:

Ich habe die Berechtigung zum Starten der Instanz von "PowerUserAccess" (im Gegensatz zu "AdministratorAccess") nicht erwähnt, da ich nicht wusste, dass zum Zeitpunkt der Frage ein zusätzlicher Zugriff erforderlich war. Ich nahm an, dass die IAM-Rolle "Informationen" war, die mit dem Start verbunden waren. Aber es ist wirklich mehr als das. Es ist eine Erteilung der Erlaubnis.

Skaperen
quelle

Antworten:

23

Aktualisieren

Mike Pope hat einen schönen Artikel über das Gewähren von Berechtigungen zum Starten von EC2-Instanzen mit IAM-Rollen (PassRole Permission) im AWS Security Blog veröffentlicht , in dem das Thema aus AWS-Sicht erläutert wird.


Erstantwort

Die Antwort von Skaperen ist teilweise richtig (+1), aber etwas ungenau / irreführend wie folgt (die Erklärung scheint ein bisschen zu komplex für einen Kommentar, daher diese separate Antwort):

Um eine EC2-Instanz mit einer IAM-Rolle zu starten, ist Administratorzugriff auf die IAM-Funktion erforderlich.

Dies ist als solches korrekt und deutet auf das zugrunde liegende Problem hin, die erforderlichen Administratorrechte sind jedoch eher begrenzt, sodass die folgende Schlussfolgerung gezogen werden kann:

Da IAM-Rollen Berechtigungen erteilen, muss eindeutig ein Sicherheitsproblem behoben werden. Sie möchten nicht, dass IAM-Rollen eine Möglichkeit darstellen, die Eskalation von Berechtigungen zu ermöglichen.

... ist ein bisschen irreführend, sofern das potenzielle Sicherheitsproblem richtig angegangen werden kann. Das Thema wird in Gewähren von Anwendungen, die auf Amazon EC2-Instances ausgeführt werden, für den Zugriff auf AWS-Ressourcen behandelt :

Mithilfe von IAM-Rollen können Sie Anmeldeinformationen für Anwendungen verwalten, die auf Amazon EC2-Instanzen ausgeführt werden. Wenn Sie Rollen verwenden, müssen Sie keine AWS-Anmeldeinformationen an Amazon EC2-Instanzen verteilen. Stattdessen können Sie eine Rolle mit den Berechtigungen erstellen, die Anwendungen benötigen, wenn sie auf Amazon EC2 ausgeführt werden, und andere AWS-Ressourcen aufrufen. Wenn Entwickler eine Amazon EC2-Instanz starten, können sie die Rolle angeben, die Sie für die Zuordnung zur Instanz erstellt haben. Anwendungen, die auf der Instanz ausgeführt werden, können dann die Rollenanmeldeinformationen zum Signieren von Anforderungen verwenden.

Im vorliegenden Anwendungsfall handelt es sich bei den genannten Entwicklern, die eine Amazon EC2-Instanz starten, tatsächlich um EC2-Instanzen selbst, was anscheinend zu dem skizzierten Sicherheitsrisiko Skaperen führt. Dies ist jedoch nicht wirklich der Fall, wie aus der Beispielrichtlinie im Abschnitt Erforderliche Berechtigungen für die Verwendung von Rollen mit Amazon EC2 hervorgeht :

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

Ist iam:PassRolealso tatsächlich die einzige erforderliche IAM-Berechtigung, und obwohl dies technisch gesehen administrativer Natur ist, ist dies nicht so weitreichend - natürlich würde die obige Beispielrichtlinie es weiterhin ermöglichen, Berechtigungen durch Auflisten zu eskalieren und im Gegenzug jede verfügbare Rolle zu übergeben. Dies kann jedoch verhindert werden, indem nur die Rollen angegeben werden, deren Weitergabe für den jeweiligen Anwendungsfall erwünscht / sicher ist. Dies wird im Abschnitt Einschränken, welche Rollen an Amazon EC2-Instanzen weitergegeben werden können (Verwendung von PassRole) erläutert :

Sie können die Berechtigung PassRole verwenden, um zu verhindern, dass Benutzer eine Rolle an Amazon EC2 übergeben, die über mehr Berechtigungen verfügt, als dem Benutzer bereits erteilt wurde, und dann Anwendungen mit den erhöhten Berechtigungen für diese Rolle ausführen. Erlauben Sie in der Rollenrichtlinie die Aktion PassRole und geben Sie eine Ressource an (z. B. arn: aws: iam :: 111122223333: role / ec2Roles / *), um anzugeben, dass nur eine bestimmte Rolle oder ein Satz von Rollen an eine Amazon EC2-Instanz übergeben werden kann .

Die jeweilige Beispielrichtlinie entspricht genau dem vorliegenden Anwendungsfall, dh sie gewährt die Berechtigung zum Starten einer Instanz mit einer Rolle mithilfe der Amazon EC2-API :

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect":"Allow",
      "Action":"ec2:RunInstances",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"iam:PassRole",
      "Resource":"arn:aws:iam::123456789012:role/Get-pics"
    }]
}
Steffen Opel
quelle
Danke für die Infos zu iam: PassRole. Das ist detaillierter als ich zuvor erfahren habe, es zeigt viel mehr, als durch Konfigurieren der Berechtigungen wie folgt getan werden kann.
Skaperen
1

Um eine EC2-Instanz mit einer IAM-Rolle zu starten, ist Administratorzugriff auf die IAM-Funktion erforderlich. Dies gilt auch dann, wenn die neue Instanz genau dieselbe Rolle haben soll wie die Instanz, die den Start ausführt. Die Instanz, von der ich gestartet habe, hatte die Berechtigung "PowerUserAccess", mit der das Starten einer Instanz, nicht jedoch der IAM-Rollenzugriff möglich war. Sobald ich die Berechtigung in der Startinstanz auf "AdministratorAccess" erhöht habe, hat es funktioniert.

Da IAM-Rollen Berechtigungen erteilen, muss eindeutig ein Sicherheitsproblem behoben werden. Sie möchten nicht, dass IAM-Rollen eine Möglichkeit darstellen, die Eskalation von Berechtigungen zu ermöglichen. Dies bedeutet jedoch auch, dass zum Gewähren einer IAM-Rolle die startende Instanz über "AdministratorAccess" verfügen muss oder Benutzerzugriff / geheime Schlüssel (mit einer solchen Berechtigung) innerhalb der Instanz verwenden muss (nicht empfohlen). Dies würde das Gewähren einer IAM-Rolle ermöglichen.

Die Möglichkeit, eine Instanz mit derselben Berechtigung (derselben IAM-Rolle) zu starten, über die die startende Instanz verfügt, ist hilfreich. EC2 oder IAM verfügen jedoch entweder nicht über diese Granularität oder nicht über die Mittel, um dies sicher zu überprüfen .

Skaperen
quelle
1
Sie haben das zugrunde liegende Problem richtig analysiert / beschrieben (+1), aber Ihre Schlussfolgerungen sind etwas ungenau / irreführend. Ich habe eine separate Antwort hinzugefügt , um zu erläutern, wie das potenzielle Sicherheitsproblem von IAM behandelt wird.
Steffen Opel