Identitätsbasierte Richtlinien für Amazon EC2 - Amazon Elastic Compute Cloud

Identitätsbasierte Richtlinien für Amazon EC2

Standardmäßig verfügen Benutzer nicht über die Berechtigung zum Erstellen oder Ändern von Amazon EC2-Ressourcen oder zum Ausführen von Aufgaben mithilfe der Amazon EC2-API, der Amazon EC2-Konsole oder der CLI. Damit Benutzer Ressourcen erstellen oder ändern und Aufgaben ausführen können, müssen Sie IAM-Richtlinien erstellen, die Benutzern die Berechtigung zur Verwendung der spezifischen Ressourcen und API-Aktionen gewähren, die sie benötigen. Anschließend fügen Sie diese Richtlinien den Benutzern, Gruppen oder IAM-Rollen an, die diese Berechtigungen benötigen.

Wenn Sie eine Richtlinie einem Benutzer, einer Benutzergruppe oder einer Rolle zuweisen, kann diese dem Benutzer die Berechtigung zur Durchführung der angegebenen Aufgaben auf den angegebenen Ressourcen gewähren oder verweigern. Weitere allgemeine Informationen zu IAM-Richtlinien finden Sie unter Berechtigungen und Richtlinien in IAM im IAM-Benutzerhandbuch. Weitere Informationen zum Verwalten und Erstellen von IAM-Richtlinien finden Sie unter Verwalten von IAM-Richtlinien.

Eine IAM-Richtlinie erteilt bzw. verweigert die Berechtigungen, eine oder mehrere Amazon EC2-Aktionen auszuführen. Zudem muss die Richtlinie die Ressourcen benennen, die für diese Aktion verwendet werden dürfen. Dabei kann es sich um alle Ressourcen oder ggf. auch um bestimmte Ressourcen handeln. Eine Richtlinie kann auch Bedingungen enthalten, die für eine Ressource gelten.

Zunächst können Sie überprüfen, ob die AWS-verwalteten Richtlinien für Amazon EC2 Ihren Anforderungen entsprechen. Sie können aber Ihre eigenen benutzerdefinierten Richtlinien erstellen. Weitere Informationen finden Sie unter Von AWS verwaltete Richtlinien für Amazon EC2.

Richtliniensyntax

Eine IAM-Richtlinie ist ein JSON-Dokument, das eine oder mehrere Anweisungen enthält. Jede Anweisung ist folgendermaßen strukturiert.

{ "Statement":[{ "Effect":"effect", "Action":"action", "Resource":"arn", "Condition":{ "condition":{ "key":"value" } } } ] }

Eine Anweisung kann aus verschiedenen Elementen bestehen:

  • Effect: Der effect-Wert kann Allow oder Deny lauten. -Benutzer verfügen standardmäßig nicht über die Berechtigung zur Verwendung von Ressourcen und API-Aktionen. Daher werden alle Anfragen abgelehnt. Dieser Standardwert kann durch eine explizite Zugriffserlaubnis überschrieben werden. Eine explizite Zugriffsverweigerung überschreibt jedwede Zugriffserlaubnis.

  • Action: Mit action wird die API-Aktion spezifiziert, für die Sie Berechtigungen erteilen oder verweigern. Weitere Informationen zur Spezifizierung von action finden Sie unter Aktionen für Amazon EC2.

  • Resource: Die von einer Aktion betroffene Ressource. Bei einigen Amazon EC2-API-Aktionen lassen sich bestimmte Ressourcen, die mit der Aktion erstellt oder geändert werden können, in die Richtlinie einbinden. Sie legen eine Ressource unter Verwendung eines Amazon-Ressourcennamens (ARN) oder eines Platzhalters (*) fest, um anzugeben, dass die Anweisung für alle Ressourcen gilt. Weitere Informationen finden Sie unter Unterstützte Berechtigungen auf Ressourcenebene für Amazon EC2-API-Aktionen.

  • Condition: Bedingungen sind optional. Mit ihrer Hilfe können Sie bestimmen, wann Ihre Richtlinie wirksam ist. Weitere Informationen zur Angabe von Bedingungen für Amazon EC2 finden Sie unter Bedingungsschlüssel für Amazon EC2.

