Verwenden der OAuth 2.0-Authentifizierung und -Autorisierung für Amazon MQ für RabbitMQ - Amazon MQ

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.

Verwenden der OAuth 2.0-Authentifizierung und -Autorisierung für Amazon MQ für RabbitMQ

In diesem Tutorial wird beschrieben, wie Sie die OAuth 2.0-Authentifizierung für Ihre Amazon MQ for RabbitMQ-Broker mit Amazon Cognito als 2.0-Anbieter konfigurieren. OAuth

Anmerkung

Amazon Cognito ist in China (Peking) und China (Ningxia) nicht verfügbar.

Wichtig

Dieses Tutorial ist spezifisch für Amazon Cognito, Sie können jedoch auch andere Identitätsanbieter (IdPs) verwenden. Weitere Informationen finden Sie unter OAuth 2.0-Authentifizierungsbeispiele.

Voraussetzungen für die Konfiguration der OAuth 2.0-Authentifizierung

Sie können die in diesem Tutorial benötigten Amazon Cognito-Ressourcen festlegen, indem Sie das AWS CDK Stack-Plug-In Amazon Cognito Stack für OAuth RabbitMQ 2 bereitstellen. Wenn Sie Amazon Cognito manuell einrichten, stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllen, bevor Sie OAuth 2.0 auf Ihrem Amazon MQ für RabbitMQ-Broker konfigurieren:

Voraussetzungen für die Einrichtung von Amazon Cognito
Voraussetzung für die Einrichtung von Amazon MQ
  • Eine funktionierende Docker-Installation zur Ausführung eines Bash-Skripts, das überprüft, ob das OAuth 2.0-Setup erfolgreich ist oder nicht.

  • AWS CLI Version >=2.28.23, um das Hinzufügen eines Benutzernamens und eines Passworts bei der Broker-Erstellung optional zu machen.

Konfiguration der OAuth 2.0-Authentifizierung mit Amazon Cognito mithilfe AWS CLI

Das folgende Verfahren zeigt, wie Sie die OAuth 2.0-Authentifizierung für Ihre Amazon MQ for RabbitMQ-Broker einrichten, die Amazon Cognito als IdP verwenden. Dieses Verfahren dient dazu, die erforderlichen Ressourcen AWS CLI zu erstellen und zu konfigurieren.

