Verwenden einer IAM-Rolle in der AWS CLI - AWS Command Line Interface

Verwenden einer IAM-Rolle in der AWS CLI

Eine AWS Identity and Access Management(IAM)-Rolle ist ein Autorisierungstool, mit dem ein IAM-Benutzer zusätzliche (oder andere) Berechtigungen oder die Berechtigung zum Ausführen von Aktionen in einem anderen AWS-Konto erhalten kann.

Sie können die AWS Command Line Interface (AWS CLI) für die Verwendung einer IAM-Rolle konfigurieren, indem Sie in der Datei ~/.aws/config ein Profil für die Rolle definieren.

Im folgenden Beispiel sehen Sie ein Rollenprofil namens marketingadmin. Wenn Sie Befehle mit --profile marketingadmin ausführen (oder dies mit der Umgebungsvariablen AWS_PROFILE angeben), verwendet die CLI die in einem separaten user1-Profil definierten Anmeldeinformationen, um die Rolle mit dem Amazon-Ressourcennamen (ARN) arn:aws:iam::123456789012:role/marketingadminrole anzunehmen. Sie können alle Operationen ausführen, die gemäß den der Rolle zugewiesenen Berechtigungen zulässig sind.

[profile marketingadmin] role_arn = arn:aws:iam::123456789012:role/marketingadminrole source_profile = user1

Sie können dann ein source_profile angeben, das auf ein separates benanntes Profil zeigt, welches IAM-Anmeldeinformationen mit der Berechtigung zur Verwendung der Rolle enthält. Im vorherigen Beispiel verwendet das Profil marketingadmin die Anmeldeinformationen im Profil user1. Wenn Sie angeben, dass ein AWS CLI-Befehl das Profil marketingadmin verwenden soll, sucht die CLI automatisch die Anmeldeinformationen für das verknüpfte user1-Profil und verwendet diese, um temporäre Anmeldeinformationen für die angegebene IAM-Rolle anzufordern. Hierfür verwendet die CLI die Operation sts: AssumeRole im Hintergrund. Diese temporären Anmeldeinformationen werden dann verwendet, um den angeforderten CLI-Befehl ausführen. Die angegebene Rolle muss über angefügte IAM-Berechtigungsrichtlinien verfügen, die das Ausführen des angeforderten CLI-Befehls zulassen.

Zum Ausführen eines CLI-Befehls in einer Amazon Elastic Compute Cloud (Amazon EC2)-Instance oder einem Amazon Elastic Container Service (Amazon ECS)-Container können Sie eine IAM-Rolle verwenden, die dem Instance-Profil oder dem Container zugeordnet ist. Wenn Sie kein Profil angeben oder keine Umgebungsvariablen festlegen, wird diese Rolle direkt verwendet. So müssen Sie keine Langzeit-Zugriffsschlüssel in Ihren Instances speichern. Sie können diese Instance- oder Container-Rollen auch verwenden, um Anmeldeinformationen für eine andere Rolle abzurufen. Zu diesem Zweck verwenden Sie credential_source (anstelle von source_profile), um anzugeben, wie die Anmeldeinformationen zu finden sind. Das Attribut credential_source unterstützt die folgenden Werte:

  • Environment: Quell-Anmeldeinformationen aus Umgebungsvariablen abrufen.

  • Ec2InstanceMetadata: Die dem Amazon EC2-Instance-Profil zugeordnete IAM-Rolle verwenden.

  • EcsContainer: Die dem Amazon ECS-Container zugeordnete IAM-Rolle verwenden.

Das folgende Beispiel zeigt dieselbe marketingadminrole-Rolle, die durch Referenzieren eines Amazon EC2-Instance-Profils verwendet wurde.

[profile marketingadmin] role_arn = arn:aws:iam::123456789012:role/marketingadminrole credential_source = Ec2InstanceMetadata

Wenn Sie eine Rolle aufrufen, stehen Ihnen zusätzliche Optionen zur Verfügung, die Sie anfordern können, z. B. die Verwendung einer Multifaktor-Authentifizierung und einer externen ID (die von Drittanbietern für den Zugriff auf die Ressourcen ihrer Kunden verwendet wird). Sie können auch eindeutige Rollensitzungsnamen angeben, die in AWS CloudTrail-Protokollen einfacher überprüft werden können.

Konfigurieren und Verwenden einer Rolle

