Wie übernehme ich eine IAM-Rolle mithilfe der AWS CLI?

Letzte Aktualisierung: 06.01.2023

Ich möchte mithilfe von AWS Command Line Interface (AWS CLI) eine Rolle aus dem AWS Identity and Access Management (IAM) übernehmen.

Lösung

Gehen Sie wie folgt vor, um mithilfe der AWS-CLI eine IAM-Rolle zu übernehmen und nur Lesezugriff auf Amazon Elastic Compute Cloud (Amazon EC2)-Instances zu haben:

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, vergewissern Sie sich, dass Sie eine aktuelle Version der AWS-CLI ausführen.

Wichtig: Wenn Sie Befehle ausführen, zeigen Ihnen die folgenden Schritte Ihre Anmeldeinformationen, wie Passwörter, in Klartext an. Nachdem Sie die IAM-Rolle übernommen haben, bewährt es sich, Ihr Passwort zu ändern.

Erstellen eines IAM-Benutzers mit der Berechtigung, Rollen zu übernehmen

1.    Erstellen Sie einen IAM-Benutzer mithilfe der AWS-CLI mit dem folgenden Befehl:

Hinweis: Ersetzen Sie Bob durch Ihren IAM-Benutzernamen.

aws iam create-user --user-name Bob

2.    Erstellen Sie die IAM-Richtlinie, die Bob mithilfe der AWS CLI die Berechtigungen erteilt. Erstellen Sie die JSON-Datei, die die IAM-Richtlinie definiert, mit Ihrem bevorzugten Texteditor. Sie können beispielsweise vim, einen Texteditor, der unter Linux häufig verwendet wird, wie folgt verwenden:

Hinweis: Ersetzen Sie das Beispiel durch Ihren eigenen Richtlinien-Namen, Benutzernamen, Ihre Rolle, Ihren JSON-Dateinamen, Profilnamen und Schlüssel.

vim example-policy.json

3.    Die Inhalte der Datei example-policy.json sind dem Folgenden ähnlich:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "iam:ListRoles",
        "sts:AssumeRole"
      ],
      "Resource": "*"
    }
  ]
}

Weitere Informationen zum Erstellen von IAM-Richtlinien finden Sie unter Erstellen von IAM-Richtlinien, Beispiel für identitätsbasierte IAM-Richtlinien und Referenz zu IAM-JSON-Richtlinien.

Erstellen Sie die IAM-Richtlinie

1.    Verwenden Sie den folgenden Befehl aws iam create-policy:

aws iam create-policy --policy-name example-policy --policy-document file://example-policy.json

Der Befehl aws iam create-policy gibt mehrere Informationen aus, darunter den ARN (Amazon-Ressourcennamen) der IAM-Richtlinie wie folgt:

arn:aws:iam::123456789012:policy/example-policy

Hinweis: Ersetzen Sie 123456789012 durch Ihr eigenes Konto.

2.    Schreiben Sie sich den IAM-Richtlinien-ARN aus der Ausgabe auf und fügen Sie die Richtlinie mit dem Befehl attach-user-policy an Bob an. Überprüfen Sie dann mithilfe des Befehls list-attached-user-policies wie folgt, ob der Anhang vorhanden ist:

aws iam attach-user-policy --user-name Bob --policy-arn "arn:aws:iam::123456789012:policy/example-policy"
aws iam list-attached-user-policies --user-name Bob

Erstellen der JSON-Datei, die die Vertrauensstellung der IAM-Rolle definiert

1.    Erstellen Sie die JSON-Datei, die die Vertrauensstellung definiert, wie folgt:
vim example-role-trust-policy.json

2.    Der Inhalt der Datei example-role-trust-policy.json sollte ähnliche wie Folgendes aussehen:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Principal": {
      "AWS": "123456789012"
    },
    "Action": "sts:AssumeRole"
  }
}

Diese Vertrauensrichtlinie erlaubt, Benutzern und Rollen des Kontos 123456789012 diese Rolle zu übernehmen, wenn sie die Aktion sts:AssumeRole in ihrer Berechtigungsrichtlinie zulassen. Sie können die Vertrauensstellung auch so einschränken, dass die IAM-Rolle nur von bestimmten IAM-Benutzern übernommen werden kann. Hierfür können Sie Prinzipale angeben in der Form arn:aws:iam::123456789012:user/example-username. Weitere Informationen finden Sie unter AWS-JSON-Richtlinienelemente: Prinzipal.