Weitere Informationen zu Richtlinienanforderungen finden Sie in der IAM-JSON-Richtlinienreferenz im IAM-Benutzerhandbuch. Beispiele mit IAM-Richtlinienanweisungen für Amazon EC2 finden Sie unter Beispielrichtlinien zur Steuerung des Zugriffs auf die Amazon-EC2-API.

Aktionen für Amazon EC2

In einer IAM-Richtlinienanweisung können Sie jede API-Aktion von jedem Service, der IAM unterstützt, angeben. Bei Amazon EC2 setzen Sie folgendes Präfix vor den Namen der API-Aktion: ec2:. Zum Beispiel ec2:RunInstances und ec2:CreateImage.

Um mehrere Aktionen in einer einzigen Anweisung anzugeben, trennen Sie sie folgendermaßen mit Kommas:

"Action": ["ec2:action1", "ec2:action2"]

Sie können auch mehrere Aktionen mittels Platzhaltern angeben. Beispielsweise können Sie alle Aktionen festlegen, deren Name mit dem Wort "Describe" beginnt:

"Action": "ec2:Describe*"
Anmerkung

Derzeit unterstützen die Amazon-EC2-Describe*-API-Aktionen Berechtigungen auf Ressourcenebene nicht. Weitere Informationen zu Berechtigungen auf Ressourcenebene für Amazon EC2 finden Sie unter Identitätsbasierte Richtlinien für Amazon EC2.

Um alle Amazon EC2-API-Aktionen anzugeben, verwenden Sie den Platzhalter * folgendermaßen:

"Action": "ec2:*"

Eine Liste von Amazon-EC2-Aktionen finden Sie unter von Amazon EC2 definierte Aktionen in der Service-Autorisierungs-Referenz.

Unterstützte Berechtigungen auf Ressourcenebene für Amazon EC2-API-Aktionen

Berechtigungen auf Ressourcenebene bedeutet, dass Sie angeben können, für welche Ressourcen die Benutzer Aktionen ausführen dürfen. Amazon EC2 unterstützt teilweise Berechtigungen auf Ressourcenebene. Das heißt, Sie können bei bestimmten Amazon EC2-Aktionen kontrollieren, wann die Benutzer diese Aktionen verwenden dürfen. Dies basiert auf Bedingungen, die erfüllt sein müssen oder auf bestimmten Ressourcen, die von den Benutzern verwendet werden dürfen. Zum Beispiel können Sie Benutzern die Berechtigungen erteilen, Instances zu starten, aber nur für einen bestimmten Typ und nur mithilfe eines bestimmten AMI.

Um eine Ressource in einer IAM-Richtlinienanweisung anzugeben, verwenden Sie deren Amazon-Ressourcennamen (ARN). Mehr Informationen zur Angabe des ARN-Werts erhalten Sie unter Amazon-Ressourcennamen (ARNs) für Amazon EC2. Wenn eine API-Aktion einzelne ARNs nicht unterstützt, müssen Sie einen Platzhalter (*) verwenden, um anzugeben, dass alle Ressourcen von der Aktion betroffen sein können.

Tabellen, die identifizieren, welche Amazon EC2-API-Aktionen Berechtigungen auf Ressourcenebene unterstützen, und die ARNs und Bedingungsschlüssel, die Sie in einer Richtlinie verwenden können, finden Sie unter Aktionen, Ressourcen und Bedingungsschlüssel für Amazon EC2.

Beachten Sie, dass Sie Tag (Markierungen)-basierte Berechtigungen auf Ressourcenebene in den IAM-Richtlinien anwenden können, die Sie für Amazon EC2-API-Aktionen verwenden. Dies ermöglicht Ihnen eine bessere Kontrolle darüber, welche Ressourcen ein Benutzer erstellen, ändern oder verwenden kann. Weitere Informationen finden Sie unter Berechtigung zum Markieren von Amazon-EC2-Ressourcen während der Erstellung erteilen.

