Wie kann ich Fehler beim verweigerten Zugriff oder unautorisierten Vorgängen mit einer IAM-Richtlinie beheben?

Lesedauer: 9 Minute
0

Ich versuche, eine Aktion an einer AWS-Ressource auszuführen, und ich habe die Fehlermeldung „Zugriff verweigert“ oder „Nicht autorisierter Vorgang“ erhalten. Wie kann ich diese Berechtigungsprobleme beheben?

Kurzbeschreibung

So beheben Sie Probleme mit den Richtlinien von AWS Identity and Access Management (IAM):

Behebung

API-Aufrufer identifizieren und die Fehlermeldungen verstehen

Wichtig:

Stellen Sie sicher, dass die API-Aufrufe im Namen der richtigen IAM-Entität erfolgen, bevor Sie die IAM-Richtlinien überprüfen. Wenn die Fehlermeldung keine Anruferinformationen enthält, gehen Sie wie folgt vor, um den API-Aufrufer zu identifizieren:

  1. Öffnen Sie die AWS-Managementkonsole.
  2. Wählen Sie in der oberen rechten Ecke der Seite den Pfeil neben den Kontoinformationen aus.
  3. Wenn Sie als IAM-Rolle angemeldet sind, finden Sie unter „Aktuell aktiv als“ den Namen der angenommenen Rolle und unter „Konto-ID“ die Konto-ID.
  4. Wenn Sie als Verbundbenutzer angemeldet sind, finden Sie unter „Verbundbenutzer“ den Namen der Verbundrolle und den Namen der Rollensitzung.

-oder-

Verwenden Sie den AWS-CLI-Befehl get-caller-identity, um den API-Aufrufer zu identifizieren. Sie können auch den AWS-CLI-Befehl mit dem Flag**\ --debug** verwenden, um die Quelle der Anmeldeinformationen anhand der Ausgabe ähnlich der folgenden zu identifizieren:

2018-03-13 16:23:57,570 - MainThread - botocore.credentials - INFO - Found credentials in shared credentials file: ~/.aws/credentials

IAM-Richtlinienberechtigungen überprüfen

Überprüfen Sie anhand der angehängten IAM-Richtlinien, ob dem API-Aufrufer die erforderlichen Berechtigungen erteilt wurden. Weitere Informationen finden Sie unter Ermitteln, ob eine Anfrage innerhalb eines Kontos zulässig oder abgelehnt ist.

SCPs von AWS Organizations bewerten

Wenn das AWS-Konto Teil einer AWS Organizations ist, können SCPs auf hierarchischer Ebene angewendet werden, um Aktionen zuzulassen oder abzulehnen. Die SCP-Berechtigungen werden von allen IAM-Entitäten im AWS-Konto vererbt. Stellen Sie sicher, dass der API-Aufrufer im SCP nicht explizit abgelehnt wird.

Stellen Sie sicher, dass die aufgerufene API nicht ausdrücklich in einer SCP-Richtlinie der Organisation verweigert wird, die sich auf den Aufrufer auswirkt

Überprüfung identitäts- und ressourcenbasierter Richtlinien

Stellen Sie sicher, dass die identitätsbasierte Richtlinie für IAM-Entitäten für den API-Aufrufer eine explizite Erlauben-Anweisung enthält. Stellen Sie dann sicher, dass die API Berechtigungen auf Ressourcenebene unterstützt. Wenn der API-Aufrufer keine Berechtigungen auf Ressourcenebene unterstützt, stellen Sie sicher, dass der Platzhalter *„\ im Ressourcenelement der IAM-Richtlinienanweisung angegeben ist.

Sie können ressourcenbasierte Richtlinien an eine Ressource innerhalb des AWS-Service anhängen, um den Zugriff zu ermöglichen. Weitere Informationen finden Sie unter Identitätsbasierte Richtlinien und ressourcenbasierte Richtlinien.

