Erfahren Sie, wie Sie in Amazon SQS eine Warteschlange mit unerlaubten Briefen konfigurieren - Amazon Simple Queue Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Erfahren Sie, wie Sie in Amazon SQS eine Warteschlange mit unerlaubten Briefen konfigurieren

Verwenden Sie Redrive für unzustellbare Nachrichten, um Nachrichten, die noch nicht verarbeitet wurden, aus einer Warteschlange für unzustellbare Nachrichten an ein anderes Ziel zu verschieben und dort zu verarbeiten. Standardmäßig verschiebt das Redrive für Warteschlangen für unzustellbare Nachrichten Nachrichten aus einer Warteschlange für unzustellbare Nachrichten in eine Quellwarteschlange. Sie können jedoch auch jede andere Warteschlange als Redrive-Ziel konfigurieren, wenn beide Warteschlangenarten vom gleichen Typ sind. Wenn es sich bei der Warteschlange für unzustellbare Nachrichten beispielsweise um eine FIFO-Warteschlange handelt, muss es sich bei der Redrive-Zielwarteschlange ebenfalls um eine FIFO-Warteschlange handeln. Darüber hinaus können Sie die Redrive-Geschwindigkeit konfigurieren, um die Geschwindigkeit festzulegen, mit der Amazon SQS Nachrichten verschiebt.

Anmerkung

Wird eine Nachricht von einer FIFO-Warteschlange in eine FIFO-DLQ verschoben, wird die Deduplizierungs-ID der ursprünglichen Nachricht durch die ID der ursprünglichen Nachricht ersetzt. Dadurch soll sichergestellt werden, dass die DLQ-Deduplizierung das Speichern von zwei unabhängigen Nachrichten, die zufällig eine gemeinsame Deduplizierungs-ID haben, nicht verhindert.

In Warteschlangen für unzustellbare Nachrichten werden Nachrichten in der Reihenfolge ihres Eingangs erneut weitergeleitet, wobei mit der ältesten Nachricht begonnen wird. Die Zielwarteschlange nimmt jedoch die Nachrichten, die erneut gesendet wurden, sowie Nachrichten von anderen Produzenten auf, je nachdem, wie in welcher Reihenfolge sie empfangen wurden. Wenn ein Producer beispielsweise Nachrichten an eine FIFO-Quellwarteschlange sendet und gleichzeitig Nachrichten aus einer Warteschlange für unzustellbare Nachrichten empfängt, werden die weitergeleiteten Nachrichten mit den neuen Nachrichten des Produzenten verwoben.

Anmerkung

Die Redrive-Aufgabe setzt die Aufbewahrungsfrist zurück. Alle neu zugestellten Nachrichten werden als neue Nachrichten betrachtet messageID und enqueueTime neu weitergeleiteten Nachrichten zugewiesen.

Konfiguration einer Redrive für Warteschlangen mit unerlaubten Briefen für eine bestehende Standardwarteschlange mithilfe der Amazon SQS SQS-API

Mit den API-Aktionen, und können Sie eine Warteschleife für unzustellbare Nachrichten StartMessageMoveTask erneut einrichtenListMessageMoveTasks: CancelMessageMoveTask

API-Aktion Beschreibung

StartMessageMoveTask

Startet eine asynchrone Aufgabe, um Nachrichten von einer angegebenen Quellwarteschlange in eine angegebene Zielwarteschlange zu verschieben.

ListMessageMoveTasks

Ruft die neuesten Aufgaben zum Verschieben von Nachrichten (bis zu 10) in einer bestimmten Quellwarteschlange ab.

CancelMessageMoveTask

Bricht eine angegebene Aufgabe zum Verschieben von Nachrichten ab. Eine Nachrichtenbewegung kann nur abgebrochen werden, wenn der aktuelle Status RUNNING ist.