Stellen Sie im folgenden Verfahren sicher, dass Sie die Platzhalterwerte, wie ConfigurationID und Revision, durch ihre <c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca> tatsächlichen <2> Werte ersetzen.

  1. Erstellen Sie mit dem AWS CLI Befehl create-configuration eine neue Konfiguration, wie im folgenden Beispiel gezeigt.

    aws mq create-configuration \ --name "rabbitmq-oauth2-config" \ --engine-type "RABBITMQ" \ --engine-version "3.13"

    Dieser Befehl gibt eine Antwort zurück, die dem folgenden Beispiel ähnelt.

    { "Arn": "arn:aws:mq:us-west-2:123456789012:configuration:c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca", "AuthenticationStrategy": "simple", "Created": "2025-07-17T16:03:01.759943+00:00", "Id": "c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca", "LatestRevision": { "Created": "2025-07-17T16:03:01.759000+00:00", "Description": "Auto-generated default for rabbitmq-oauth2-config on RabbitMQ 3.13", "Revision": 1 }, "Name": "rabbitmq-oauth2-config" }
  2. Erstellen Sie eine Konfigurationsdatei, die aufgerufen wirdrabbitmq.conf, um OAuth 2.0 als Authentifizierungs- und Autorisierungsmethode zu verwenden, wie im folgenden Beispiel gezeigt.

    auth_backends.1 = oauth2 # FIXME: Update this value with the token signing key URL of your Amazon Cognito user pool. # If you used the AWS CDK stack to deploy Amazon Cognito, this is one of the stack outputs. auth_oauth2.jwks_url = ${RabbitMqOAuth2TestStack.JwksUri} auth_oauth2.resource_server_id = rabbitmq # Amazon Cognito does not include an audience field in access tokens auth_oauth2.verify_aud = false # Amazon Cognito does not allow * in its custom scopes. Use aliases to translate between Amazon Cognito and RabbitMQ. auth_oauth2.scope_prefix = rabbitmq/ auth_oauth2.scope_aliases.1.alias = rabbitmq/read:all auth_oauth2.scope_aliases.1.scope = rabbitmq/read:*/* auth_oauth2.scope_aliases.2.alias = rabbitmq/write:all auth_oauth2.scope_aliases.2.scope = rabbitmq/write:*/* auth_oauth2.scope_aliases.3.alias = rabbitmq/configure:all auth_oauth2.scope_aliases.3.scope = rabbitmq/configure:*/* # Allow OAuth 2.0 login for RabbitMQ management console management.oauth_enabled = true # FIXME: Update this value with the client ID of your public application client management.oauth_client_id = ${RabbitMqOAuth2TestStack.ManagementConsoleAppClientId} # FIXME: Update this value with the base JWKS URI (without /.well-known/jwks.json) auth_oauth2.issuer = ${RabbitMqOAuth2TestStack.Issuer} management.oauth_scopes = rabbitmq/tag:administrator

    Diese Konfiguration verwendet Bereichsaliase, um die in Amazon Cognito definierten Bereiche RabbitMQ-kompatiblen Bereichen zuzuordnen.

  3. Aktualisieren Sie die Konfiguration mithilfe des Befehls update-configuration, wie im folgenden Beispiel gezeigt AWS CLI . Fügen Sie in diesem Befehl die Konfigurations-ID hinzu, die Sie als Antwort auf Schritt 1 dieses Verfahrens erhalten haben. Beispiel, c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca.

    aws mq update-configuration \ --configuration-id "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>" \ --data "$(cat rabbitmq.conf | base64 --wrap=0)"

    Dieser Befehl gibt eine Antwort zurück, die dem folgenden Beispiel ähnelt.

    { "Arn": "arn:aws:mq:us-west-2:123456789012:configuration:c-b600ac8e-8183-4f74-a713-983e59f30e3d", "Created": "2025-07-17T16:57:04.520931+00:00", "Id": "c-b600ac8e-8183-4f74-a713-983e59f30e3d", "LatestRevision": { "Created": "2025-07-17T16:57:39.172000+00:00", "Revision": 2 }, "Name": "rabbitmq-oauth2-config", "Warnings": [] }
  4. Erstellen Sie einen Broker mit der OAuth 2.0-Konfiguration, die Sie in Schritt 2 dieses Verfahrens erstellt haben. Verwenden Sie dazu den AWS CLI Befehl create-broker, wie im folgenden Beispiel gezeigt. Geben Sie in diesem Befehl die Konfigurations-ID und die Revisionsnummer an, die Sie in den Antworten von Schritt 1 bzw. 2 erhalten haben. Beispiel: c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca und 2.

    aws mq create-broker \ --broker-name "rabbitmq-oauth2-broker" \ --engine-type "RABBITMQ" \ --engine-version "3.13" \ --host-instance-type "mq.m7g.large" \ --deployment-mode "CLUSTER_MULTI_AZ" \ --logs '{"General": true}' \ --publicly-accessible \ --configuration '{"Id": "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>","Revision": <2>}' \

    Dieser Befehl gibt eine Antwort zurück, die dem folgenden Beispiel ähnelt.

    { "BrokerArn": "arn:aws:mq:us-west-2:123456789012:broker:rabbitmq-oauth2-broker:b-2a1b5133-a10c-49d2-879b-8c176c34cf73", "BrokerId": "b-2a1b5133-a10c-49d2-879b-8c176c34cf73" }
  5. Vergewissern Sie sich, dass der Status des Brokers von CREATION_IN_PROGRESS zu wechseltRUNNING, indem Sie den AWS CLI Befehl describe-broker verwenden, wie im folgenden Beispiel gezeigt. Geben Sie in diesem Befehl die Broker-ID ein, die Sie im Ergebnis des vorherigen Schritts erhalten haben, z. B. b-2a1b5133-a10c-49d2-879b-8c176c34cf73

    aws mq describe-broker \ --broker-id "<b-2a1b5133-a10c-49d2-879b-8c176c34cf73>"

    Dieser Befehl gibt eine Antwort zurück, die dem folgenden Beispiel ähnelt. Die folgende Antwort ist eine abgekürzte Version der vollständigen Ausgabe, die der describe-broker Befehl zurückgibt. Diese Antwort zeigt den Brokerstatus und die Authentifizierungsstrategie, die zur Sicherung des Brokers verwendet wurden. In diesem Fall weist die config_managed Authentifizierungsstrategie darauf hin, dass der Broker OAuth zwei Authentifizierungsmethoden verwendet.

    { "AuthenticationStrategy": "config_managed", ..., "BrokerState": "RUNNING", ... }

    Um sich mit der RabbitMQ Management Console anzumelden OAuth2, muss der Broker-Endpunkt als gültige Callback-URL im entsprechenden Amazon Cognito-App-Client hinzugefügt werden. Weitere Informationen finden Sie in Schritt 5 bei der Einrichtung unseres Amazon Cognito CDK-Beispielstapels.

  6. Überprüfen Sie die OAuth 2.0-Authentifizierung und Autorisierung mit dem folgenden perf-test.sh Skript.

    Verwenden Sie dieses Bash-Skript, um die Konnektivität zu Ihrem Amazon MQ for RabbitMQ Broker zu testen. Dieses Skript ruft ein Token von Amazon Cognito ab und überprüft, ob die Verbindung ordnungsgemäß konfiguriert wurde. Wenn es erfolgreich konfiguriert wurde, werden Sie sehen, wie Ihr Broker Nachrichten veröffentlicht und verarbeitet.

    Wenn Sie eine ACCESS_REFUSED Fehlermeldung erhalten, können Sie mithilfe der CloudWatch Protokolle Ihres Brokers Fehler in Ihren Konfigurationseinstellungen beheben. Sie finden den Link für die CloudWatch Protokollgruppe für Ihren Broker in der Amazon MQ MQ-Konsole.

    In diesem Skript müssen Sie die folgenden Werte angeben:

    • CLIENT_IDundCLIENT_SECRET: Sie finden diese Werte auf der App-Client-Seite der Amazon Cognito Cognito-Konsole.

    • Cognito-Domain: Sie finden diese Domain auf der Amazon Cognito Cognito-Konsole. Wählen Sie unter Branding die Option Domain aus. Auf der Domain-Seite finden Sie diesen Wert im Abschnitt Resource Servers.

    • Amazon MQ-Broker-Endpunkt: Sie finden diesen Wert unter Verbindungen auf der Broker-Detailseite der Amazon MQ MQ-Konsole.

    #! /bin/bash set -e # Client information ## FIXME: Update this value with the client ID and secret of your confidential application client CLIENT_ID=${RabbitMqOAuth2TestStack.AmqpAppClientId} CLIENT_SECRET=${RabbitMqOAuth2TestStack.AmqpAppClientSecret} # FIXME: Update this value with the domain of your Amazon Cognito user pool RESPONSE=$(curl -X POST ${RabbitMqOAuth2TestStack.TokenEndpoint} \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials&client_id=${CLIENT_ID}&client_secret=${CLIENT_SECRET}&scope=rabbitmq/configure:all rabbitmq/read:all rabbitmq/tag:administrator rabbitmq/write:all") # Extract the access_token from the response. # This token will be passed in the password field when connecting to the broker. # Note that the username is left blank, the field is ignored by the plugin. BROKER_PASSWORD=$(echo ${RESPONSE} | jq -r '.access_token') # FIXME: Update this value with the endpoint of your broker. For example, b-89424106-7e0e-4abe-8e98-8de0dada7630.mq.us-east-1.on.aws. BROKER_DNS=<broker_dns> CONNECTION_STRING=amqps://:${BROKER_PASSWORD}@${BROKER_DNS}:5671 # Produce/consume messages using the above connection string QUEUES_COUNT=1 PRODUCERS_COUNT=1 CONSUMERS_COUNT=1 PRODUCER_RATE=1 docker run -it --rm --ulimit nofile=40960:40960 pivotalrabbitmq/perf-test:latest \ --queue-pattern 'test-queue-%d' --queue-pattern-from 1 --queue-pattern-to $QUEUES_COUNT \ --producers $PRODUCERS_COUNT --consumers $CONSUMERS_COUNT \ --id "test${QUEUES_COUNT}q${PRODUCERS_COUNT}p${CONSUMERS_COUNT}c${PRODUCER_RATE}r" \ --uri ${CONNECTION_STRING} \ --flag persistent --rate $PRODUCER_RATE