Amazon-Ressourcennamen (ARNs) für Amazon EC2

Jede IAM-Richtlinienanweisung gilt für die Ressourcen, die Sie mithilfe ihrer ARNs angegeben haben.

Ein ARN weist die folgende generelle Syntax auf:

arn:aws:[service]:[region]:[account-id]:resourceType/resourcePath
Service nicht zulässig

Der Service (z. , ec2).

Region

Die Region für die Ressource (z. , us-east-1).

account-id

Die AWS-Konto-ID ohne Bindestriche (z. B. 123456789012)

resourceType

Der Typ der Ressource (z. , instance).

resourcePath

Ein Pfad zur Identifizierung der Ressource. Sie können in den Pfaden das Platzhalterzeichen Sternchen (*) verwenden.

Verwenden Sie beispielsweise den ARN wie folgt, um eine bestimmte Instance (i-1234567890abcdef0) in der Anweisung anzugeben.

"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0"

Sie können auch alle Instances angeben, die zu einem bestimmten Konto gehören, indem Sie das Platzhalterzeichen (*) folgendermaßen hinzufügen.

"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*"

Sie können auch alle Amazon EC2-Ressourcen angeben, die zu einem bestimmten Konto gehören, indem Sie das Platzhalterzeichen (*) folgendermaßen hinzufügen.

"Resource": "arn:aws:ec2:us-east-1:123456789012:*"

Wenn Sie alle Ressourcen angeben möchten oder wenn eine bestimmte API-Aktion keine ARNs unterstützt, verwenden Sie das Platzhalterzeichen Sternchen (*) wie folgt im Resource-Element.

"Resource": "*"

Viele Amazon EC2-API-Aktionen umfassen mehrere Ressourcen. Beispielsweise fügt AttachVolume ein Amazon-EBS-Volume an eine Instance an, sodass ein Benutzer über Berechtigungen zum Verwenden des Volumes und der Instance verfügen muss. Um mehrere Ressourcen in nur einer Anweisung anzugeben, trennen Sie die ARNs wie folgt mit Kommas.

"Resource": ["arn1", "arn2"]

Eine Liste der ARNs für Amazon EC2-Ressourcen finden Sie unter Von Amazon EC2 definierte Ressourcentypen.

Bedingungsschlüssel für Amazon EC2

In einer Richtlinienanweisung können Sie optional Bedingungen angeben, mit denen gesteuert wird, wann die Richtlinie in Kraft tritt. Jede Bedingung enthält ein oder mehrere Schlüssel-Wert-Paare. Bei Bedingungsschlüsseln muss die Groß- und Kleinschreibung nicht beachtet werden. Wir haben globale AWS-Bedingungsschlüssel sowie zusätzliche servicespezifische Bedingungsschlüssel definiert.

Eine Liste der dienstspezifischen Bedingungsschlüssel für Amazon EC2 finden Sie unter Bedingungsschlüssel für Amazon EC2. Amazon EC2 implementiert außerdem die globalen AWS-Bedingungsschlüssel. Für weitere Informationen vgl. In allen Anforderungen verfügbare Informationen im IAM-Benutzerhandbuch.

Alle Amazon EC2-Aktionen unterstützen die Bedingungsschlüssel aws:RequestedRegion und ec2:Region. Weitere Informationen finden Sie unter Beispiel: Beschränken des Zugriffs auf eine bestimmte Region.

Verwenden Sie die Condition-Anweisung, um einen Bedingungsschlüssel in Ihrer IAM-Richtlinie zu verwenden. Die folgende Richtlinie gewährt Benutzern beispielsweise die Berechtigung, eingehende und ausgehende Regeln für jede Sicherheitsgruppe hinzuzufügen und zu entfernen. Der ec2:Vpc-Bedingungsschlüssel wird verwendet, um anzugeben, dass diese Aktionen nur für Sicherheitsgruppen in einer bestimmten VPC ausgeführt werden können.