Mit der Amazon SQS SQS-Konsole ein Redrive für eine bestehende Standardwarteschlange konfigurieren

  1. Öffnen Sie die Amazon SQS SQS-Konsole unter https://console.aws.amazon.com/sqs/.

  2. Wählen Sie im Navigationsbereich Queues (Warteschlangen) aus.

  3. Wählen Sie den Namen der Warteschlange, die Sie als Warteschlange für unzustellbare Nachrichten konfiguriert haben.

  4. Wählen Sie DLQ-Redrive starten.

  5. Führen Sie unter Redrive-Konfiguration für Nachrichtenziel einen der folgenden Schritte aus:

    • Um Nachrichten erneut in ihre Quellwarteschlange weiterzuleiten, wählen Sie Redrive zu Quell-Warteschlange(n).

    • Um Nachrichten erneut in eine andere Warteschlange weiterzuleiten, wählen Sie Redrive zu benutzerdefiniertem Ziel. Geben Sie dann den Amazon-Ressourcennamen (ARN) einer vorhandenen Zielwarteschlange an.

  6. Wählen Sie unter Einstellungen für die Geschwindigkeitssteuerung eine der folgenden Optionen aus:

    • Systemoptimiert – Redrive von Nachrichten aus der Warteschlange für unzustellbare Nachrichten mit der maximalen Anzahl an Nachrichten pro Sekunde.

    • Benutzerdefinierte maximale Geschwindigkeit – Redrive von Nachrichten aus der Warteschlange für unzustellbare Nachrichten mit einer benutzerdefinierten Höchstrate an Nachrichten pro Sekunde. Die maximal zulässige Rate beträgt 500 Nachrichten pro Sekunde.

      • Es wird empfohlen, mit einem kleinen Wert für die benutzerdefinierte maximale Geschwindigkeit zu beginnen und sicherzustellen, dass die Quellwarteschlange nicht mit Nachrichten überfüllt wird. Erhöhen Sie von dort aus schrittweise den Wert für die benutzerdefinierte maximale Geschwindigkeit und überwachen Sie weiterhin den Status der Quellwarteschlange.

  7. Wenn Sie mit der Konfiguration des Redrives für die Warteschlange für unzustellbare Nachrichten fertig sind, wählen Sie Nachrichten-Redrive aus.

    Wichtig

    Amazon SQS unterstützt das Filtern und Ändern von Nachrichten nicht, während sie aus der Warteschlange für unzustellbare Nachrichten zurückgeleitet werden.

    Eine Redrive-Aufgabe für eine Warteschlange für unzustellbare Nachrichten kann maximal 36 Stunden lang ausgeführt werden. Amazon SQS unterstützt maximal 100 aktive Redrive-Aufgaben pro Konto.

  8. Wenn Sie die Nachrichten-Redrive-Aufgabe abbrechen möchten, wählen Sie auf der Seite Details für Ihre Warteschlange die Option DLQ-Redrive abbrechen aus. Wenn Sie einen in Bearbeitung befindlichen Nachrichten-Redrive stornieren, verbleiben alle Nachrichten, die bereits erfolgreich in die Warteschlange für die Übertragung von Nachrichten verschoben wurden, in der Zielwarteschlange.

Konfigurieren von Warteschlangenberechtigungen für Redrives von Warteschlangen für unzustellbare Nachrichten

Sie können Benutzern Zugriff auf bestimmte Aktionen in der Warteschlange für unzustellbare Nachrichten gewähren, indem Sie Ihrer Richtlinie entsprechende Berechtigungen hinzufügen. Die Mindestberechtigungen für das Redrive einer Warteschlange für unzustellbare Nachrichten lauten wie folgt:

Mindestberechtigungen Erforderliche API-Methoden
So starten Sie ein Nachrichten-Redrive
  • Fügen Sie sqs:StartMessageMoveTask, sqs:ReceiveMessage, sqs:DeleteMessage und sqs:GetQueueAttributes der Warteschlange für unzustellbare Nachrichten hinzu. Wenn entweder die Warteschlange für unzustellbare Nachrichten oder die ursprüngliche Quellwarteschlange verschlüsselt sind (auch als SSE-Warteschlange bezeichnet), ist kms:Decrypt für jeden KMS-Schlüssel, der zum Verschlüsseln der Nachrichten verwendet wurde, ebenfalls erforderlich.

  • Fügen Sie die sqs:SendMessage der Zielwarteschlange hinzu. Wenn die Zielwarteschlange verschlüsselt ist, sind kms:GenerateDataKey und kms:Decrypt ebenfalls erforderlich.