IAM-Rolle erstellen und die Richtlinie anfügen

Erstellen Sie eine IAM-Rolle, die von Bob übernommen werden kann, die schreibgeschützten Zugriff auf Amazon Relational Database Service (Amazon RDS)-Instances hat. Da die IAM-Rolle von einem IAM-Benutzer übernommen wird, müssen Sie einen Prinzipal angeben, der es IAM-Benutzern ermöglicht, diese Rolle zu übernehmen. Ein Prinzipal ähnlich wie arn:aws:iam::123456789012:root lässt beispielsweise zu, dass alle IAM-Identitäten des Kontos diese Rolle übernehmen. Weitere Informationen finden Sie unter Erstellen einer Rolle zum Delegieren von Berechtigungen an einen IAM-Benutzer.

1.    Erstellen Sie die IAM-Rolle, die schreibgeschützten Zugriff auf Amazon-RDS-DB-Instances hat. Fügen Sie die IAM-Richtlinien gemäß Ihren Sicherheitsanforderungen an Ihre IAM-Rolle an.

Der Befehl aws iam create-role erstellt die IAM-Rolle und definiert die Vertrauensstellung gemäß dem Inhalt der im vorhergehenden Abschnitt erstellten JSON-Datei. Der Befehl aws iam attach-role-policy fügt die von AWS verwaltete Richtlinie AmazonRDSReadOnlyAccess an die Rolle an. Sie können je nach Ihren Sicherheitsanforderungen verschiedene Richtlinien (verwaltete Richtlinien und benutzerdefinierte Richtlinien) anhängen. Der Befehl aws iam list-attached-role-policies zeigt die IAM-Richtlinien an, die der IAM-Rolle example-role zugeordnet sind. Sehen Sie sich die folgenden Befehlsbeispiele an:

aws iam create-role --role-name example-role --assume-role-policy-document file://example-role-trust-policy.json
aws iam attach-role-policy --role-name example-role --policy-arn "arn:aws:iam::aws:policy/AmazonRDSReadOnlyAccess"
aws iam list-attached-role-policies --role-name example-role

Hinweis: Überprüfen Sie, ob Bob schreibgeschützten Zugriff auf EC2-Instances hat und die Beispielrolle übernehmen kann.

2.    Erstellen Sie die Zugriffstasten für Bob mit dem folgenden Befehl:

aws iam create-access-key --user-name Bob

Der AWS-CLI-Befehl gibt eine Zugriffsschlüssel-ID und einen geheimen Zugriffsschlüssel aus. Merken Sie sich diese Schlüssel unbedingt.

Die Zugriffsschlüssel konfigurieren

1.    Verwenden Sie zum Konfigurieren der Zugriffsschlüssel entweder das Standardprofil oder ein bestimmtes Profil. Führen Sie aws configure aus, um das Standardprofil zu konfigurieren. Um ein neues spezifisches Profil zu erstellen, führen Sie aws configure --profile example -profile-name aus. In diesem Beispiel ist das Standardprofil wie folgt konfiguriert:

aws configure
AWS Access Key ID [None]: ExampleAccessKeyID1
AWS Secret Access Key [None]: ExampleSecretKey1
Default region name [None]: eu-west-1
Default output format [None]: json

Hinweis: Geben Sie für Standardregionsname Ihre AWS-Region an.

Überprüfen Sie, ob die AWS-CLI-Befehle aufgerufen werden und überprüfen Sie dann den IAM-Benutzerzugriff

1.    Führen Sie den Befehl aws sts get-caller-identity wie folgt aus:

aws sts get-caller-identity

Der Befehl aws sts get-caller-identity gibt drei Informationen einschließlich des ARN aus. Die Ausgabe sollte ähnlich wie arn:aws:iam::123456789012:user/Bob sein, um zu überprüfen, dass die AWS-CLI-Befehle als Bob aufgerufen werden.

2.    Überprüfen Sie, ob der IAM-Benutzer schreibgeschützten Zugriff auf EC2-Instances und keinen Zugriff auf Amazon-RDS-DB-Instances hat, indem Sie die folgenden Befehle ausführen:

aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]"
aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"

