Wie behebe ich die Fehler „AccessDenied“ oder „AccessDeniedException“ bei Amazon-SQS-API-Aufrufen?

Lesedauer: 4 Minute
0

Ich habe einen API-Aufruf von Amazon Simple Queue Service (Amazon SQS) ausgeführt und die Fehlermeldung „AccessDenied“ erhalten.

Kurzbeschreibung

Wenn ich einen Amazon SQS-API-Aufruf ausführe, erhalte ich die Fehlermeldung „AccessDenied“ oder „AccessDeniedException“ ähnlich der folgenden:

„An error occurred (AccessDenied) when calling the SendMessage operation: Access to the resource https://sqs.us-east-1.amazonaws.com/ is denied.“

-oder-

„An error occurred (KMS.AccessDeniedException) when calling the SendMessage operation: User: arn:aws:iam::xxxxx:user/xxxx is not authorized to perform: kms:GenerateDataKey on resource: arn:aws:kms:us-east-1:xxxx:key/xxxx with an explicit deny.“

Lösung

Amazon SQS-Zugriffsrichtlinie und IAM-Richtlinie

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

  • Entweder die SQS-Zugriffsrichtlinie oder die AWS Identity and Access Management (IAM)-Richtlinie müssen Berechtigungen enthalten, um den Zugriff für die Aktion ausdrücklich zuzulassen.

  • Es hat sich bewährt, die geringste Berechtigung nur für die Berechtigungen zu gewähren, die für die Ausführung einer Aufgabe erforderlich sind. Weitere Informationen finden Sie unter Berechtigungen mit den geringsten Rechten anwenden.

  • Wenn sich die SQS-Warteschlange in einem anderen Konto befindet, müssen sowohl die SQS-Zugriffsrichtlinie als auch die IAM-Richtlinie den Zugriff ausdrücklich zulassen.

    Wichtig: Eine ausdrückliche Ablehnung in einer der beiden Richtlinien hat Vorrang vor einer ausdrücklichen Zulassung.

  • Wenn die Richtlinie ein Bedingungselement verwendet, überprüfen Sie, ob die Bedingung den Zugriff einschränkt.

  • Wenn sich der Benutzer oder die Rolle in einer Organisation von AWS Organizations befindet, die SCP verwendet, stellen Sie sicher, dass der SCP den Benutzer oder die Rolle nicht blockiert.

Um die IAM-Identität zu bestätigen, die für API-Aufrufe verwendet wird, führen Sie den AWS-CLI-Befehl get-caller-identity aus:

aws sts get-caller-identity

Weitere Informationen zu Amazon SQS-Zugriffsberechtigungen finden Sie unter Welche Berechtigungen benötige ich für den Zugriff auf eine Amazon SQS-Warteschlange?

Berechtigungen für AWS Key Management Service (AWS KMS)

Wenn in Ihrer Amazon-SQS-Warteschlange serverseitige Verschlüsselung (SSE) aktiviert ist, müssen sowohl Produzenten als auch Verbrauchern Berechtigungen erteilt werden. Die erforderlichen Berechtigungen werden mit einem von AWS verwalteten AWS-KMS-Schlüssel oder einem vom Kunden verwalteten Schlüssel bereitgestellt. Eine vom Kunden verwaltete Schlüsselrichtlinie muss Zugriffsberechtigungen für jeden Warteschlangenproduzenten und -verbraucher beinhalten. Oder aktualisieren Sie die IAM-Richtlinie, sodass sie die erforderlichen AWS-KMS-Berechtigungen für den AWS-KMS-Schlüssel enthält.

Um von einem anderen Konto aus auf eine SSE-Warteschlange von Amazon SQS zuzugreifen, muss die Warteschlange einen vom Kunden verwalteten Schlüssel verwenden. Sie können keinen von AWS verwalteten Schlüssel verwenden, da nur vom Kunden verwaltete Schlüsselrichtlinien geändert werden können. Die AWS-KMS-Schlüsselrichtlinie muss den kontoübergreifenden Zugriff auf den AWS-KMS-Schlüssel ermöglichen. Die IAM-Richtlinie muss Berechtigungen für den Zugriff auf den AWS-KMS-Schlüssel enthalten.

Weitere Informationen finden Sie unter Schlüsselverwaltung.

VPC-Endpunktrichtlinie

Wenn Sie über einen Amazon Virtual Private Cloud (Amazon VPC)-Endpunkt auf SQS zugreifen, muss die SQS-VPC-Endpunktrichtlinie den Zugriff zulassen.

Diese Beispiel-VPC-Endpunktrichtlinie legt fest, dass der IAM-Benutzer MyUser Nachrichten an die SQS-Warteschlange MyQueue senden darf. Anderen Aktionen, IAM-Benutzern und SQS-Ressourcen wird der Zugriff über den VPC-Endpunkt verweigert.

{
  "Statement": [
    {
      "Action": [
        "sqs:SendMessage"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:sqs:us-east-2:123456789012:MyQueue",
      "Principal": {
        "AWS": "arn:aws:iam:123456789012:user/MyUser"
      }
    }
  ]
}

**Hinweis:**Sie können VPC nur mit HTTPS-Amazon-SQS-Endpunkten verwenden.

Berechtigungen für die SQS-Konsole

Um die SQS-Warteschlangen und -Attribute von der SQS-Konsole aus anzuzeigen, müssen Benutzer über Berechtigungen für die Aktionen ListQueues und GetQueueAttributes verfügen:

{
  "Sid": "Statement1",
  "Effect": "Allow",
  "Action": [
    "sqs:ListQueues",
    "sqs:GetQueueAttributes"
  ],
  "Resource": "*"
}

**Hinweis:**Sie können die API-Aktion ListQueues mit bestimmten Warteschlangen nicht verwenden. Die ListQueues-API muss auf die Ressource „*“ oder „arn:aws:sqs:region:account\ _id:*“ angewendet werden.

Richtlinie „Alle Warteschlangen ablehnen“

Möglicherweise verlieren Sie den Zugriff auf die SQS-Warteschlange, wenn eine Alle-ablehnen-Richtlinie hinzugefügt wird, die dem folgenden Beispiel ähnelt:

{
  "Sid": "deny-sqs-actions",
  "Effect": "Deny",
  "Principal": "*",
  "Action": "SQS:*",
  "Resource": "queueName"
}

Wenn Sie den Zugriff auf die SQS-Warteschlange verloren haben, verwenden Sie die Root-Benutzer-Anmeldeinformationen, um auf die Warteschlange zuzugreifen, und entfernen Sie die Alle-ablehnen-Richtlinie. Weitere Informationen finden Sie unter Wie behebe und verhindere ich Probleme mit dem Amazon SQS-Warteschlangenzugriff, wenn ich die Warteschlangenrichtlinie „Ablehnen“ verwende?

Ähnliche Informationen

Tutorial: Senden einer Nachricht von Amazon Virtual Private Cloud an eine Amazon SQS-Warteschlange

Amazon SQS-API-Berechtigungen: Aktionen und Ressourcenreferenz