¿Cómo soluciono los errores «AccessDenied» o «AccessDeniedException» en las llamadas a la API de Amazon SQS?

5 minutos de lectura
0

Al ejecutar una llamada a la API de Amazon Simple Queue Service (Amazon SQS), recibo un error «AccessDenied».

Breve descripción

Cuando ejecuto una llamada a la API de Amazon SQS, recibo un error «AccessDenied» o «AccessDeniedException» similar al siguiente:

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

o bien

«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».

Solución

Política de acceso de Amazon SQS y política de IAM

Nota: Si recibe errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Errores de solución de problemas de la AWS CLI. Además, asegúrese de utilizar la versión más reciente.

  • La política de acceso de SQS o la política de AWS Identity and Access Management (IAM) deben incluir permisos que permitan explícitamente el acceso a la acción.

  • Se recomienda conceder el privilegio mínimo únicamente para los permisos necesarios para realizar una tarea. Para obtener más información, consulte Aplicar permisos de privilegios mínimos.

  • Si la cola de SQS está en una cuenta diferente, tanto la política de acceso de SQS como la política de IAM deben permitir el acceso de forma explícita.

    Importante: Una denegación explícita en cualquiera de las políticas anula un permiso explícito.

  • Si la política utiliza un elemento de condición, compruebe que la condición restrinja el acceso.

  • Si el usuario o rol pertenece a una organización de AWS Organizations que usa SCP, compruebe que la SCP no bloquee al usuario o rol.

Para confirmar la identidad de IAM que se utiliza para realizar llamadas a la API, ejecute el comando get-caller-identity de la AWS CLI:

aws sts get-caller-identity

Para obtener más información sobre los permisos de acceso de Amazon SQS, consulte ¿Qué permisos necesito para acceder a una cola de Amazon SQS?

Permisos de AWS Key Management Service (AWS KMS)

Si su cola de Amazon SQS tiene activado el cifrado del servidor (SSE), se deben conceder permisos tanto a los productores como a los consumidores. Los permisos necesarios se proporcionan con una clave de AWS KMS administrada por AWS o una clave administrada por el cliente. Una política de claves administrada por el cliente debe incluir permisos de acceso para cada productor y consumidor de colas. O bien, actualice la política de IAM para incluir los permisos de AWS KMS necesarios para la clave de AWS KMS.

Para acceder a una cola de Amazon SQS con SSE desde una cuenta diferente, la cola debe usar una clave administrada por el cliente. No puede usar una clave administrada de AWS porque solo se pueden modificar las políticas de claves administradas por el cliente. La política de claves de AWS KMS debe permitir el acceso entre cuentas a la clave de AWS KMS. La política de IAM debe incluir permisos para acceder a la clave de AWS KMS.

Para obtener más información, consulte Key management.

Política de punto de conexión de VPC

Si accede a SQS a través de un punto de conexión de Amazon Virtual Private Cloud (Amazon VPC), la política de punto de conexión de VPC de SQS debe permitir el acceso.

Este ejemplo de política de punto de conexión de VPC especifica que el usuario de IAM MyUser puede enviar mensajes a la cola de SQS MyQueue. A otras acciones, a los usuarios de IAM y a los recursos de SQS se les niega el acceso a través del punto de conexión de VPC.

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

Nota: Solo puede usar VPC con puntos de conexión de HTTPS de Amazon SQS.

Permisos de la consola de SQS

Para ver las colas y los atributos de SQS desde la consola de SQS, los usuarios deben tener permisos para las acciones ListQueues y GetQueueAttributes:

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

Nota: No puede usar la acción de la API «ListQueues» con colas específicas. La API «ListQueues» debe aplicarse al recurso «*» o «arn:aws:sqs:region:account_id:*».

Política de denegación total de las colas

Puede perder el acceso a la cola de SQS si se agrega una política de denegación total similar a la de este ejemplo:

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

Si pierde el acceso a la cola de SQS, utilice las credenciales de usuario raíz para acceder a la cola y elimine la política de denegación total. Para obtener más información, consulte How do I troubleshoot and prevent Amazon SQS queue access issues when using a Deny queue policy?

Información relacionada

Tutorial: Sending a message to an Amazon SQS queue from Amazon Virtual Private Cloud

Amazon SQS API permissions: Actions and resource reference