JSON
{ "Version":"2012-10-17", "Statement":[{ "Effect":"Allow", "Action": [ "ec2:AuthorizeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress"], "Resource": "arn:aws:ec2:us-east-1:111122223333:security-group/*", "Condition": { "StringEquals": { "ec2:Vpc": "arn:aws:ec2:us-east-1:111122223333:vpc/vpc-11223344556677889" } } } ] }

Wenn Sie mehrere Bedingungen oder mehrere Schlüssel in einer einzelnen Bedingung angeben, werden diese mit einer logischen UND-Operation ausgewertet. Wenn Sie eine einzelne Bedingung mit mehreren Werten für einen Schlüssel angeben, wird die Bedingung mit einer logischen ODER-Operation ausgewertet. Damit die Berechtigungen erteilt werden, müssen alle Bedingungen erfüllt sein.

Bei der Angabe von Bedingungen können Sie auch Platzhalter verwenden. Weitere Informationen finden Sie unter IAM-Richtlinienelemente: Variablen und Tags (Markierungen) im IAM-Benutzerhandbuch.

Wichtig

Einige API-Aktionen verwenden mehrere Ressourcen. Viele Bedingungsschlüssel sind jedoch ressourcenspezifisch. Wenn Sie eine Richtlinie mit einem Bedingungsschlüssel schreiben, legen Sie über das Resource-Element der Anweisung fest, für welche Ressource der Bedingungsschlüssel gültig ist. Andernfalls verhindert die Richtlinie möglicherweise, dass Benutzer die Aktion überhaupt ausführen, da die Bedingungsprüfung für die Ressourcen fehlschlägt, auf die der Bedingungsschlüssel nicht zutrifft. Wenn Sie keine Ressource angeben möchten oder über das Action-Element Ihrer Richtlinie mehrere API-Aktionen hinzugefügt haben, müssen Sie mit dem ...IfExists-Bedingungstyp sicherstellen, dass der Bedingungsschlüssel für die Ressourcen, die ihn nicht verwenden, ignoriert wird. Weitere Informationen zur Verwendung von ...IfExists-Bedingungen finden Sie im IAM-Benutzerhandbuch.

ec2:Attribute-Bedingungsschlüssel

Der ec2:Attribute-Bedingungsschlüssel kann für Bedingungen verwendet werden, die den Zugriff nach einem Attribut einer Ressource filtern.

Der Bedingungsschlüssel unterstützt nur Eigenschaften eines primitiven Datentyps, (z. B. eine Zeichenfolge oder eine Ganzzahl) oder komplexe AttributeValue-Objekte, die nur eine Wert-Eigenschaft haben (z. B. das Beschreibung- oder ImdsSupport-Objekt der API-Aktion ModifyImageAttribute). Der Bedingungsschlüssel kann nicht für komplexe Objekte verwendet werden, die mehrere Eigenschaften haben, wie z. B. das LaunchPermission-Objekt von ModifyImageAttribute.

Beispiel: In der folgenden Richtlinie wird der ec2:Attribute/Description-Bedingungsschlüssel zum Filtern des Zugriffs durch das komplexe Description-Objekt der API-Aktion ModifyImageAttribute verwendet. Der Bedingungsschlüssel lässt nur Anforderungen zu, die die Beschreibung eines Images entweder in Production oder Development ändern.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:ModifyImageAttribute", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { "ec2:Attribute/Description": [ "Production", "Development" ] } } } ] }

In der folgenden Beispielrichtlinie wird der ec2:Attribute-Bedingungsschlüssel zum Filtern des Zugriffs durch die primitive Attribute-Eigenschaft der API-Aktion ModifyImageAttribute verwendet. Der Bedingungsschlüssel lehnt alle Anforderungen ab, die versuchen, die Beschreibung eines Images zu ändern.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:ModifyImageAttribute", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { "ec2:Attribute": "Description" } } } ] }

