Saltar al contenido

¿Por qué las notificaciones de eventos de Amazon S3 no se envían a una cola de Amazon SQS que utiliza el cifrado del servidor?

6 minutos de lectura
0

Las notificaciones de eventos de Amazon Simple Storage Service (Amazon S3) no se entregan a mi cola de Amazon Simple Queue Service (Amazon SQS) de cifrado del servidor (SSE).

Solución

Sigue estos pasos para configurar y enviar notificaciones de eventos de S3 a una cola de Amazon SQS que utiliza el cifrado en el servidor (SSE).

Creación de una clave de AWS KMS administrada por el cliente y configuración de la política de claves

Debes cifrar las colas de Amazon SQS con una clave de AWS Key Management Service (AWS KMS) administrada por el cliente. A continuación, concede los permisos de entidades principales del servicio Amazon S3 para trabajar con colas cifradas.

Nota: No puedes modificar la clave de KMS administrada por AWS predeterminada. En su lugar, debes utilizar una clave administrada por el cliente para este proceso. También debes agregar permisos a la clave de AWS KMS para permitir el acceso a una entidad principal de servicio específica.

Para conceder los permisos de entidades principales del servicio Amazon S3, agrega esta instrucción a la política de claves administradas por el cliente:

{  "Version": "2012-10-17",
  "Id": "example-ID",
  "Statement": [
    {
      "Sid": "example-statement-ID",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
      ],
      "Resource": "*"
    },
    {
      "Sid": "Enable IAM User Permissions",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::"111122223333":root"
      },
      "Action": "kms:*",
      "Resource": "*"
    }
  ]
}

Nota: Sustituye "arn:aws:iam::"111122223333":root" por tu ARN.

Creación de una cola de SQS y concesión de permisos a Amazon S3

  1. Crea una cola de Amazon SQS que esté configurada para usar SSE. Para obtener más información, consulte Configuring server-side encryption (SSE) for a queue (console) (Configuración del cifrado en el servidor (SSE) para una cola [consola]).
  2. Para permitir que Amazon S3 envíe mensajes a la cola, agrega esta instrucción de permisos a la cola de SQS:
{  "Version": "2012-10-17",
  "Id": "example-ID",
  "Statement": [
    {
      "Sid": "example-statement-ID",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "SQS:SendMessage",
      "Resource": "arn:aws:sqs:us-east-1:111122223333:sqs-s3-kms-same-account",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:s3:*:*:hellobucket"
        }
      }
    }
  ]
}

Nota: Sustituye el valor de Recurso por el ARN de la cola de SQS, aws:SourceAccount por el ID de tu cuenta de origen de AWS y aws:SourceArn por el ARN de tu bucket de Amazon S3.

En el ejemplo anterior, el bucket de S3 hellobucket para la cuenta de cliente 123456789 puede enviar notificaciones de eventos de ObjectCreated a la cola de SQS especificada. Para obtener más información sobre los permisos necesarios para trabajar con colas de SQS cifradas, consulta Key management (Administración de claves).

Creación de un evento de S3

Para agregar un evento de Amazon S3 a su bucket, sigue estos pasos:

  1. Abre la consola de S3 y, a continuación, elige el Nombre con hipervínculo para tu bucket de S3.
  2. En la pestaña Propiedades, selecciona Crear notificación de eventos.
  3. En la página Crear notificación de eventos, introduce esta información:
    En Nombre del evento, introduce un nombre.
    En Tipos de eventos, selecciona los tipos de eventos para los que desees recibir notificaciones.
    En Destino, elige Cola de SQS.
    En Cola de SQS, elige tu cola.
  4. Selecciona Guardar cambios.

Confirmación de si el tipo de evento de Amazon S3 se ha configurado correctamente

Cuando configures una notificación de eventos de Amazon S3, debes especificar los tipos de eventos compatibles para que Amazon S3 envíe la notificación. Si se produce un tipo de evento no especificado en el bucket de Amazon S3, Amazon S3 no enviará la notificación.

Confirmación de si los filtros de nombre de clave de objeto tienen formato URL codificado

Si tus notificaciones de eventos se han configurado de modo que utilicen el filtrado de nombre de clave de objeto, solo se publicarán para objetos con prefijos o sufijos concretos.

Si usas caracteres especiales en tus prefijos o sufijos, deberás introducirlos en formato URL codificado. Para obtener más información, consulta Configuración de notificaciones de eventos mediante el filtrado de nombres de clave de objeto.

Nota: No puedes usar un carácter comodín ("*") como prefijo o sufijo para representar cualquier carácter en los filtros. 

Comprobación de si existen todos los destinos de eventos

El error "Unable to validate the following destination configurations" se produce cuando no existe un destino para el bucket de notificación de eventos de Amazon S3.

Si has configurado una notificación de eventos para enviar eventos a un destino que ya no existe, deberás eliminar dichos eventos. Asegúrate de eliminar los eventos antes de actualizar la configuración de notificación de eventos.

Nota: Se recomienda eliminar todos los eventos con destinos inexistentes mediante la API PutBucketNotificationConfiguration.

Comprobación de las regiones del bucket de S3 y de la cola de SQS

No puedes enviar notificaciones desde un bucket de S3 de una región de AWS a una cola de Amazon SQS de otra región. En su lugar, define un tema de Amazon Simple Notification Service (Amazon SNS) como destino del bucket de S3 con una cola de Amazon SQS en otra región. Amazon SNS admite la entrega de notificaciones entre regiones a las colas de Amazon SQS y a las funciones de AWS Lambda.

Para obtener más información, consulta Sending Amazon SNS messages to an Amazon SQS queue or Lambda function in a different Region (Envío de mensajes de Amazon SNS a una cola de Amazon SQS o función de Lambda en otra región).

Confirmación de si los mensajes se han enviado a la cola de Amazon SQS

Utiliza la métrica NumberOfMessagesSent de Amazon CloudWatch para comprobar si los mensajes se han enviado a la cola de Amazon SQS.

Para obtener más información, consulta Why is my Amazon SQS queue not receiving messages? (¿Por qué mi cola de Amazon SQS no recibe mensajes?).

Solución de problemas con AWS Support

Si el problema no se soluciona con los pasos anteriores, ponte en contacto con AWS Support. Incluye los valores RequestId y timestamp con timezone de las llamadas fallidas a la API.

Información relacionada

¿Cómo puedo hacer que mi suscripción a Amazon SQS reciba correctamente notificaciones de mi tema de Amazon SNS?

Notificaciones de eventos de Amazon S3

Tutorial: configuración de un bucket para notificaciones (tema de SNS o cola de SQS)