Konfiguration OAuth 2.0 und einfache Authentifizierung mit Amazon Cognito

Wenn Sie einen Broker mit OAuth 2.0-Authentifizierung erstellen, können Sie eine der folgenden Authentifizierungsmethoden angeben:

  • OAuth Nur 2.0: Um diese Methode zu verwenden, geben Sie bei der Erstellung des Brokers keinen Benutzernamen und kein Passwort an. Das vorherige Verfahren zeigt, wie nur die OAuth 2.0-Authentifizierungsmethode verwendet wird.

  • Sowohl OAuth 2.0 als auch einfache Authentifizierung: Um diese Methode zu verwenden, geben Sie bei der Erstellung des Brokers einen Benutzernamen und ein Passwort ein. Fügen Sie auth_backends.2 = internal außerdem Ihre Broker-Konfiguration hinzu, wie im folgenden Verfahren gezeigt.

Stellen Sie im folgenden Verfahren sicher, dass Sie die Platzhalterwerte, wie z. B. <ConfigurationId> und<Revision>, durch ihre tatsächlichen Werte ersetzen.

  1. Um beide Authentifizierungsmethoden zu verwenden, erstellen Sie Ihre Broker-Konfiguration, wie im folgenden Beispiel gezeigt.

    auth_backends.1 = oauth2 auth_backends.2 = internal # FIXME: Update this value with the token signing key URL of your Amazon Cognito user pool auth_oauth2.jwks_url = ${RabbitMqOAuth2TestStack.JwksUri} auth_oauth2.resource_server_id = rabbitmq auth_oauth2.verify_aud = false auth_oauth2.scope_prefix = rabbitmq/ auth_oauth2.scope_aliases.1.alias = rabbitmq/read:all auth_oauth2.scope_aliases.1.scope = rabbitmq/read:*/* auth_oauth2.scope_aliases.2.alias = rabbitmq/write:all auth_oauth2.scope_aliases.2.scope = rabbitmq/write:*/* auth_oauth2.scope_aliases.3.alias = rabbitmq/configure:all auth_oauth2.scope_aliases.3.scope = rabbitmq/configure:*/*

    Diese Konfiguration verwendet Bereichsaliase, um die in Amazon Cognito definierten Bereiche RabbitMQ-kompatiblen Bereichen zuzuordnen.

  2. Erstellen Sie einen Broker, der beide Authentifizierungsmethoden verwendet, wie im folgenden Beispiel gezeigt.

    aws mq create-broker \ --broker-name "rabbitmq-oauth2-broker-with-internal-user" \ --engine-type "RABBITMQ" \ --engine-version "3.13" \ --host-instance-type "mq.m7g.large" \ --deployment-mode "CLUSTER_MULTI_AZ" \ --logs '{"General": true}' \ --publicly-accessible \ --configuration '{"Id": "<ConfigurationId>","Revision": <Revision>}' \ --users '[{"Username":"<myUser>","Password":"<myPassword11>"}]'
  3. Stellen Sie sicher, dass der Brokerstatus und die Konfiguration für die Einrichtung der Authentifizierungsmethode erfolgreich waren, wie in den Schritten 5 und 6 des Konfiguration der OAuth 2.0-Authentifizierung mit Amazon Cognito Verfahrens beschrieben.