Wenn Sie Befehle mit einem Profil ausführen, das eine IAM-Rolle angibt, verwendet die AWS CLI die Anmeldeinformationen des Quellprofils, um AWS Security Token Service (AWS STS) aufzurufen und die angegebenen Rolle zu übernehmen. Der Benutzer im Quellprofil muss über die Berechtigung zum Aufrufen von sts:assume-role für die Rolle im angegebenen Profil verfügen. Die Rolle muss über eine Vertrauensstellung verfügen, die es dem Benutzer im Quellprofil ermöglicht, die Rolle zu übernehmen. Der Prozess des Abrufens mit anschließendem Verwenden von temporären Anmeldeinformationen für eine Rolle wird oft als Annehmen der Rolle bezeichnet.

Sie können mit den Berechtigungen in IAM eine Rolle erstellen, die Benutzer annehmen sollen, indem Sie die Anweisungen unter Erstellen einer Rolle zum Delegieren von Berechtigungen an einen IAM-Benutzer im AWS Identity and Access Management-Benutzerhandbuch befolgen. Wenn die Rolle und der IAM-Benutzer des Quellprofils im selben Konto vorhanden sind, können Sie beim Konfigurieren der Vertrauensstellung der Rolle Ihre eigene Konto-ID eingeben.

Ändern Sie nach dem Erstellen der Rolle die Vertrauensstellung so, dass IAM-Benutzer (oder die Benutzer im AWS-Konto) diese annehmen dürfen.

Im folgenden Beispiel sehen Sie eine Vertrauensrichtlinie, die Sie einer Rolle anfügen könnten. Mit dieser Richtlinie kann die Rolle von jedem IAM-Benutzer im Konto 123456789012 angenommen werden, wenn der Administrator des Kontos dem Benutzer explizit die Berechtigung sts:assumerole erteilt.

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

Die Vertrauensrichtlinie selbst gewährt keine Berechtigungen. Der Administrator des Kontos muss die Berechtigung zur Übernahme der Rolle an einzelne Benutzer delegieren, indem eine Richtlinie mit den entsprechenden Berechtigungen angefügt wird. Das folgende Beispiel zeigt eine Richtlinie, die Sie einem IAM-Benutzer anfügen können und mit der der Benutzer nur die Rolle marketingadminrole annehmen kann. Weitere Informationen, wie Sie einem Benutzer Zugriff erteilen können, damit dieser eine Rolle annehmen kann, finden Sie im Abschnitt Erteilen von Berechtigungen an einen Benutzer zum Wechseln von Rollen im IAM-Benutzerhandbuch.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::123456789012:role/marketingadminrole" } ] }

Der IAM-Benutzer benötigt keine weiteren Berechtigungen, um mithilfe des Rollenprofils CLI-Befehle auszuführen. Die Berechtigungen zum Ausführen des Befehls entstammen aus den der Rolle angefügten Berechtigungen. Sie fügen der Rolle Berechtigungsrichtlinien an, um anzugeben, welche Aktionen für welche AWS-Ressourcen ausgeführt werden können. Weitere Informationen zum Anfügen von Berechtigungen zu einer Rolle (funktioniert wie bei einem IAM-Benutzer) finden Sie unter Ändern von Berechtigungen für einen IAM-Benutzer im IAM-Benutzerhandbuch.

Nachdem Sie nun das Rollenprofil, die Rollenberechtigungen, die Rollen-Vertrauensstellung und die Benutzerberechtigungen konfiguriert haben, können Sie die Rolle an der Befehlszeile verwenden, indem Sie die Option --profile aufrufen. Beispiel: Der folgende Befehl ruft den Befehl Amazon S3 ls mit den Berechtigungen auf, die an die marketingadmin-Rolle angefügt sind, wie im Beispiel zu Beginn dieses Themas angegeben.

$ aws s3 ls --profile marketingadmin

Um die Rolle für mehrere Aufrufe zu verwenden, können Sie die Umgebungsvariable AWS_DEFAULT_PROFILE für die aktuelle Sitzung über die Befehlszeile festlegen. Da die Umgebungsvariable definiert ist, müssen Sie die Option --profile nicht bei jedem Befehl angeben.

Linux oder macOS

$ export AWS_PROFILE=marketingadmin

Windows

C:\> setx AWS_PROFILE marketingadmin

Weitere Informationen zur Konfiguration von IAM-Benutzern und -Rollen finden Sie unter Benutzer und Gruppen und Rollen im IAM-Benutzerhandbuch.

Verwenden von Multi-Factor Authentication (MFA)

Zur Erhöhung der Sicherheit können Sie festlegen, dass die Benutzer einen von einem Multifaktor-Authentifizierungsgerät (MFA), einem U2F-Gerät oder einen von einer mobilen App generierten einmaligen Schlüssel bereitstellen müssen, wenn sie versuchen, einen Aufruf mit dem Rollenprofil zu senden.

