Wie behebe ich den Fehler AccessDeniedException, wenn ich versuche, auf eine Amazon DynamoDB-Tabelle zuzugreifen?

Letzte Aktualisierung: 29.08.2022

Ich versuche auf eine Amazon DynamoDB-Tabelle zuzugreifen und erhalte den Fehler AccessDeniedException.

Kurzbeschreibung

Sie könnten diesen Fehler aus den folgenden Gründen erhalten:

  • Die AWS Identity and Access Management (IAM)-Rolle, die Sie für den Zugriff auf die DynamoDB-Tabelle verwendet haben, verfügt nicht über die erforderlichen Berechtigungen.
  • Der Zugriff auf die DynamoDB-Tabelle ist auf Organisationsebene eingeschränkt.
  • Die mit dem Amazon Virtual Private Cloud (Amazon VPC)-Endpunkt für DynamoDB verknüpfte Richtlinie schränkt den Vorgang ein.
  • Sie haben die Multi-Faktor-Authentifizierung (MFA) aktiviert und versucht, auf die Tabelle zuzugreifen, ohne sich mit MFA anzumelden.
  • Sie verwenden einen vom Kunden verwalteten Schlüssel oder einen von AWS verwalteten Schlüssel, um Ihre DynamoDB-Tabellen zu schützen.

Lösung

Die IAM-Rolle hat nicht die erforderlichen Berechtigungen.

DynamoDB unterstützt keine ressourcenbasierten Richtlinien. Stellen Sie beim Erstellen einer DynamoDB-Tabelle sicher, dass Sie der IAM-Rolle, die Sie für den Zugriff auf die Tabelle verwenden, die erforderlichen Berechtigungen erteilen. Sie können die Richtlinien an IAM-Benutzer, -Gruppen oder -Rollen anhängen, um die erforderlichen Berechtigungen zu erteilen. Für weitere Informationen siehe Identitätsbasierte Richtlinien (IAM-Richtlinien) für Amazon DynamoDB verwenden.

Sie können ein AWS Command Line Interface (AWS CLI)-Skript verwenden, um Fehler bei API-Aufrufen für IAM-Berechtigungen zu beheben.

Hinweis: Dieses AWS-CLI-Skript erfordert den JSON-Prozessor der jq-Befehlszeile. Das Tutorial und Anweisungen zum Herunterladen finden Sie unter JSON-Ausgabeformat. Führen Sie für Distributionen, die das Paket yum verwenden, den folgenden Befehl aus:

$ sudo yum install jq

Führen Sie den folgenden AWS CLI-Befehl aus:

( echo "Time,Identity ARN,Event ID,Service,Action,Error,Message";
>   aws cloudtrail lookup-events --start-time "2022-08-04T13:23:00Z" --end-time "2022-08-04T13:27:00Z" --query "Events[*].CloudTrailEvent" --output text \
>     | jq -r ". | select(.userIdentity.arn == \"your-ARN\" and .eventType == \"AwsApiCall\" and .errorCode != null
>     and (.errorCode | ascii_downcase | (contains(\"accessdenied\") or contains(\"unauthorized\"))))
>     | [.eventTime, .userIdentity.arn, .eventID, .eventSource, .eventName, .errorCode, .errorMessage] | @csv"
> ) | column -t -s'",'

Hinweis: Stellen Sie sicher, dass Sie your-ARN durch den IAM-ARN für Ihre Ressourcen ersetzen.

Die Ausgabe dieses Befehls sieht wie folgt aus:

Time                 Identity ARN                           Event ID                             Service                Action     Error Message 
2022-08-04T13:24:14Z arn:aws:iam::111122223333:user/article 42f420fe-ef06-43be-98a6-d5a0a90d7b4c dynamodb.amazonaws.com ListTables AccessDenied User: arn:aws:iam::111122223333:user/article is not authorized to perform: dynamodb:ListTables on resource: arn:aws:dynamodb:us-east-1:111122223333:table/* with an explicit deny in an identity-based policy
2022-08-04T13:51:22Z arn:aws:iam::111122223333:user/article b174e4e1-94a7-403e-a15f-1234aec796a6 dynamodb.amazonaws.com ListTables AccessDenied User: arn:aws:iam::111122223333:user/article is not authorized to perform: dynamodb:ListTables on resource: arn:aws:dynamodb:us-east-1:111122223333:table/* because no identity-based policy allows the dynamodb:ListTables action

Die erste Meldung in diesem Beispiel bedeutet, dass Sie die ListTables-Aktion nicht ausführen können, da Sie dem Benutzer 111122223333 eine Berechtigung zugewiesen haben, die diesen Vorgang verweigert. Die zweite Meldung bedeutet, dass keine identitätsbasierte Richtlinie die Aktion dynamodb:ListTables zulässt.

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

Verwenden Sie die folgenden bewährten Methoden, um sicherzustellen, dass Ihre IAM-Rolle über die erforderlichen Berechtigungen für den Zugriff auf die DynamoDB-Tabelle verfügt:

  • Stellen Sie sicher, dass die IAM-Rolle in keiner DENY-Anweisung der Vertrauensrichtlinie enthalten ist.
  • Stellen Sie sicher, dass die IAM-Rolle in der ALLOW-Anweisung der Vertrauensrichtlinie enthalten ist.
  • Stellen Sie sicher, dass alle in der ALLOW-Anweisung angegebenen IAM-Bedingungen von der API-Aktion sts:AssumeRole unterstützt werden.
  • Wenn Sie versuchen, über AWS CLI auf die DynamoDB-Tabelle zuzugreifen, stellen Sie sicher, dass Sie die richtige Zugriffsschlüssel-ID und den richtigen geheimen Zugriffsschlüssel verwendet haben.

Weitere Informationen finden Sie unter Wie erhalte ich Daten zur Behebung von Fehlern wegen verweigertem oder nicht autorisiertem IAM-Berechtigungszugriff?

Der Zugriff auf die DynamoDB-Tabelle ist auf Organisationsebene eingeschränkt

Wenn beim Versuch, auf die DynamoDB-Tabelle zuzugreifen, die folgende Fehlermeldung angezeigt wird, wurde der Zugriff aufgrund einer Service-Kontrollrichtlinie verweigert.

User: arn:aws:iam::11111222333:user/Admin is not authorized to perform: 
dynamodb:ListTables on resource: arn:aws:dynamodb:us-east-1:11111222333:table with an explicit deny in a service control policy

Um dieses Problem zu beheben, überprüfen Sie die Richtlinie, die auf Organisationsebene definiert ist.

Hinweis: Wenn Sie DynamoDB-Vorgänge auf Organisationsebene verweigern, kann keine der in dieser Organisation oder in diesem AWS-Konto vorhandenen IAM-Rollen auf DynamoDB zugreifen, obwohl sie über die erforderlichen Berechtigungen verfügen.

Die Amazon VPC-Endpunktrichtlinie schränkt den Vorgang ein

Sie können eine Amazon VPC verwenden, um den Datenschutz und die Sicherheit der Datenübertragung zwischen der DynamoDB-Tabelle und Ihrer Anwendung zu verbessern. Wenn Sie den Endpunkt erstellen, können Sie den Zugriff auf die Tabelle für bestimmte Benutzer einschränken, indem Sie eine IAM-Ressourcenrichtlinie mit einer expliziten oder impliziten Verweigerung an den VPC-Endpunkt anhängen. Wenn Sie den Zugriff auf den IAM-Benutzer beschränkt haben, der versucht, auf die Tabelle zuzugreifen, wird eine Fehlermeldung ähnlich der folgenden angezeigt:

An error occurred (AccessDeniedException) when calling the ListTables operation: User: arn:aws:iam::111222333444:user/Admin is not authorized to perform: dynamodb:ListTables on resource: arn:aws:dynamodb:us-east-1:11111222333:table/* with an explicit deny in a VPC endpoint policy

Dieser Fehler weist darauf hin, dass in der VPC-Endpunktrichtlinie eine explizite DENY-Anweisung vorhanden ist, die dem Benutzer Admin den ListTables-Vorgang verweigert.

Um die VPC-Endpunktrichtlinie anzuzeigen, führen Sie den AWS CLI-Befehl describe-vpc-endpoints aus.

-oder-

Führen Sie die folgenden Schritte aus:

  1. Öffnen Sie die Amazon VPC-Konsole.
  2. Wählen Sie Endpunkte im Navigationsbereich aus.
  3. Wählen Sie den VPC-Endpunkt aus.
  4. Wählen Sie die Registerkarte Richtlinie aus, um die Endpunktrichtlinie zu überprüfen.

Sie haben versucht, auf die Tabelle zuzugreifen, ohne sich mit MFA anzumelden

Angenommen, Sie haben MFA in Ihrem Konto mit der folgenden identitätsbasierten Richtlinie konfiguriert:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyAllExceptListedIfNoMFA",
      "Effect": "Deny",
      "NotAction": [
        "iam:CreateVirtualMFADevice",
        "iam:EnableMFADevice",
        "iam:GetUser",
        "iam:ListMFADevices",
        "iam:ListVirtualMFADevices",
        "iam:ResyncMFADevice",
        "sts:GetSessionToken"
      ],
      "Resource": "",
      "Condition": {
        "BoolIfExists": {
          "aws:MultiFactorAuthPresent": "false"
        }
      }
    }
  ]
}

In diesem Fall werden alle Aktionen mit Ausnahme derjenigen, die zur Authentifizierung mit MFA erforderlich sind, verweigert. Wenn der IAM-Benutzer nicht mit MFA angemeldet ist, werden alle Aktionen abgelehnt, die nicht in der obigen Richtlinie aufgeführt sind, einschließlich DynamoDB-Aktionen.

Ihre DynamoDB-Tabelle verwendet den vom Kunden verwalteten Schlüssel oder den von AWS verwalteten Schlüssel

Wenn Sie eine DynamoDB-Tabelle mit einem vom Kunden verwalteten Schlüssel oder einem AWS Key Management Service (AWS KMS)-Schlüssel erstellen, müssen Sie die Richtlinien für diesen KMS-Schlüssel DynamoDB die Berechtigung erteilen, um den Schlüssel in Ihrem Namen zu verwenden.

Stellen Sie sicher, dass der IAM-Benutzer, der auf die Tabelle zugreift, über die folgenden Mindestberechtigungen für den AWS-KMS-Schlüssel verfügt:

  • DynamoDB verwendet den AWS-KMS-Schlüssel, um einen eindeutigen Datenschlüssel für die Tabelle, den sogenannten Tabellenschlüssel, zu generieren und zu verschlüsseln. Um diesen Schlüssel zu generieren und zu verschlüsseln, benötigen Sie die Berechtigung kms:GenerateDataKey.
  • Der Tabellenschlüssel wird verwendet, um die Datenverschlüsselungsschlüssel zu sichern, die zum Verschlüsseln der Tabellendaten verwendet werden. Wenn der vom Kunden verwaltete Schlüssel für eine Tabelle geändert wird, erzeugt DynamoDB einen neuen Tabellenschlüssel. Anschließend verwendet DynamoDB den neuen Tabellenschlüssel, um die Datenverschlüsselungsschlüssel erneut zu verschlüsseln. Um diesen Vorgang ausführen zu können, benötigen Sie die Berechtigung kms:ReEncrypt.
  • DynamoDB verwendet den kms:DescribeKey-Vorgang, um zu ermitteln, ob der vom Kunden verwaltete Schlüssel innerhalb des Kontos und der Region vorhanden ist. Wenn der Schlüssel nach dem Zufallsprinzip entfernt wird, gibt der DescribeKey-Aufruf einen Fehler zurück.
  • DynamoDB verwendet Erteilungen, um Berechtigungen für einen vom Kunden verwalteten Schlüssel festzulegen. Diese Erteilungsberechtigungen werden verwendet, wenn DynamoDB die Systemwartung im Hintergrund und kontinuierliche Datenschutzaufgaben durchführt. Erteilungsberechtigungen werden auch zum Generieren von Tabellenschlüsseln verwendet. Stellen Sie daher sicher, dass Sie über die Berechtigung kms:CreateGrant verfügen.

Weitere Informationen finden Sie unter Wie Amazon DynamoDB AWS KMS verwendet.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?