So stornieren Sie einen in Bearbeitung befindlichen Nachrichten-Redrive
  • Fügen Sie sqs:CancelMessageMoveTask, sqs:ReceiveMessage, sqs:DeleteMessage und sqs:GetQueueAttributes der Warteschlange für unzustellbare Nachrichten hinzu. Wenn die Warteschlange für unzustellbare Nachrichten verschlüsselt ist (auch als SSE-Warteschlange bezeichnet), ist kms:Decrypt ebenfalls erforderlich.

So zeigen Sie den Verschiebungsstatus einer Nachricht an
  • Fügen Sie sqs:ListMessageMoveTasks und sqs:GetQueueAttributes der Warteschlange für unzustellbare Nachrichten hinzu.

So konfigurieren Sie Berechtigungen für ein unverschlüsseltes Warteschlangenpaar (eine Quellwarteschlange mit einer Warteschlange für unzustellbare Nachrichten)

Gehen Sie wie folgt vor, um Mindestberechtigungen für eine Dead-Letter-Queue (DLQ) -Redrive zu konfigurieren:

  1. Öffnen Sie unter https://console.aws.amazon.com/iam/ die IAM-Konsole.

  2. Klicken Sie im Navigationsbereich auf Policies (Richtlinien).

  3. Erstellen Sie eine neue Richtlinie und fügen Sie die folgenden Berechtigungen hinzu. Ordnen Sie die Richtlinie dem IAM-Benutzer oder der IAM-Rolle zu, die den Redrive-Vorgang ausführen wird.

    • Berechtigungen für die DLQ (Quellwarteschlange):

      • sqs:StartMessageMoveTask

      • sqs:CancelMessageMoveTask

      • sqs:ListMessageMoveTasks

      • sqs:ReceiveMessage

      • sqs:DeleteMessage

      • sqs:GetQueueAttributes

      • sqs:ListDeadLetterSourceQueues

      • Geben Sie den Ressourcen-ARN der DLQ (Quellwarteschlange) an (z. B. „arn:aws:sqs::: „). <DLQ_region> <DLQ_accountId> <DLQ_name>

    • Berechtigungen für die Zielwarteschlange:

      • sqs:SendMessage

      • Geben Sie die Resource ARN Zielwarteschlange an (z. B. „arn:aws:sqs: „). <DestQueue_region>:<DestQueue_accountId>:<DestQueue_name>

    • Berechtigungen für KMS-Schlüssel:

      • kms:Decrypt(Wird benötigt, um Nachrichten in der DLQ zu entschlüsseln.)

      • kms:GenerateDataKey(Wird benötigt, um Nachrichten in der Zielwarteschlange zu verschlüsseln.)

        • Resource ARNs:

          • Der ARN des KMS-Schlüssels, der zum Verschlüsseln von Nachrichten in der DLQ (Quellwarteschlange) verwendet wird (z. B. „arn:aws:kms: ::key/“). <region> <accountId> <SourceQueueKeyId>

          • Der ARN des KMS-Schlüssels, der zum Verschlüsseln von Nachrichten in der Zielwarteschlange verwendet wird (z. B. „arn:aws:kms: ::key/“). <region> <accountId> <DestinationQueueKeyId>

    Ihre Zugriffsrichtlinie sollte wie folgt aussehen:

    JSON
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:StartMessageMoveTask", "sqs:CancelMessageMoveTask", "sqs:ListMessageMoveTasks", "sqs:ReceiveMessage", "sqs:DeleteMessage", "sqs:GetQueueAttributes", "sqs:ListDeadLetterSourceQueues" ], "Resource": "arn:aws:sqs:<DLQ_region>:<DLQ_accountId>:<DLQ_name>", "Condition": { "StringEquals": { "aws:ResourceTag/QueueRole": "source" } } }, { "Effect": "Allow", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:<DestQueue_region>:<DestQueue_accountId>:<DestQueue_name>", "Condition": { "StringEquals": { "aws:ResourceTag/QueueRole": "destination" } } }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:<region>:<accountId>:key/<SourceQueueKeyId>", "arn:aws:kms:<region>:<accountId>:key/<DestQueueKeyId>" ] } ] }
So konfigurieren Sie Berechtigungen mithilfe eines unverschlüsselten Warteschlangenpaars (einer Quellwarteschlange mit einer Warteschlange für unzustellbare Nachrichten)