Zunächst können Sie die Vertrauensstellung für die IAM-Rolle so ändern, dass eine MFA erforderlich ist. Dadurch wird verhindert, dass Benutzer die Rolle verwenden, ohne sich zuerst mithilfe von MFA zu authentifizieren. Ein Beispiel finden Sie im folgenden Code in der Zeile Condition. Diese Richtlinie ermöglicht es dem IAM-Benutzer namens anika, die Rolle zu übernehmen, an die die Richtlinie angefügt ist, allerdings nur, wenn die Authentifizierung mithilfe von MFA erfolgt.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/anika" }, "Action": "sts:AssumeRole", "Condition": { "Bool": { "aws:multifactorAuthPresent": true } } } ] }

Fügen Sie als Nächstes dem Rollenprofil, das den ARN vom MFA-Gerät des Benutzers angibt, eine Zeile hinzu. In den folgenden Einträgen der Beispieldatei config verwenden zwei Rollenprofile die Zugriffsschlüssel für den IAM-Benutzer anika, um temporäre Anmeldeinformationen für die Rolle cli-role anzufordern. Der Benutzer anika hat die Berechtigung, die Rolle zu übernehmen. Sie wird ihm von der Vertrauensrichtlinie der Rolle erteilt.

[profile role-without-mfa] region = us-west-2 role_arn= arn:aws:iam::128716708097:role/cli-role source_profile=cli-user [profile role-with-mfa] region = us-west-2 role_arn= arn:aws:iam::128716708097:role/cli-role source_profile = cli-user mfa_serial = arn:aws:iam::128716708097:mfa/cli-user [profile anika] region = us-west-2 output = json

Die Einstellung mfa_serial kann einen ARN (wie gezeigt) oder die Seriennummer eines Hardware-MFA-Tokens annehmen.

Das erste Profil, role-without-mfa, erfordert keine MFA. Da bei dem vorherigen Beispiel die an die Rolle angefügte Vertrauensrichtlinie eine MFA erfordert, schlägt jeder Versuch, einen Befehl mit diesem Profil auszuführen, fehl.

$ aws iam list-users --profile role-without-mfa An error occurred (AccessDenied) when calling the AssumeRole operation: Access denied

Der zweite Profileintrag, role-with-mfa, gibt ein MFA-Gerät an, das verwendet werden soll. Wenn der Benutzer versucht, einen CLI-Befehl mit diesem Profil auszuführen, fordert die CLI den Benutzer zur Eingabe des Einmalpassworts auf, das vom MFA-Gerät bereitgestellt wird. Wenn die MFA-Authentifizierung erfolgreich ist, führt der Befehl den angeforderten Vorgang aus. Das Einmalkennwort wird nicht auf dem Bildschirm angezeigt.