ec2:ResourceID-Bedingungsschlüssel

Wenn Sie die folgenden ec2:ResourceID-Bedingungsschlüssel mit den angegebenen API-Aktionen verwenden, wird der Bedingungsschlüsselwert verwendet, um die resultierende Ressource anzugeben, die von der API-Aktion erstellt wird. ec2:ResourceID-Bedingungsschlüssel können nicht zum Angeben einer Quellressource verwendet werden, die in der API-Anfrage angegeben ist. Wenn Sie einen der folgenden ec2:ResourceID-Bedingungsschlüssel mit einer angegebenen API verwenden, müssen Sie immer den Platzhalter (*) angeben. Wenn Sie einen anderen Wert angeben, wird die Bedingung zur Laufzeit immer in * aufgelöst. Um beispielsweise den ec2:ImageId-Bedingungsschlüssel mit der CopyImage-API zu verwenden, müssen Sie den Bedingungsschlüssel wie folgt angeben:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CopyImage", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { "ec2:ImageID": "*" } } } ] }

Es wird empfohlen, die Verwendung von diesen Bedingungsschlüsseln bei diesen API-Aktionen zu vermeiden:

  • ec2:DhcpOptionsIDCreateDhcpOptions

  • ec2:ImageIDCopyImage, CreateImage, ImportImage und RegisterImage

  • ec2:InstanceIDRunInstances und ImportInstance

  • ec2:InternetGatewayIDCreateInternetGateway

  • ec2:NetworkAclIDCreateNetworkAcl

  • ec2:NetworkInterfaceIDCreateNetworkInterface

  • ec2:PlacementGroupNameCreatePlacementGroup

  • ec2:RouteTableIDCreateRouteTable

  • ec2:SecurityGroupIDCreateSecurityGroup

  • ec2:SnapshotIDCopySnapshot, CreateSnapshot, CreateSnapshots und ImportSnapshots

  • ec2:SubnetIDCreateSubnet

  • ec2:VolumeIDCreateVolume und ImportVolume

  • ec2:VpcIDCreateVpc

  • ec2:VpcPeeringConnectionIDCreateVpcPeeringConnection

Um den Zugriff basierend auf bestimmten Ressourcen-IDs zu filtern, wird empfohlen, dies mithilfe des Resource-Richtlinienelements wie folgt zu tun.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CopyImage", "Resource": "arn:aws:ec2:us-east-1::image/ami-01234567890abcdef" } ] }

ec2:SourceInstanceARN-Bedingungsschlüssel

Verwenden Sie ec2:SourceInstanceARN, um den ARN der Instance anzugeben, von der aus eine Anfrage getätigt wird. Dies ist ein AWS-globaler Bedingungsschlüssel, was bedeutet, dass Sie ihn mit anderen Services als Amazon EC2 verwenden können. Eine Beispielrichtlinie finden Sie in Beispiel: Zulassen, dass eine bestimmte Instance Ressourcen in anderen AWS-Services anzeigt.

Den Zugriff mithilfe des attributbasierten Zugriffs steuern

Wenn Sie eine IAM-Richtlinie erstellen, die Benutzern die Berechtigung zur Verwendung von EC2-Ressourcen gewährt, können Sie Tag-Informationen in das Condition-Element der Richtlinie einfügen, um den Zugriff basierend auf Tags zu steuern. Dies wird als attributbasierte Zugriffskontrolle (ABAC) bezeichnet. ABAC bietet eine besser Kontrolle darüber, welche Ressourcen ein Benutzer ändern, verwenden oder löschen kann. Weitere Informationen finden Sie unter Was ist ABAC für AWS?