Der Befehl aws ec2 describe-instances sollte Ihnen alle EC2-Instances anzeigen, die sich in der Region eu-west-1 befinden. Der Befehl aws rds describe-db-instances muss eine Fehlermeldung „Zugriff verweigert“ generieren, da Bob keinen Zugriff auf Amazon RDS hat.

Übernehmen Sie die IAM-Rolle

Führen Sie eine der folgenden Aufgaben aus:

Verwenden Sie eine IAM-Rolle, indem Sie ein Profil in der Datei ~/.aws/config erstellen. Weitere Informationen finden Sie unter Verwenden einer IAM-Rolle in der AWS CLI.

-oder-

Gehen Sie wie folgt vor, um die IAM-Rolle zu übernehmen:

1.    Rufen Sie den ARN der Rolle ab, indem Sie den folgenden Befehl ausführen:

aws iam list-roles --query "Roles[?RoleName == 'example-role'].[RoleName, Arn]"

2.    Der Befehl führt IAM-Rollen auf, filtert jedoch die Ausgabe nach Rollennamen. Führen Sie den folgenden Befehl aus, um die IAM-Rolle zu übernehmen:

aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name AWSCLI-Session

Der AWS-CLI-Befehl gibt mehrere Informationen aus. Innerhalb des Anmeldedatenblocks benötigen Sie AccessKeyId, SecretAccessKey und SessionToken. In diesem Beispiel werden die Umgebungsvariablen RoleAccessKeyID, RoleSecretKey und RoleSessionToken verwendet. Beachten Sie, dass der Zeitstempel im Feld Ablauf, in der UTC Zeitzone ist. Der Zeitstempel gibt an, wann die temporären Anmeldeinformationen der IAM-Rolle ablaufen. Wenn die temporären Anmeldeinformationen abgelaufen sind, müssen Sie den API-Aufruf sts:AssumeRole erneut aufrufen.

Hinweis: Sie können den maximalen Ablauf der Sitzungsdauer für temporäre Anmeldeinformationen für IAM-Rollen mithilfe des Parameters DurationSeconds erhöhen.

Erstellen Sie Umgebungsvariablen, um die IAM-Rolle zu übernehmen und den Zugriff zu überprüfen

1.    Erstellen Sie drei Umgebungsvariablen, um die IAM-Rolle zu übernehmen. Diese Umgebungsvariablen werden mit der folgenden Ausgabe ausgefüllt:

export AWS_ACCESS_KEY_ID=RoleAccessKeyID
export AWS_SECRET_ACCESS_KEY=RoleSecretKey
export AWS_SESSION_TOKEN=RoleSessionToken

        Hinweis: Für Windows-Systeme ersetzen Sie in diesem Befehl export durch set.

2.    Stellen Sie sicher, dass Sie die IAM-Rolle übernommen haben, indem Sie den folgenden Befehl ausführen:

aws sts get-caller-identity

Der AWS-CLI-Befehl sollte den ARN als arn:aws:sts::123456789012:assumed-role/example-role/AWSCLI-Session anstelle von arn:aws:iam::123456789012:user/Bob ausgeben,um sicherzustellen dass, dass Sie die Beispielrolle übernommen haben.

3.    Bestötigen Sie mithilfe der folgenden Befehle sicher, dass Sie eine IAM-Rolle mit schreibgeschütztem Zugriff auf Amazon-RDS-DB-Instances und ohne Zugriff auf EC2-Instances erstellt haben:

aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]"
aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"

Der Befehl aws ec2 describe-instances sollte eine Fehlermeldung mit Zugriffsverweigerung generieren. Der Befehl aws rds describe-db-instances sollte die Amazon-RDS-DB-Instances zurückgeben. Dadurch wird überprüft, ob die der IAM-Rolle zugewiesenen Berechtigungen ordnungsgemäß funktionieren.

4.    Um zum IAM-Benutzer zurückzukehren, entfernen Sie die Umgebungsvariablen wie folgt:

unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN
aws sts get-caller-identity

Der Befehl unset entfernt die Umgebungsvariablen, und der Befehl aws sts get-caller-identity überprüft, ob Sie als IAM-Benutzer Bob zurückgegeben haben.

Hinweis: Setzen Sie für Windows-Systeme die Umgebungsvariablen auf leere Zeichenketten, um ihren Inhalt wie folgt zu löschen:

SET AWS_ACCESS_KEY_ID=
SET AWS_SECRET_ACCESS_KEY=
SET AWS_SESSION_TOKEN=

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?