$ aws iam list-users --profile role-with-mfa Enter MFA code for arn:aws:iam::123456789012:mfa/cli-user: { "Users": [ { ...

Kontenübergreifende Rollen und externe ID

Sie können IAM-Benutzern ermöglichen, Rollen zu verwenden, die zu verschiedenen Konten gehören, indem Sie kontenübergreifende Rollen konfigurieren. Während der Erstellung der Rolle legen Sie den Rollentyp auf Another AWS account (Ein anderes AWS-Konto) fest, wie in Erstellen einer Rolle zum Delegieren von Berechtigungen an einen IAM-Benutzer beschrieben. Wählen Sie optional Require MFA (MFA erforderlich) aus. Die Option Require MFA (MFA erfordern) konfiguriert die zutreffende Bedingung in der Vertrauensstellung wie unter Verwenden von Multi-Factor Authentication (MFA) beschrieben.

Wenn Sie eine externe ID verwenden, um besser zu kontrollieren, wer eine kontenübergreifende Rolle verwenden kann, müssen Sie auch den Parameter external_id zum Rollenprofil hinzufügen. Normalerweise verwenden Sie dieses nur, wenn das andere Konto von einer Person außerhalb Ihres Unternehmens kontrolliert wird.

[profile crossaccountrole] role_arn = arn:aws:iam::234567890123:role/SomeRole source_profile = default mfa_serial = arn:aws:iam::123456789012:mfa/saanvi external_id = 123456

Angeben eines Rollensitzungsnamens für eine einfachere Prüfung

Wenn viele Personen eine Rolle teilen, wird die Prüfung zu einer größeren Herausforderung. Sie möchten jede aufgerufene Operation mit der Person verknüpfen, die diese Aktion aufgerufen hat. Wenn die Person jedoch eine Rolle verwendet, ist die Annahme der Rolle durch die Person eine vom Aufrufen einer Operation getrennte Aktion und Sie müssen die beiden manuell korrelieren.

Sie können dies vereinfachen, indem Sie eindeutige Rollensitzungsnamen angeben, wenn Benutzer eine Rolle annehmen. Dazu fügen Sie jedem benannten Profil in der Datei config, die eine Rolle angibt, einen role_session_name-Parameter hinzu. Der Wert role_session_name wird an die Operation AssumeRole übergeben und wird Teil des ARN für die Rollensitzung. Er ist auch in den AWS CloudTrail-Protokollen für alle protokollierten Operationen enthalten.

Sie können beispielsweise folgendermaßen ein rollenbasiertes Profil erstellen.

[profile namedsessionrole] role_arn = arn:aws:iam::234567890123:role/SomeRole source_profile = default role_session_name = Session_Maria_Garcia

Dies führt dazu, dass die Rollensitzung den folgenden ARN hat.

arn:aws:iam::234567890123:assumed-role/SomeRole/Session_Maria_Garcia

Außerdem enthalten alle AWS CloudTrail-Protokolle den Rollensitzungsnamen in den für jede Operation erfassten Informationen.

Übernehmen einer Rolle mit Web-Identität

Sie können ein Profil konfigurieren, um anzugeben, dass die AWS CLI eine Rolle mithilfe von Web-Identitätsverbund und Open ID Connect (OIDC)annehmen soll. Wenn Sie dies in einem Profil angeben, führt die AWS CLI automatisch den entsprechenden AWS STS-Aufruf AssumeRoleWithWebIdentity für Sie aus.

Anmerkung

Wenn Sie ein Profil angeben, das eine IAM-Rolle verwendet, führt die AWS CLI die entsprechenden Aufrufe aus, um temporäre Anmeldeinformationen abzurufen. Diese Anmeldeinformationen werden in ~/.aws/cli/cache gespeichert. Nachfolgende AWS CLI-Befehle, die dasselbe Profil angeben, verwenden die zwischengespeicherten temporären Anmeldeinformationen, bis diese ablaufen. Dann aktualisiert die AWS CLI automatisch die Anmeldeinformationen.

Um mithilfe des Web-Identitätsverbunds temporäre Anmeldeinformationen abzurufen und zu verwenden, können Sie die folgenden Konfigurationswerte in einem freigegebenen Profil angeben.

role_arn

Gibt den ARN der Rolle an, die angenommen werden soll.

web_identity_token_file

Gibt den Pfad zu einer Datei an, die ein OAuth 2.0-Zugriffstoken oder OpenID Connect ID-Token enthält, das vom Identitätsanbieter bereitgestellt wird. Die AWS CLI lädt diese Datei und übergibt den Inhalt als WebIdentityToken-Argument an die Operation AssumeRoleWithWebIdentity.

role_session_name

Gibt einen optionalen Namen an, der auf diese Rollenübernahme-Sitzung angewendet wird.

Unten finden Sie eine Beispielkonfiguration für den mindestens erforderlichen Umfang einer Konfiguration für eine angenommene Rolle mit Web-Identitätsprofil.

# In ~/.aws/config [profile web-identity] role_arn=arn:aws:iam:123456789012:role/RoleNameToAssume web_identity_token_file=/path/to/a/token

Sie können diese Konfiguration auch mithilfe von Umgebungsvariablen bereitstellen.

AWS_ROLE_ARN

Der ARN der zu übernehmenden Rolle

AWS_WEB_IDENTITY_TOKEN_FILE

Der Pfad zur Datei mit dem Web-Identitäts-Token.

AWS_ROLE_SESSION_NAME

Der Name für diese Sitzung der Rollenübernahme.

Anmerkung

Diese Umgebungsvariablen gelten derzeit nur für die Anbieter für Rollenübernahme mit Web-Identität. Sie gelten nicht für die allgemeine Konfiguration für einen Anbieter für Rollenübernahme.

Anmeldeinformationen aus dem Cache löschen

Wenn Sie eine Rolle verwenden, legt die AWS CLI die temporären Anmeldeinformationen lokal im Cache ab, bis sie ablaufen. Beim nächsten Versuch, diese zu verwenden, versucht die AWS CLI, sie in Ihrem Namen zu erneuern.

Wenn die temporären Anmeldeinformationen Ihrer Rolle widerrufen werden, werden sie nicht automatisch erneuert und Versuche, sie zu verwenden, schlagen fehl. Sie können jedoch den Cache löschen, um zu erzwingen, dass die AWS CLI neue Anmeldeinformationen abruft.

Linux oder macOS

$ rm -r ~/.aws/cli/cache

Windows

C:\> del /s /q %UserProfile%\.aws\cli\cache