Wie übernehme ich mittels AWS CLI eine IAM-Rolle?

Letzte Aktualisierung: 11.05.2021

Ich möchte eine AWS-Identity-and-Access-Management-(IAM)-Rolle mit der AWS Command Line Interface (AWS CLI) übernehmen. Wie kann ich vorgehen?

Auflösung

Befolgen Sie diese Anweisungen, um mithilfe der AWS CLI eine IAM-Rolle zu übernehmen. In diesem Beispiel hat der Benutzer nach Befolgen dieser Schritte schreibgeschützten Zugriff auf Amazon-Elastic-Compute-Cloud-(Amazon-EC2)-Instances und die Berechtigung, eine IAM-Rolle zu übernehmen.

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS CLI verwenden.

Erstellen Sie einen IAM-Benutzer mit Berechtigungen zum Übernehmen von Rollen

1.    Erstellen Sie einen IAM-Benutzer mit der AWS CLI:

Hinweis: Ersetzen Sie Bob durch Ihren IAM-Benutzernamen.

aws iam create-user --user-name Bob

2.    Erstellen Sie die IAM-Richtlinie, die Bob die Berechtigungen über die AWS CLI erteilt. Sie müssen die JSON-Datei, die die IAM-Richtlinie definiert, mit Ihrem bevorzugten Texteditor erstellen. In diesem Beispiel wird vim verwendet, das häufig unter Linux verwendet wird:

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.    Der Inhalt der Datei example-policy.json sollte wie folgt aussehen:

{
    "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 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-Ressourcenname) der IAM-Richtlinie:

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

Hinweis: Ersetzen Sie 123456789012 durch Ihr eigenes Konto.

2.    Notieren Sie sich den IAM-Richtlinien-ARN aus der Ausgabe und fügen Sie die Richtlinie mit dem Befehl attach-user-policy an Bob an. Überprüfen Sie dann mithilfe von list-attached-user-policies, 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 Sie die JSON-Datei, die die Vertrauensstellung der IAM-Rolle definiert

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

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

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

Sie können die Vertrauensstellung auch so einschränken, dass die IAM-Rolle nur von bestimmten IAM-Benutzern übernommen werden kann. Sie können dies tun, indem Sie Prinzipale ähnlich wie arn:aws:iam::123456789012:user/example-username angeben. 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 diese 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. Hängen 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 JSON-Datei. Der Befehl aws iam attach-role-policy hängt die AWS Managed Policy 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.

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: Stellen Sie sicher, dass Bob schreibgeschützten Zugriff auf EC2-Instances hat und die Beispielrolle übernehmen kann.

2.    Erstellen Sie mit diesem Befehl Zugriffsschlüssel für Bob:

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 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.

Stellen Sie sicher, dass 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 aus:

aws sts get-caller-identity

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

2.    Bestätigen Sie, dass 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-

Führen Sie diese Schritte aus, um die IAM-Rolle zu übernehmen.

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

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

2.    Der Befehl listet IAM-Rollen auf, filtert jedoch die Ausgabe nach Rollennamen. Führen Sie diesen 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. Notieren Sie sich den Zeitstempel des Ablauffelds, der sich in der UTC-Zeitzone befindet und angibt, 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 dieser Ausgabe ausgefüllt:

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

2.    Stellen Sie sicher, dass Sie die IAM-Rolle übernommen haben, indem Sie diesen 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, was bestätigt, dass Sie die Beispielrolle übernommen haben.

3.    Sie haben eine IAM-Rolle mit schreibgeschütztem Zugriff auf Amazon-RDS-DB-Instances, jedoch ohne Zugriff auf EC2-Instances erstellt. Überprüfen Sie dies, indem Sie diese 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 eine Fehlermeldung „Zugriff verweigert“ generieren und 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:

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.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?