Beispielsweise können Sie eine Richtlinie erstellen, die es Benutzern ermöglicht, eine Instance zu beenden, aber die Aktion verweigert, wenn die Instance über den -Tag (Markierungen) verfügt environment=production. Dazu verwenden Sie den aws:ResourceTag-Bedingungsschlüssel, um den Zugriff auf die Ressource basierend auf den der Ressource zugewiesenen Tags (Markierung) zu erlauben oder zu verweigern.

"StringEquals": { "aws:ResourceTag/environment": "production" }

Informationen darüber, ob eine Amazon EC2-API-Aktion das Steuern des Zugriffs mithilfe des aws:ResourceTag-Bedingungsschlüssels unterstützt finden Sie unter Aktionen, Ressourcen und Bedingungsschlüssel für Amazon EC2. Beachten Sie, dass die Describe-Aktionen keine Berechtigungen auf Ressourcenebene unterstützen, sodass sie in einer separaten Anweisung ohne Bedingungen angegeben werden müssen.

Beispiele für IAM-Richtlinien finden Sie unter Beispielrichtlinien zur Steuerung des Zugriffs auf die Amazon-EC2-API.

Wenn Sie Benutzern den Zugriff zu Ressourcen auf der Grundlage von Tags (Markierungen) gewähren oder verweigern, müssen Sie daran denken, Benutzern explizit das Hinzufügen und Entfernen dieser Tags (Markierungen) von den jeweiligen Ressourcen unmöglich zu machen. Andernfalls können Benutzer möglicherweise Ihre Einschränkungen umgehen und sich Zugriff auf eine Ressource verschaffen, indem sie ihre Tags (Markierungen) modifizieren.

Gewähren von Berechtigungen für Benutzer, Gruppen und Rollen

Um Zugriff zu gewähren, fügen Sie Ihren Benutzern, Gruppen oder Rollen Berechtigungen hinzu:

Prüfen, ob Benutzer über die erforderlichen Berechtigungen verfügen

Nach der Erstellung einer IAM-Richtlinie sollten Sie zunächst überprüfen, ob damit den Benutzern die benötigten Berechtigungen zur Verwendung bestimmter API-Aktionen und Ressourcen erteilt werden. Anschließend können Sie die Richtlinie anwenden.

Erstellen Sie zunächst einen Benutzer zu Testzwecken und fügen Sie dann die von Ihnen erstellte IAM-Richtlinie dem Testbenutzer an. Anschließend initiieren Sie mit dem Testbenutzer eine Anforderung.

Wenn durch die getestete Amazon-EC2-Aktion eine Ressource erstellt oder geändert wird, sollten Sie die Anforderung mit dem Parameter DryRun (oder über den AWS CLI-Befehl mit der Option --dry-run) ausführen. In diesem Fall schließt der Aufruf zwar die Autorisierungsprüfung, aber nicht die Operation ab. Beispielsweise können Sie prüfen, ob ein Benutzer eine bestimmte Instance beenden kann, ohne sie tatsächlich abzuschließen. Sofern der Testbenutzer über die erforderlichen Berechtigungen verfügt, gibt die Anforderung DryRunOperation zurück. Andernfalls wird UnauthorizedOperation zurückgegeben.

Falls die Richtlinie dem Benutzer nicht die erwarteten Berechtigungen erteilt oder zu viele Berechtigungen gewährt, können Sie die Richtlinie entsprechend anpassen und erneut testen, bis Sie die gewünschten Ergebnisse erhalten.

Wichtig

Es kann einige Minuten dauern, bis Richtlinienänderungen wirksam werden. Daher wird empfohlen, fünf Minuten verstreichen zu lassen, bevor Sie die aktualisierte Richtlinie testen.

Bei einer fehlgeschlagenen Autorisierungsprüfung gibt die Anforderung eine codierte Nachricht mit Diagnoseinformationen zurück. Sie können die Nachricht mit der Aktion DecodeAuthorizationMessage decodieren. Weitere Informationen finden Sie unter DecodeAuthorizationMessage in der API-Referenz für AWS Security Token Service und decode-authorization-message.