So zeigen Sie die Zusammenfassung der IAM-Richtlinien an:

  1. Öffnen Sie die IAM-Konsole.
  2. Wählen Sie im Navigationsbereich Richtlinien aus.
  3. Wählen Sie den Pfeil neben dem Richtliniennamen, um die Ansicht der Richtliniendetails zu erweitern.

Im folgenden Beispiel funktioniert die Richtlinie nicht, da nicht alle Amazon-Elastic-Compute-Cloud-API-Aktionen (Amazon EC2) Berechtigungen auf Ressourcenebene unterstützen:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SorryThisIsNotGoingToWorkAsExpected",
            "Effect": "Allow",
            "Action": ["ec2:*"],
            "Resource": "arn:aws:ec2:us-east-1:accountid:instance/*"
        }
    ]
}

IAM-Benutzer, die versuchen, eine Amazon-EC2-Instance in der Region us-east-1 mit dem AWS-CLI-Befehl run-instances zu starten, erhalten eine Fehlermeldung ähnlich der folgenden:

"An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation. Encoded authorization failure message:…"

Um dieses Problem zu lösen, ändern Sie die Ressource in einen Platzhalter „\ *“. Dies liegt daran, dass Amazon EC2 nur teilweise Berechtigungen auf Ressourcenebene unterstützt.

Verwenden Sie die API-Aktion DecodeAuthorizationMessage, die der folgenden ähnelt, zu dekodieren und weitere Informationen zum Grund für diesen Fehler zu erhalten:

$ aws sts decode-authorization-message --encoded-message <encoded-message-from-the-error>

Überprüfen Sie die Berechtigungsgrenzen

Wenn der IAM-Entität eine Berechtigungsgrenze zugeordnet ist, legt die Grenze die maximale Anzahl an Berechtigungen fest, über die die Entität verfügt.

Bewerten Sie die Sitzungsrichtlinien

Wenn der API-Aufrufer eine IAM-Rolle oder ein Verbundbenutzer ist, werden Sitzungsrichtlinien für die Dauer der Sitzung weitergegeben. Die Berechtigungen für eine Sitzung sind die Schnittmenge der identitätsbasierten Richtlinien für die IAM-Entität, die zum Erstellen der Sitzung verwendet wurde, und der Sitzungsrichtlinien. Stellen Sie sicher, dass der API-Aufruf in der IAM-Richtlinie und -Entität vorhanden ist.

Stellen Sie sicher, dass die Bedingungsschlüssel in der Richtlinie von den APIs unterstützt werden

AWS-Bedingungsschlüssel können verwendet werden, um Elemente in einer API-Anfrage an AWS mit Schlüsselwerten zu vergleichen, die in einer IAM-Richtlinie angegeben sind. Die Bedingungsschlüssel können entweder ein globaler Bedingungsschlüssel sein oder vom AWS-Service definiert werden. AWS-Servicespezifische Bedingungsschlüssel können nur innerhalb dieses Services verwendet werden (z. B. EC2-Bedingungen für EC2-API-Aktionen). Weitere Informationen finden Sie unter Aktionen, Ressourcen und Bedingungskontextschlüssel für AWS-Services.

Ein Bedingungselement kann mehrere Bedingungen enthalten, und innerhalb jedes Bedingungsblocks kann es mehrere Schlüssel-Wert-Paare geben. Weitere Informationen finden Sie unter Eine Bedingung mit mehreren Schlüsseln oder Werten erstellen.

In dieser Beispielrichtlinie entspricht das Condition-Element, wenn eine IAM-API-Anfrage vom IAM-Benutzer admin aufgerufen wird und die Quell-IP-Adresse von 1.1.1.0/24 oder 2.2.2.0/24 stammt.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iam:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:username": "admin"
        },
        "IpAddress": {
          "aws:SourceIp": [
            "1.1.1.0/24",
            "2.2.2.0/24"
          ]
        }
      }
    }
  ]
}

Beispiele für IAM-Richtlinienfehler und Problembehandlung

Sehen Sie sich die folgenden Beispiele an, um die Fehlermeldung, den API-Aufrufer, die API und die aufgerufenen Ressourcen zu identifizieren:

Beispiel für eine FehlermeldungAPI-AufruferAPIRessourcenWann
A:„Beim Aufrufen der DescribeInstances-Operation ist ein Fehler aufgetreten (UnauthorizedOperation): Sie sind nicht berechtigt, diesen Vorgang durchzuführen.“unbekanntDescribeInstancesunbekanntZeitpunkt des Auftretens des Fehlers
B:„Beim Aufrufen der AssumeRole-Operation ist ein Fehler aufgetreten (AccessDenied): Benutzer: arn:aws:iam::123456789012:user/test ist nicht berechtigt, Folgendes auszuführen: sts:AssumeRole auf Ressource: arn:aws:iam::123456789012:role/EC2-FullAccess“arn:aws:iam: :123456789012:user/testAssumeRolearn:aws:iam::123456789012:role/EC2-FullAccessZeitpunkt des Auftretens des Fehlers
C:„Beim Aufrufen der GetSessionToken-Operation ist ein Fehler aufgetreten (AccessDenied): GetSessionToken kann nicht mit Sitzungsanmeldeinformationen aufgerufen werden.“unbekanntGetSessionTokenunbekanntZeitpunkt des Auftretens des Fehlers
D:„Beim Aufrufen der AssociateIamInstanceProfile-Operation ist ein Fehler aufgetreten (UnauthorizedOperation): Sie sind nicht berechtigt, diesen Vorgang durchzuführen. Verschlüsselte Autorisierungsfehlermeldung: ...“unbekanntAssociateIamInstanceProfileunbekanntZeitpunkt des Auftretens des Fehlers

Mithilfe dieser Bewertungsmethode können Sie die Ursache der Fehlermeldungen ermitteln, die Sie bei Genehmigungsproblemen für verschiedene AWS-Services erhalten können. Weitere Informationen finden Sie in den folgenden Fehlermeldungen und Schritten zur Problembehandlung:

Beispiel für eine Fehlermeldung A:

Diese Fehlermeldung weist darauf hin, dass Sie nicht berechtigt sind, die DescribeInstances API aufzurufen.

Gehen Sie wie folgt vor, um diesen Fehler zu beheben:

  1. Identifizieren Sie den API-Aufrufer.
  2. Vergewissern Sie sich, dass die API-Aktion ec2:DescribeInstances nicht in Ablehnungsanweisungen enthalten ist.
  3. Vergewissern Sie sich, dass die API-Aktion ec2:DescribeInstances in den Erlauben-Anweisungen enthalten ist.
  4. Vergewissern Sie sich, dass für diese API-Aktion keine Ressource angegeben ist. **Hinweis:**Diese API-Aktion unterstützt keine Berechtigungen auf Ressourcenebene.
  5. Vergewissern Sie sich, dass alle in der Erlauben-Anweisung angegebenen IAM-Bedingungen von der Aktion DescribeInstances unterstützt werden und dass die Bedingungen erfüllt sind.

Weitere Informationen finden Sie unter DescribeInstanceStatus.

Beispiel für eine Fehlermeldung B:

Diese Fehlermeldung enthält den API-Namen, den API-Aufrufer und die Zielressource. Stellen Sie sicher, dass die IAM-Identität, die die API aufgerufen hat, den richtigen Zugriff auf die Ressourcen hat. Überprüfen Sie die IAM-Richtlinien mithilfe der vorherigen Bewertungsmethode.

Gehen Sie wie folgt vor, um die Vertrauensrichtlinie der IAM-Rolle zu bestätigen, um diesen Fehler zu beheben: EC2-FullAccess:

  1. Bestätigen Sie, dass arn:aws:iam::123456789012:user/test oder arn:aws:iam::123456789012:root in keiner Ablehnungsanweisung der Vertrauensrichtlinie enthalten ist.
  2. Vergewissern Sie sich, dass arn:aws:iam::123456789012:user/test oder arn:aws:iam::123456789012:root in der Erlauben-Anweisung der Vertrauensrichtlinie enthalten ist.
  3. Stellen Sie sicher, dass alle in dieser Erlauben-Anweisung angegebenen IAM-Bedingungen von der API-Aktion sts:AssumeRole unterstützt und erfüllt werden.

