Wie behebe ich den AccessDeniedException-Fehler beim Zugreifen auf eine Amazon DynamoDB-Tabelle?

Lesedauer: 7 Minute
0

Ich möchte auf eine Amazon DynamoDB-Tabelle zugreifen, erhalte jedoch einen AccessDeniedException-Fehler.

Kurzbeschreibung

Dieser Fehler kann aus den folgenden Gründen auftreten:

  • Die AWS Identity and Access Management(IAM)-Rolle, mit der Sie auf die DynamoDB-Tabelle zugegriffen haben, hat nicht die erforderlichen Berechtigungen.
  • Der Zugriff auf die DynamoDB-Tabelle ist auf Organisationsebene beschrä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, sich aber nicht mit der MFA für den Zugriff auf die Tabelle angemeldet.
  • Sie verwenden einen vom Kunden oder von AWS verwalteten Schlüssel, um Ihre DynamoDB-Tabellen zu schützen.
  • Sie können nicht auf Amazon CloudWatch Contributor Insights für DynamoDB zugreifen.

**Hinweis:**Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, finden Sie weitere Informationen unter Troubleshoot AWS CLI errors. Stellen Sie außerdem sicher, dass Sie die neueste AWS-CLI-Version verwenden.

Behebung

Die IAM-Rolle hat nicht die erforderlichen Berechtigungen

Gewähren Sie der IAM-Rolle, die Sie zum Zugreifen auf eine DynamoDB-Tabelle verwenden, beim Erstellen der Tabelle die erforderlichen Berechtigungen. IAM-Benutzern, -Gruppen oder -Rollen können Richtlinien zugewiesen werden, um die erforderlichen Berechtigungen zu erteilen. Weitere Informationen finden Sie unter Verwenden identitätsbasierter Richtlinien mit Amazon DynamoDB.
Verwenden Sie ein AWS-CLI-Skript, um Fehler bei IAM-Berechtigungs-API-Aufrufen zu beheben:

( 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'",'

Ersetzen Sie your-ARN durch die IAM-ARN für Ihre Ressourcen.

Hinweis: Für das AWS-CLI-Skript ist der JSON-Befehlszeilenprozessor jq erforderlich. 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

Die Ausgabe für diesen Befehl sieht etwa 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

In der vorherigen Ausgabe können Sie die Aktion ListTables nicht ausführen, da Sie dem Benutzer 111122223333 eine Berechtigung zugewiesen haben, die den Vorgang verweigert. Die zweite Meldung bedeutet, dass keine identitätsbasierte Richtlinie die Aktion DynamoDB:ListTables zulässt.

Mit folgenden bewährten Methoden stellen Sie sicher, dass Ihre IAM-Rolle die erforderlichen Berechtigungen für den Zugriff auf die DynamoDB-Tabelle hat:

  • Nehmen Sie die IAM-Rolle in keine DENY-Anweisung der Vertrauensrichtlinie auf.
  • Nehmen Sie die IAM-Rolle in die ALLOW-Anweisung der Vertrauensrichtlinie auf.
  • Stellen Sie sicher, dass alle in der ALLOW-Anweisung angegebenen IAM-Bedingungen von der API-Aktion sts:AssumeRole unterstützt werden.
  • Wenn Sie die AWS-CLI für den Zugriff auf die DynamoDB-Tabelle verwenden, verwenden Sie die richtige Zugriffsschlüssel-ID und den richtigen geheimen Zugriffsschlüssel.

Weitere Informationen finden Sie unter Wie kann ich Daten erhalten, die bei der Behebung von Fehlern mit verweigertem oder nicht autorisiertem IAM-Zugriff helfen?

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

Wenn Sie beim Versuch, auf die DynamoDB-Tabelle zuzugreifen, die folgende Fehlermeldung erhalten, wurde Ihnen der Zugriff durch eine Service-Kontrollrichtlinie (SCP) 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, ändern Sie die auf Organisationsebene definierte Richtlinie.

Hinweis: Wenn Sie DynamoDB-Vorgänge auf Organisationsebene verweigern, werden die Vorgänge bei allen IAM-Rollen, die in dieser Organisation oder diesem AWS-Konto vorhanden sind, verweigert. Selbst wenn die Rolle oder das Konto über die erforderlichen Berechtigungen verfügt, erhält die Rolle oder das Konto keinen Zugriff.

Die Amazon VPC-Endpunktrichtlinie schränkt den Vorgang ein

Um die Vertraulichkeit und Sicherheit der Datenübertragung zwischen der DynamoDB-Tabelle und Ihrer Anwendung zu verbessern, können Sie eine Amazon VPC verwenden. Wenn für den VPC-Endpunkt eine IAM-Ressourcenrichtlinie gilt, die den Zugriff der IAM-Benutzer auf die Tabelle einschränkt, wird die folgende Fehlermeldung 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“

Wenn Sie diesen Fehler erhalten, enthält die VPC-Endpunktrichtlinie eine explizite DENY-Anweisung, die den ListTables-Vorgang für den Benutzer Admin verweigert.

Um die VPC-Endpunktrichtlinie anzuzeigen, führen Sie den AWS-CLI-Befehl describe-vpc-endpoints aus. Alternativ können Sie die Richtlinie mit folgenden Schritten in der Konsole anzeigen:

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

Um dieses Problem zu beheben, ändern Sie die VPC-Endpunktrichtlinie.

Sie haben nicht die MFA verwendet, um sich zum Zugreifen auf die Tabelle anzumelden

Angenommen, Sie haben die 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, bei denen die MFA zur Authentifizierung verwendet werden muss, verweigert. Wenn der IAM-Benutzer nicht mit der MFA angemeldet ist, werden alle Aktionen verweigert, die nicht in der obigen Richtlinie aufgeführt sind, einschließlich DynamoDB-Aktionen.

Melden Sie sich mit der MFA an, um dieses Problem zu beheben.

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

DynamoDB-Tabellen, die einen vom Kunden verwalteten Schlüssel oder einen AWS Key Management Service(AWS KMS)-Schlüssel verwenden, müssen über die richtigen Berechtigungen verfügen. Die KMS-Schlüsselrichtlinien müssen es DynamoDB gestatten, den Schlüssel in Ihrem Namen zu verwenden. Der IAM-Benutzer, der auf die Tabelle zugreift, muss mindestens die folgenden Berechtigungen für den AWS-KMS-Schlüssel haben:

  • 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.
  • Zum Zugreifen auf verschlüsselte Schlüssel benötigt der AWS-KMS-Schlüssel die Berechtigungen kms:Encrypt und kms:Decrypt.
  • Mit dem Tabellenschlüssel werden die Datenverschlüsselungsschlüssel gesichert, 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 verschlüsselt DynamoDB die Datenverschlüsselungsschlüssel mit dem neuen Tabellenschlüssel erneut. Für diesen Vorgang benötigen Sie die Berechtigung kms:Reencrypt.
  • DynamoDB ermittelt mithilfe des Vorgangs kms:DescribeKey, ob der von Ihnen gewählte kundenverwaltete Schlüssel innerhalb des Kontos und der Region existiert. Wenn der Schlüssel unerwartet entfernt wird, gibt der DescribeKey-Aufruf einen Fehler zurück.
  • DynamoDB verwendet Genehmigungen, um Berechtigungen für einen vom Kunden verwalteten Schlüssel festzulegen. Diese erteilten Genehmigungen für Berechtigungen werden verwendet, wenn DynamoDB im Hintergrund Aufgaben für die Systemwartung und den kontinuierlichen Datenschutz ausführt. Erteilte Genehmigungen für Berechtigungen 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 Verwendung von AWS KMS durch Amazon DynamoDB.

Sie können nicht auf CloudWatch Contributor Insights für DynamoDB zugreifen

Wenn Sie die Fehlermeldung erhalten, während Sie versuchen, auf CloudWatch Contributor Insights für DynamoDB zuzugreifen, verfügen Sie möglicherweise nicht über die richtigen IAM-Berechtigungen. Für den Zugriff auf CloudWatch Contributor Insights benötigen Sie die folgenden Berechtigungen:

Weitere Informationen finden Sie unter CloudWatch Contributor Insights für DynamoDB: Funktionsweise

Hinweis: DynamoDB unterstützt keine attributbasierte Zugriffskontrolle (ABAC). Außerdem kann der Zugriff auf Tabellen nicht durch tagbasierte Bedingungen kontrolliert werden. Verwenden Sie stattdessen IAM-Richtlinienbedingungen für eine detaillierte Zugriffskontrolle (FGAC).

Ähnliche Informationen

IAM: Erlaubt und verweigert den Zugriff auf mehrere Dienste programmgesteuert und in der Konsole

Verwenden ressourcenbasierter Richtlinien für DynamoDB

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Monaten