Gehen Sie wie folgt vor, um die Mindestberechtigungen zu konfigurieren, die für den Umgang mit einer standardmäßigen, unverschlüsselten Warteschlange mit unerlaubten Briefen (DLQ) erforderlich sind. Erforderliche Mindestberechtigungen sind diejenigen zum Empfangen, Löschen und Abrufen von Attributen aus der Warteschlange für unzustellbare Nachrichten sowie für das Senden von Attributen an die Quellwarteschlange.

  1. Öffnen Sie unter https://console.aws.amazon.com/iam/ die IAM-Konsole.

  2. Klicken Sie im Navigationsbereich auf Policies (Richtlinien).

  3. Erstellen Sie eine neue Richtlinie und fügen Sie die folgenden Berechtigungen hinzu. Ordnen Sie die Richtlinie dem IAM-Benutzer oder der IAM-Rolle zu, die den Redrive-Vorgang ausführen wird.

    • Berechtigungen für die DLQ (Quellwarteschlange):

      • sqs:StartMessageMoveTask

      • sqs:CancelMessageMoveTask

      • sqs:ListMessageMoveTasks

      • sqs:ReceiveMessage

      • sqs:DeleteMessage

      • sqs:ListDeadLetterSourceQueues

      • Geben Sie den Ressourcen-ARN der DLQ (Quellwarteschlange) an (z. B. „arn:aws:sqs::: „). <DLQ_region> <DLQ_accountId> <DLQ_name>

    • Berechtigungen für die Zielwarteschlange:

      • sqs:SendMessage

      • Geben Sie die Resource ARN Zielwarteschlange an (z. B. „arn:aws:sqs: „). <DestQueue_region>:<DestQueue_accountId>:<DestQueue_name>

    Ihre Zugriffsrichtlinie sollte wie folgt aussehen:

    JSON
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:StartMessageMoveTask", "sqs:CancelMessageMoveTask", "sqs:ListMessageMoveTasks", "sqs:ReceiveMessage", "sqs:DeleteMessage", "sqs:GetQueueAttributes", "sqs:ListDeadLetterSourceQueues" ], "Resource": "arn:aws:sqs:<DLQ_region>:<DLQ_accountId>:<DLQ_name>", "Condition": { "StringEquals": { "aws:ResourceTag/QueueRole": "source" } } }, { "Effect": "Allow", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:<DestQueue_region>:<DestQueue_accountId>:<DestQueue_name>", "Condition": { "StringEquals": { "aws:ResourceTag/QueueRole": "destination" } } } ] }

Verwenden von Redrive für Warteschlangen mit VPC-Endpunktzugriffskontrolle

Wenn Sie den Zugriff auf eine bestimmte Warteschlange VPCs mithilfe der aws:sourceVpc Bedingung einschränken, müssen Sie für AWS Dienste eine Ausnahme einrichten, um die Funktion zur erneuten Übertragung von Warteschlangen für Dead-Letter (DLQ) zu aktivieren. Das liegt daran, dass der Amazon SQS-Service beim Verschieben von Nachrichten außerhalb Ihrer VPC arbeitet.

Um DLQ-Redrive-Operationen zuzulassen, fügen Sie die aws:CalledViaLast Bedingung zu Ihrer Warteschlangenrichtlinie hinzu. Auf diese Weise kann Amazon SQS API-Aufrufe in Ihrem Namen tätigen und gleichzeitig die VPC-Einschränkungen für den direkten Zugriff beibehalten.