Gehen Sie wie folgt vor, um die an den API-Aufrufer angehängten IAM-Richtlinien zu bestätigen (arn:aws:iam::123456789012:user/test):

  1. Bestätigen Sie, dass arn:aws:iam::123456789012:role/EC2-FullAccess in keiner Ablehnungsanweisung mit der sts:AssumeRole-API-Aktion enthalten ist.
  2. Wenn arn:aws:iam::123456789012:root in der Erlauben-Anweisung der Vertrauensrichtlinie enthalten ist, überprüfen Sie mit der API-Aktion sts:AssumeRole, ob arn:aws:iam::123456789012:role/EC2-FullAccess in der Erlauben-Anweisung der IAM-Richtlinien enthalten ist.
  3. Bestätigen Sie, dass alle in der allow-Anweisung angegebenen IAM-Bedingungen von der API-Aktion sts:AssumeRole unterstützt werden und übereinstimmen.

Beispiel für eine Fehlermeldung C:

Diese Fehlermeldung weist darauf hin, dass get-session-token von temporären Anmeldeinformationen nicht unterstützt wird. Weitere Informationen finden Sie unter Vergleich der AWS-STS-API-Operationen.

Beispiel für eine Fehlermeldung D:

Diese Fehlermeldung gibt eine verschlüsselte Meldung zurück, die Details zum Autorisierungsfehler enthalten kann. Informationen zum Dekodieren der Fehlermeldung und zum Abrufen der Details des Berechtigungsfehlers finden Sie unter DecodeAuthorizationMessage. Identifizieren Sie nach dem Dekodieren der Fehlermeldung den API-Aufrufer und überprüfen Sie die Berechtigungen und Bedingungen auf Ressourcenebene.

Gehen Sie wie folgt vor, um die IAM-Richtlinienberechtigungen zu überprüfen, um diesen Fehler zu beheben:

  1. Wenn die Fehlermeldung darauf hinweist, dass die API explizit verweigert wurde, entfernen Sie die API-Aktionen ec2:AssociateIamInstanceProfile oder iam:PassRole aus der entsprechenden Anweisung.
  2. Vergewissern Sie sich, dass ec2:AssociateIamInstanceProfile und iam:PassRole in der Erlauben-Anweisung mit unterstützten und korrekten Ressourcenzielen enthalten sind. Stellen Sie beispielsweise sicher, dass es sich bei den Ressourcenzielen der API-Aktion ec2:AssociateIamInstanceProfile um EC2-Instances und bei den Ressourcenzielen von iam:PassRole um IAM-Rollen handelt.
  3. Wenn die API-Aktionen ec2:AssociateIamInstanceProfile und iam:PassRole in derselben Erlauben-Anweisung enthalten sind, stellen Sie sicher, dass alle Bedingungen von ec2:AssociateIamInstanceProfile und der iam:PassRole-API-Aktion unterstützt werden und dass die Bedingungen übereinstimmen.
  4. Wenn die API-Aktionen ec2:AssociateIamInstanceProfile und iam:PassRole in separaten Zulassungsanweisungen enthalten sind, stellen Sie sicher, dass alle Bedingungen in jeder erlaubten Anweisung von einer Aktion unterstützt werden und dass die Bedingungen übereinstimmen.

Weitere Informationen finden Sie unter Logik der Richtlinienauswertung und Feststellen, ob eine Anfrage innerhalb eines Kontos zulässig oder abgelehnt ist.


Ähnliche Informationen

Probleme mit IAM-Richtlinien beheben

Warum habe ich beim Versuch, eine kontoübergreifende IAM-Rolle anzunehmen, die Fehlermeldung „AccessDenied“ oder „Ungültige Informationen“ erhalten?

Referenz zu IAM-JSON-Richtlinienelementen