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

Última actualización: 03/09/2021

Cuando ejecuto una llamada a la API de Amazon Simple Queue Service (Amazon SQS), recibo un error de AccessDenied similar a uno de los siguientes:

“Se ha producido un error (AccessDenied) al llamar a la operación SendMessage: se deniega el acceso al recurso https://sqs.us-east-1.amazonaws.com/”.

“Se ha producido un error (KMS.AccessDeniedException) al llamar a la operación SendMessage: User: arn:aws:iam::xxxxx:user/xxxx no está autorizado a realizar: kms:GenerateDataKey en el recurso: arn:aws:kms:us-east-1:xxxx:key/xxxx con una denegación explícita”

¿Cómo puedo solucionar este error?

Resolución

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

Nota: Si recibe errores al ejecutar comandos de AWS Command Line Interface (AWS CLI), asegúrese de que está utilizando la versión más reciente de AWS CLI.

  • Tanto la política de acceso de SQS como la política de AWS Identity and Access Management (IAM) deben incluir permisos para permitir explícitamente el acceso a la acción.
  • 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 si dicha condición restringe el acceso.
  • Si el usuario o el rol pertenece a una organización de AWS Organizations que utiliza una política de control de servicios (SCP), compruebe que la SCP no bloquea al usuario ni al rol.

Para confirmar la identidad de IAM que se utiliza para realizar llamadas a la API, ejecute el comando get-caller-identity de 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 KMS

Si la cola de Amazon SQS tiene activado el cifrado del lado del servidor (SSE), se deben conceder permisos tanto a los productores como a los consumidores. Los permisos necesarios se pueden proporcionar mediante una clave de AWS KMS administrada por AWS o mediante 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, puede actualizar la política de IAM para incluir los permisos de KMS necesarios para la clave KMS.

  • Permisos de productor necesarios: kms:GenerateDataKey y kms:Decrypt
  • Permisos de consumidor necesarios: kms:Decrypt

Para acceder a una cola de Amazon SQS de SSE desde otra cuenta, la cola debe utilizar una clave administrada por el cliente. No puede utilizar 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 KMS debe permitir el acceso entre cuentas de la clave KMS y la política de IAM debe incluir permisos para acceder a la clave KMS.

Para obtener más información, consulte Administración de claves.

Política de punto de enlace de la VPC

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

En el siguiente ejemplo de política de punto de enlace de la VPC se especifica que el usuario de IAM MyUser puede enviar mensajes a la cola de SQS MyQueue. A través del punto de enlace de la VPC, se deniega el acceso a otras acciones, usuarios de IAM y recursos de SQS.

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

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?