Uso de la autenticación y autorización de IAM para Amazon MQ for RabbitMQ - Amazon MQ

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de la autenticación y autorización de IAM para Amazon MQ for RabbitMQ

El siguiente procedimiento muestra cómo habilitar la autenticación y la autorización de AWS IAM para un bróker de Amazon MQ for RabbitMQ. Tras habilitar la IAM, los usuarios pueden autenticarse con las credenciales de IAM para acceder a la API de administración de AWS RabbitMQ y conectarse a través de AMQP. Para obtener más información sobre cómo funciona la autenticación de IAM con Amazon MQ para RabbitMQ, consulte. Autenticación y autorización de IAM para Amazon MQ para RabbitMQ

Requisitos previos

  • AWS credenciales de administrador de la AWS cuenta propietaria del bróker Amazon MQ for RabbitMQ

  • Un entorno de shell configurado con estas credenciales de administrador (mediante perfiles AWS CLI o variables de entorno)

  • AWS CLI instalada y configurada

  • jqProcesador JSON de línea de comandos instalado

  • curlherramienta de línea de comandos instalada

Configurar la autenticación y la autorización de IAM mediante AWS CLI

  1. Defina las variables de entorno

    Establezca las variables de entorno necesarias para su corredor:

    export AWS_DEFAULT_REGION=<region> export BROKER_ID=<broker-id>
  2. Habilite los tokens JWT salientes

    Habilite la federación de identidades web salientes para su cuenta: AWS

    ISSUER_IDENTIFIER=$(aws iam enable-outbound-web-identity-federation --query 'IssuerIdentifier' --output text) echo $ISSUER_IDENTIFIER

    El resultado muestra una URL de identificador de emisor única para su cuenta en este formato. https://<id>.tokens.sts.global.api.aws

  3. Cree el documento de política de IAM

    Cree un documento de política que conceda permisos para obtener tokens de identidad web:

    cat > policy.json << 'EOF' { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "sts:GetWebIdentityToken", "sts:TagGetWebIdentityToken" ], "Resource": "*" } ] } EOF
  4. Cree la política de confianza

    Recupera la identidad de la persona que llama y crea un documento de política de confianza:

    CALLER_ARN=$(aws sts get-caller-identity --query Arn --output text) cat > trust-policy.json << EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "$CALLER_ARN" }, "Action": "sts:AssumeRole" } ] } EOF
  5. Cree el rol de IAM

    Cree el rol de IAM y adjunte la política:

    aws iam create-role --role-name RabbitMqAdminRole --assume-role-policy-document file://trust-policy.json aws iam put-role-policy --role-name RabbitMqAdminRole --policy-name RabbitMqAdminRolePolicy --policy-document file://policy.json
  6. Configure los ajustes de RabbitMQ OAuth2

    Cree un archivo de configuración de RabbitMQ con los ajustes de autenticación y autorización: OAuth2

    cat > rabbitmq.conf << EOF auth_backends.1 = oauth2 auth_backends.2 = internal auth_oauth2.jwks_url = ${ISSUER_IDENTIFIER}/.well-known/jwks.json auth_oauth2.resource_server_id = rabbitmq auth_oauth2.scope_prefix = rabbitmq/ auth_oauth2.additional_scopes_key = sub auth_oauth2.scope_aliases.1.alias = arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/RabbitMqAdminRole auth_oauth2.scope_aliases.1.scope = rabbitmq/tag:administrator rabbitmq/read:*/* rabbitmq/write:*/* rabbitmq/configure:*/* auth_oauth2.https.hostname_verification = wildcard management.oauth_enabled = true EOF
  7. Actualice la configuración del corredor

    Aplique la nueva configuración a su corredor:

    # Retrieve the configuration ID CONFIG_ID=$(aws mq describe-broker --broker-id $BROKER_ID --query 'Configurations[0].Id' --output text) # Create a new configuration revision REVISION=$(aws mq update-configuration --configuration-id $CONFIG_ID --data "$(cat rabbitmq.conf | base64 --wrap=0)" --query 'LatestRevision.Revision' --output text) # Apply the configuration to the broker aws mq update-broker --broker-id $BROKER_ID --configuration Id=$CONFIG_ID,Revision=$REVISION # Reboot the broker to apply changes aws mq reboot-broker --broker-id $BROKER_ID

    Espere a que vuelva al estado de corredor RUNNING antes de continuar con el siguiente paso.

  8. Obtenga un token JWT

    Asuma el rol de IAM y obtenga un token de identidad web:

    # Assume the RabbitMqAdminRole ROLE_CREDS=$(aws sts assume-role --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/RabbitMqAdminRole --role-session-name rabbitmq-session) # Configure the session with temporary credentials export AWS_ACCESS_KEY_ID=$(echo "$ROLE_CREDS" | jq -r '.Credentials.AccessKeyId') export AWS_SECRET_ACCESS_KEY=$(echo "$ROLE_CREDS" | jq -r '.Credentials.SecretAccessKey') export AWS_SESSION_TOKEN=$(echo "$ROLE_CREDS" | jq -r '.Credentials.SessionToken') # Obtain the web identity token TOKEN_RESPONSE=$(aws sts get-web-identity-token \ --audience "rabbitmq" \ --signing-algorithm ES384 \ --duration-seconds 300 \ --tags Key=scope,Value="rabbitmq/tag:administrator") # Extract the token TOKEN=$(echo "$TOKEN_RESPONSE" | jq -r '.WebIdentityToken')
  9. Acceda a la API de administración de RabbitMQ

    Utilice el token JWT para acceder a la API de administración de RabbitMQ:

    BROKER_URL=<broker-id>.mq.<region>.on.aws curl -u ":$TOKEN" \ -X GET https://${BROKER_URL}/api/overview \ -H "Content-Type: application/json"

    Una respuesta correcta confirma que la autenticación de IAM funciona correctamente. La respuesta contiene información general sobre el corredor en formato JSON.

  10. Conéctese a través de AMQP utilizando el token JWT

    Pruebe la conectividad AMQP con el token JWT con la herramienta de prueba de rendimiento:

    BROKER_DNS=<broker-endpoint> CONNECTION_STRING=amqps://:${TOKEN}@${BROKER_DNS}:5671 docker run -it --rm --ulimit nofile=40960:40960 pivotalrabbitmq/perf-test:latest \ --queue-pattern 'test-queue-%d' --queue-pattern-from 1 --queue-pattern-to 1 \ --producers 1 --consumers 1 \ --uri ${CONNECTION_STRING} \ --flag persistent --rate 1

    Si recibe un ACCESS_REFUSED error, puede solucionar los problemas de configuración utilizando los registros de su agente. CloudWatch Puede encontrar el enlace al grupo de CloudWatch registros de registros de su agente en la consola de Amazon MQ.