Gehen Sie wie folgt vor, um sowohl VPC-eingeschränkten Zugriff als auch DLQ Redrive zuzulassen:

  1. Verwenden Sie die aws:CalledViaLast Bedingung in Ihrer Warteschlangenrichtlinie.

  2. Wenden Sie die Richtlinie sowohl auf die Quellwarteschlange als auch auf die DLQ an

  3. Halten Sie VPC-Einschränkungen für den direkten Zugriff aus anderen Quellen aufrecht

Hier ist ein Beispiel für eine Richtlinie, die diese Anforderungen implementiert:

{ "Version": "2012-10-17", "Id": "SQSRedriveWithVpcRestriction", "Statement": [ { "Sid": "DenyOutsideVPCUnlessAWSService_DestQueue", "Effect": "Deny", "Principal": "*", "Action": "sqs:*", "Resource": "arn:aws:sqs:*:111122223333:DestQueue", "Condition": { "StringNotEquals": { "aws:SourceVpc": "vpc-1234567890abcdef0" }, "StringNotEqualsIfExists": { "aws:CalledViaLast": "sqs.amazonaws.com" } } }, { "Sid": "DenyOutsideVPCUnlessAWSService_DLQ", "Effect": "Deny", "Principal": "*", "Action": "sqs:*", "Resource": "arn:aws:sqs:*:111122223333:Dlq", "Condition": { "StringNotEquals": { "aws:SourceVpc": "vpc-1234567890abcdef0" }, "StringNotEqualsIfExists": { "aws:CalledViaLast": "sqs.amazonaws.com" } } } ] }
  • Ersetzen Sie die Platzhalterwerte durch Ihre tatsächlichen Werte

  • Diese Richtlinie verwendet eine „Deny“ -Anweisung mit Bedingungen, was sicherer ist als die Verwendung von „Allow“ -Anweisungen

  • Der StringNotEqualsIfExists Operator behandelt Fälle, in denen der Bedingungsschlüssel im Anforderungskontext möglicherweise nicht vorhanden ist.

Alternativ können Sie den aws:ViaAWSService Bedingungsschlüssel verwenden, um den dienstbasierten Zugriff zu ermöglichen und gleichzeitig die VPC-Einschränkungen beizubehalten. Dieser Bedingungsschlüssel gibt an, ob die Anfrage von einem AWS Dienst stammt. Hier ist ein Beispiel für eine Richtlinie, die aws:ViaAWSService anstelle von verwendet wirdaws:CalledViaLast:

{ "Version": "2012-10-17", "Id": "SQSRedriveWithVpcRestriction", "Statement": [ { "Sid": "DenyOutsideVPCUnlessAWSService_DestQueue", "Effect": "Deny", "Principal": "*", "Action": "sqs:*", "Resource": "arn:aws:sqs:*:111122223333:DestQueue", "Condition": { "StringNotEquals": { "aws:SourceVpc": "vpc-1234567890abcdef0" }, "BoolIfExists": { "aws:ViaAWSService": "false" } } }, { "Sid": "DenyOutsideVPCUnlessAWSService_DLQ", "Effect": "Deny", "Principal": "*", "Action": "sqs:*", "Resource": "arn:aws:sqs:*:111122223333:Dlq", "Condition": { "StringNotEquals": { "aws:SourceVpc": "vpc-1234567890abcdef0" }, "BoolIfExists": { "aws:ViaAWSService": "false" } } } ] }

Der BoolIfExists Betreiber mit aws:ViaAWSService Bedingung stellt sicher, dass Anfragen zulässig sind, wenn sie von Diensten stammen, und behält gleichzeitig die VPC-Beschränkungen für den direkten Zugriff bei. Dies kann einfacher zu verstehen und zu verwalten sein, da es direkt prüft, ob die Anfrage von einem AWS Dienst gestellt wurde, anstatt zu überprüfen, welcher Dienst den letzten Anruf getätigt hat.

Weitere Informationen zu Bedingungsschlüsseln, die in IAM- und Ressourcenrichtlinien verwendet werden, finden Sie unter IAM-JSON-Richtlinienelemente: Bedingung.