

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.

# Distribución ramificada de notificaciones de Amazon SNS a puntos de conexión HTTPS
<a name="sns-http-https-endpoint-as-subscriber"></a>

Puede utilizar Amazon SNS para enviar mensajes de notificación a uno o varios puntos de conexión HTTP o HTTPS. Cuando suscribe un punto de conexión a un tema, puede publicar una notificación en el tema y Amazon SNS enviará una solicitud HTTP POST al entregar el contenido de la notificación al punto de conexión suscrito. Cuando suscribe el punto de conexión, indica si Amazon SNS utiliza HTTP o HTTPS para enviar la solicitud POST al punto de conexión. Si utiliza HTTPS, puede aprovechar la compatibilidad con Amazon SNS para lo siguiente: 
+ **Indicación de nombre de servidor (SNI)**: esto permite que Amazon SNS admita puntos de conexión HTTPS que requieren SNI, como un servidor que solicita varios certificados para alojar varios dominios. Para obtener más información sobre SNI, consulte [Server Name Indication](http://en.wikipedia.org/wiki/Server_Name_Indication).
+ **Autenticación de acceso básica y abreviada**: esto permite especificar un nombre de usuario y contraseña en la URL HTTPS para la solicitud HTTP POST, como `https://user:password@domain.com` o `https://user@domain.com`. El nombre de usuario y la contraseña se cifran a través de la conexión SSL establecida al utilizar HTTPS. Solo el nombre de dominio se envía en texto sin cifrar. Para obtener más información sobre la autenticación de acceso básica y abreviada, consulte [RFC-2617](http://www.rfc-editor.org/info/rfc2617).
**importante**  
Amazon SNS no admite actualmente puntos de conexión HTTP(S) privados.  
 URLs Los HTTPS solo se pueden recuperar de la acción de la API de Amazon `GetSubscriptionAttributes` SNS para los directores a los que haya concedido acceso a la API.
**nota**  
 El servicio cliente debe admitir el encabezado de respuesta `HTTP/1.1 401 Unauthorized`

La solicitud contiene el asunto y el mensaje que se publicaron en el tema junto con los metadatos de la notificación en un documento JSON. La solicitud tendrá un aspecto similar a la siguiente solicitud HTTP POST. Para obtener más información sobre el encabezado HTTP y el formato JSON del cuerpo de la solicitud, consulte [Encabezados de HTTP/HTTPS](http-header.md) y [Formato JSON de notificación HTTP/HTTPS](http-notification-json.md).

**nota**  
Amazon SNS considera que se pueden reintentar todos los errores 5XX y 429 (se han enviado demasiadas solicitudes). Estos errores están sujetos a la política de entrega. Todos los demás errores se consideran errores permanentes y no volverán a intentarse.

```
POST / HTTP/1.1
    x-amz-sns-message-type: Notification
    x-amz-sns-message-id: da41e39f-ea4d-435a-b922-c6aae3915ebe
    x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
    x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55
    Content-Length: 761
    Content-Type: text/plain; charset=UTF-8
    Host: ec2-50-17-44-49.compute-1.amazonaws.com
    Connection: Keep-Alive
    User-Agent: Amazon Simple Notification Service Agent
    
{
  "Type" : "Notification",
  "MessageId" : "da41e39f-ea4d-435a-b922-c6aae3915ebe",
  "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
  "Subject" : "test",
  "Message" : "test message",
  "Timestamp" : "2012-04-25T21:49:25.719Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLElDMXvB8r9R83tGoNn0ecwd5UjllzsvSvbItzfaMpN2nk5HVSw7XnOn/49IkxDKz8YrlH2qJXj2iZB0Zo2O71c4qQk1fMUDi3LGpij7RCW7AW9vYYsSqIKRnFS94ilu7NFhUzLiieYr4BKHpdTmdD6c0esKEYBpabxDSc=",
  "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
   "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55"
}
```

# Suscripción de un punto de conexión HTTP/S en un tema de Amazon SNS
<a name="sns-subscribe-https-s-endpoints-to-topic"></a>

En este tema se explica cómo suscribir HTTP/S puntos de enlace a los temas de Amazon SNS.

**Topics**
+ [Paso 1: Asegúrese de que el punto de enlace está listo para procesar mensajes de Amazon SNS.](SendMessageToHttp.prepare.md)
+ [Paso 2: Suscribir el HTTP/HTTPS punto final al tema Amazon SNS](SendMessageToHttp.subscribe.md)
+ [Paso 3: confirme la suscripción de Amazon SNS](SendMessageToHttp.confirm.md)
+ [Paso 4: defina la política de entrega para la suscripción de Amazon SNS (opcional)](SendMessageToHttp.retry.md)
+ [Paso 5: conceda a los usuarios permisos para publicar en el tema de Amazon SNS (opcional)](SendMessageToHttp.iam.permissions.md)
+ [Paso 6: Enviar mensajes de Amazon SNS al punto final HTTP/HTTPS](SendMessageToHttp.publish.md)

# Paso 1: Asegúrese de que el punto de enlace está listo para procesar mensajes de Amazon SNS.
<a name="SendMessageToHttp.prepare"></a>

Antes de suscribir su punto de enlace HTTP o HTTPS a un tema, debe asegurarse de que el punto de enlace HTTP o HTTPS tiene la capacidad de administrar las solicitudes HTTP POST que Amazon SNS utiliza para enviar la confirmación de suscripción y los mensajes de notificación. Por lo general, esto implica crear e implementar una aplicación web (por ejemplo, un servlet Java si el host del punto de enlace ejecuta Linux con Apache y Tomcat) que procese las solicitudes HTTP de Amazon SNS. Cuando suscribe un punto de enlace HTTP, Amazon SNS envía una solicitud de confirmación de la suscripción. El punto de enlace debe estar preparado para recibir y procesar esta solicitud cuando cree la suscripción, porque Amazon SNS envía esta solicitud en ese momento. Amazon SNS no enviará notificaciones al punto de enlace hasta que se confirme la suscripción. Una vez confirmada la suscripción, Amazon SNS enviará notificaciones al punto de enlace cuando se ejecute una acción de publicación en el tema suscrito.

**Para configurar el punto de enlace para que procese los mensajes de confirmación de la suscripción y de notificación**

1. El código debe leer los encabezados HTTP de las solicitudes HTTP POST que Amazon SNS envía a su punto de enlace. El código debe examinar el campo de encabezado `x-amz-sns-message-type`, en el que se indica el tipo de mensaje que Amazon SNS ha enviado. En este encabezado, puede determinar el tipo de mensaje sin tener que analizar el cuerpo de la solicitud HTTP. Hay dos tipos que debe administrar: `SubscriptionConfirmation` y `Notification`. El mensaje `UnsubscribeConfirmation` se utiliza únicamente cuando la suscripción se elimina del tema.

   Para obtener información detallada sobre el encabezado HTTP, consulte [Encabezados de HTTP/HTTPS](http-header.md). La siguiente solicitud HTTP POST es un ejemplo de un mensaje de confirmación de la suscripción.

   ```
   POST / HTTP/1.1
       x-amz-sns-message-type: SubscriptionConfirmation
       x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b
       x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
       Content-Length: 1336
       Content-Type: text/plain; charset=UTF-8
       Host: example.com
       Connection: Keep-Alive
       User-Agent: Amazon Simple Notification Service Agent
       
   {
     "Type" : "SubscriptionConfirmation",
     "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b",
     "Token" : "2336412f37f...",
     "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
     "Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.",
     "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37...",
     "Timestamp" : "2012-04-26T20:45:04.751Z",
     "SignatureVersion" : "1",
     "Signature" : "EXAMPLEpH+...",
     "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem"
   }
   ```

1. El código debe analizar el documento JSON del cuerpo de la solicitud HTTP POST y el tipo de contenido text/plain para leer los pares nombre-valor que componen el mensaje de Amazon SNS. Utilice un analizador JSON que se encargue de convertir la representación en forma de secuencias de escape de los caracteres de control en sus valores de caracteres ASCII (por ejemplo, convertir \$1n en un carácter de nueva línea). Puede utilizar un analizador JSON existente como [Jackson JSON Processor](https://github.com/FasterXML/jackson) o crear el suyo propio. Para poder enviar el texto del asunto y los campos de los mensajes en formato JSON válido, Amazon SNS debe convertir algunos caracteres de control en secuencias de escape que se puedan incluir en el documento JSON. Cuando reciba el documento JSON en el cuerpo de la solicitud POST enviada a su punto de enlace, debe convertir los caracteres incluidos en secuencias de escape en sus valores de caracteres originales si desea una representación exacta del asunto original y de los mensajes publicados en el tema. Esto es fundamental si desea verificar la firma de una notificación, porque la firma utiliza el mensaje y el asunto en sus formatos originales como parte de la cadena para firmar.

1. El código debe verificar la autenticidad de una notificación, la confirmación de la suscripción o la cancelación del mensaje de confirmación enviado por Amazon SNS. Mediante la información incluida en el mensaje de Amazon SNS, el punto de enlace puede volver a crear la firma para que se pueda verificar el contenido del mensaje cotejando la firma propia con la firma que Amazon SNS envió con el mensaje. Para obtener más información acerca de la verificación de la firma de un mensaje, consulte [Verificación de la firmas de mensajes de Amazon SNS](sns-verify-signature-of-message.md).

1. Según el tipo especificado por el campo de encabezado `x-amz-sns-message-type`, el código debe leer el documento JSON incluido en el cuerpo de la solicitud HTTP y procesar el mensaje. Estas son las directrices para administrar los dos tipos principales de mensajes:  
**SubscriptionConfirmation**  
Lea el valor de `SubscribeURL` y visite esa URL. Para confirmar la suscripción y empezar a recibir notificaciones en el punto de enlace, debe visitar la URL `SubscribeURL` (por ejemplo, enviando una solicitud HTTP GET a la URL). Consulte el ejemplo de la solicitud HTTP del paso anterior para ver cómo es esa URL `SubscribeURL`. Para obtener más información sobre el formato del mensaje `SubscriptionConfirmation`, consulte [Formato JSON de confirmación de suscripción HTTP/HTTPS](http-subscription-confirmation-json.md). Cuando visite la dirección URL, recibirá una respuesta similar al siguiente documento XML. El documento devuelve el ARN de suscripción del punto de enlace en el elemento `ConfirmSubscriptionResult`.  

   ```
   <ConfirmSubscriptionResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/">
      <ConfirmSubscriptionResult>
         <SubscriptionArn>arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55</SubscriptionArn>
      </ConfirmSubscriptionResult>
      <ResponseMetadata>
         <RequestId>075ecce8-8dac-11e1-bf80-f781d96e9307</RequestId>
      </ResponseMetadata>
   </ConfirmSubscriptionResponse>
   ```
Como alternativa a visitar el`SubscribeURL`, puede confirmar la suscripción mediante la [ConfirmSubscription](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html)acción cuyo valor correspondiente en el `Token` mensaje esté establecido. `SubscriptionConfirmation` Si desea permitir únicamente al propietario del tema y al propietario de la suscripción que cancelen la suscripción del punto de enlace, puede llamar a la acción `ConfirmSubscription` con una firma de AWS .  
**Notificación**  
Lea los valores de `Subject` y `Message` para obtener la información de la notificación que se publicó en el tema.  
Para obtener más información sobre el formato del mensaje `Notification`, consulte [Encabezados de HTTP/HTTPS](http-header.md). La siguiente solicitud HTTP POST es un ejemplo de un mensaje de notificación enviado al punto de enlace example.com.  

   ```
   POST / HTTP/1.1
       x-amz-sns-message-type: Notification
       x-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324
       x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
       x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96
       Content-Length: 773
       Content-Type: text/plain; charset=UTF-8
       Host: example.com
       Connection: Keep-Alive
       User-Agent: Amazon Simple Notification Service Agent
       
   {
     "Type" : "Notification",
     "MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324",
     "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
     "Subject" : "My First Message",
     "Message" : "Hello world!",
     "Timestamp" : "2012-05-02T00:54:06.655Z",
     "SignatureVersion" : "1",
     "Signature" : "EXAMPLEw6JRN...",
     "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
     "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96"
   }
   ```

1. Asegúrese de que su punto de enlace responde al mensaje HTTP POST de Amazon SNS con el código de estado adecuado. El tiempo de espera de la conexión se agotará en 15 segundos aproximadamente. Si el punto de conexión no responde antes de que se agote el tiempo de espera de la conexión, o si devuelve un código de estado fuera del intervalo 200-4*xx*, Amazon SNS considerará la entrega del mensaje un intento fallido.

1. Asegúrese de que el código puede administrar los reintentos de entrega de mensajes de Amazon SNS. Si Amazon SNS no recibe una respuesta correcta del punto de enlace, intenta entregar de nuevo el mensaje. Esto se aplica a todos los mensajes, incluido el mensaje de confirmación de la suscripción. De forma predeterminada, si la entrega inicial del mensaje da un error, Amazon SNS realiza tres reintentos con un intervalo entre los intentos fallidos establecido en 20 segundos.
**nota**  
El tiempo de espera de la solicitud de mensajes se agota tras 15 segundos aproximadamente. Esto significa que si no se pudo entregar el mensaje porque se agotó el tiempo de espera, Amazon SNS lo volverá a intentar aproximadamente 35 segundos después del intento de entrega anterior. Puede establecer una política de entrega diferente para el punto de enlace.

   Amazon SNS usa el campo de encabezado `x-amz-sns-message-id` para identificar de forma única cada mensaje publicado en un tema de Amazon SNS. Al comparar IDs los mensajes que ha procesado con los mensajes entrantes, puede determinar si se trata de un intento de reintento.

1. Si suscribe un punto de enlace HTTPS, asegúrese de que el punto de enlace tiene un certificado de servidor de una entidad de certificación (CA) de confianza. Amazon SNS solo enviará mensajes a puntos de enlace HTTPS que tengan un certificado de servidor de una CA en la que confíe Amazon SNS.

1. Implemente el código que ha creado para recibir mensajes de Amazon SNS. Cuando suscriba el punto de enlace, este debe estar preparado para recibir al menos el mensaje de confirmación de la suscripción.

# Paso 2: Suscribir el HTTP/HTTPS punto final al tema Amazon SNS
<a name="SendMessageToHttp.subscribe"></a>

Para enviar mensajes a un punto de enlace HTTP o HTTPS a través de un tema, debe suscribir el punto de enlace al tema de Amazon SNS. El punto de enlace se especifica por medio de su URL. Para suscribir a un tema, puede utilizar la consola de Amazon SNS, el comando [sns-subscribe](https://docs.aws.amazon.com/cli/latest/reference/sns/subscribe.html) o la acción de API [Suscribir](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html). Antes de empezar, asegúrese de que tiene la dirección URL del punto de enlace que desea suscribir y de que el punto de enlace está preparado para recibir los mensajes de configuración y notificación, tal como se describe en el paso 1.

**Para suscribir un punto de enlace HTTP o HTTPS a un tema mediante la consola de Amazon SNS, siga estos pasos:**

1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

1. En el panel de navegación, seleccione **Subscriptions (Suscripciones)**.

1. Elija **Create subscription (Crear suscripción)**.

1. En la lista desplegable **Protocol (Protocolo)**, seleccione **HTTP** o **HTTPS**.

1. En el cuadro **Endpoint (Punto de enlace)**, pegue la dirección URL del punto de enlace al que desea que el tema envíe los mensajes y, a continuación, elija **Create subscription (Crear suscripción)**.

1. Se muestra el mensaje de confirmación. Seleccione **Cerrar**.

   Aparece el **identificador de suscripción** de tu nueva suscripción PendingConfirmation. Cuando confirme la suscripción, **Subscription ID (ID de suscripción)** mostrará el ID de suscripción.

# Paso 3: confirme la suscripción de Amazon SNS
<a name="SendMessageToHttp.confirm"></a>

Para confirmar la suscripción de Amazon SNS, siga estos pasos para asegurarse de que el punto de conexión pueda recibir correctamente los mensajes. Este proceso implica configurar el punto de conexión para que gestione los mensajes de confirmación entrantes, recuperar la URL de confirmación y confirmar la suscripción. Puede confirmar la suscripción de forma automática o manual, en función de la configuración.

1. Tras suscribirse a un tema de Amazon SNS, Amazon SNS envía un mensaje de confirmación al punto de conexión. Este mensaje contiene una `SubscribeURL` que debe utilizar para confirmar la suscripción.

1. El punto de conexión debe estar configurado para escuchar los mensajes entrantes de Amazon SNS. Cuando llegue el mensaje de confirmación, extraiga la **`SubscribeURL`** del mensaje.

1. Una vez que tenga la `SubscribeURL`, puede confirmar la suscripción de dos maneras:
   + **Confirmación automática**: su punto de conexión puede confirmar automáticamente la suscripción enviando una **solicitud HTTP GET** a la `SubscribeURL`.

     Este método no requiere intervención manual.
   + **Confirmación manual**: si la confirmación automática no está configurada, **copie** la **`SubscribeURL`** del mensaje de confirmación y **péguela** en la barra de direcciones del navegador.

     Esto confirmará la suscripción manualmente.

1. También puede verificar el **estado de la suscripción** mediante la consola de Amazon SNS:

   1. Inicie sesión en la [consola de Amazon SNS](https://console.aws.amazon.com/sns/home).

   1. En el panel de navegación, seleccione **Suscripciones**.

   1. Busque la **suscripción** en la lista.
      + Si se confirma, se mostrará el `SubscriptionArn`.
      + Si sigue sin confirmarse, se mostrará como `PendingConfirmation`.

# Paso 4: defina la política de entrega para la suscripción de Amazon SNS (opcional)
<a name="SendMessageToHttp.retry"></a>

De forma predeterminada, si la entrega inicial del mensaje da un error, Amazon SNS realiza tres reintentos con un intervalo entre los intentos fallidos establecido en 20 segundos. Como se ha explicado en el [paso 1](SendMessageToHttp.prepare.md), el punto de enlace debe tener código que pueda administrar los reintentos de entrega de mensajes. Mediante la configuración de la política de entrega en un tema o suscripción, puede controlar la frecuencia y el intervalo con los que Amazon SNS intenta entregar de nuevo los mensajes fallidos. También puedes especificar el tipo de contenido para tus HTTP/S notificaciones. `DeliveryPolicy` Para obtener más información, consulte [Crear una política HTTP/S de entrega](sns-message-delivery-retries.md#creating-delivery-policy).

# Paso 5: conceda a los usuarios permisos para publicar en el tema de Amazon SNS (opcional)
<a name="SendMessageToHttp.iam.permissions"></a>

De forma predeterminada, el propietario del tema tiene permisos para publicar en el tema. Para permitir que otros usuarios o aplicaciones publiquen en el tema, debe usar AWS Identity and Access Management (IAM) para conceder permisos de publicación al tema. Si desea obtener más información sobre cómo conceder permisos para las acciones de Amazon SNS a los usuarios de IAM, consulte [Uso de políticas basadas en identidades con Amazon SNS](sns-using-identity-based-policies.md).

Hay dos formas de controlar el acceso a un tema:
+ Agregue una política a un usuario o un grupo de IAM. La forma más sencilla de conceder a los usuarios permisos para temas consiste en crear un grupo, añadir la política adecuada al grupo y, a continuación, añadir usuarios a dicho grupo. Es mucho más fácil añadir y eliminar usuarios de un grupo que mantener un seguimiento de las políticas que se han configurado para los distintos usuarios.
+ Añadiendo una política al tema. Si desea conceder permisos para un tema a otra cuenta de AWS , el único modo de hacerlo es agregando una política que tenga como entidad principal la Cuenta de AWS a la que desee conceder los permisos.

Debe utilizar el primer método para la mayoría de los casos (aplicar políticas a grupos y administrar los permisos de los usuarios añadiendo o eliminando los usuarios a los grupos). Si necesita conceder permisos a un usuario de otra cuenta, utilice el segundo método.

Si agregas la siguiente política a un usuario o grupo de IAM, le darías permiso a ese usuario o miembros de ese grupo para realizar la `sns:Publish` acción en el tema. MyTopic

```
{
  "Statement":[{
    "Sid":"AllowPublishToMyTopic",
    "Effect":"Allow",
    "Action":"sns:Publish",
    "Resource":"arn:aws:sns:us-east-2:123456789012:MyTopic"
  }]
}
```

La siguiente política de ejemplo muestra cómo conceder a otra cuenta permisos sobre un tema.

**nota**  
Cuando concedes a otra persona el Cuenta de AWS acceso a un recurso de tu cuenta, también concedes permisos a ese recurso a los usuarios de IAM que tienen acceso de nivel de administrador (acceso comodín). Al resto de los usuarios de IAM de la otra cuenta se les deniega de manera automática el acceso al recurso. Si quieres conceder a usuarios de IAM específicos de ese tipo Cuenta de AWS acceso a tu recurso, la cuenta o un usuario de IAM con acceso de nivel de administrador debe delegar los permisos del recurso a esos usuarios de IAM. Para obtener más información acerca de la delegación entre cuentas, consulte [Cómo habilitar el acceso entre cuentas](https://docs.aws.amazon.com/IAM/latest/UserGuide/Delegation.html) en la *Guía del usuario de IAM*.

Si agregaste la siguiente política a un tema MyTopic de la cuenta 123456789012, darías permiso a la cuenta 111122223333 para realizar la acción sobre ese tema. `sns:Publish`

```
{
  "Statement":[{
    "Sid":"Allow-publish-to-topic",
    "Effect":"Allow",
      "Principal":{
        "AWS":"111122223333"
      },
    "Action":"sns:Publish",
    "Resource":"arn:aws:sns:us-east-2:123456789012:MyTopic"
  }]
}
```

# Paso 6: Enviar mensajes de Amazon SNS al punto final HTTP/HTTPS
<a name="SendMessageToHttp.publish"></a>

Puede enviar un mensaje a las suscripciones de un tema mediante su publicación en el tema. Para publicar en un tema, puede utilizar la consola de Amazon SNS, el comando `[sns-publish](https://docs.aws.amazon.com/cli/latest/reference/sns/publish.html)` de la CLI o la API `[Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)`.

Si ha seguido el [paso 1](SendMessageToHttp.prepare.md), el código que ha implementado en el punto de enlace debería procesar la notificación.

**Para publicar en un tema mediante la consola de Amazon SNS, siga estos pasos:**

1. Con las credenciales del usuario de IAM Cuenta de AWS o del usuario de IAM con permiso para publicar en el tema, inicie sesión en la consola de Amazon SNS Consola de administración de AWS y ábrala en. [https://console.aws.amazon.com/sns/](https://console.aws.amazon.com/sns/home)

1. En el panel de navegación izquierdo, elija **Topics (Temas)** y, a continuación, seleccione un tema.

1. Seleccione el botón **Publish message (Publicar mensaje)**.

1. En el cuadro **Subject (Asunto)**, introduzca el asunto (por ejemplo, **Testing publish to my endpoint**).

1. En el cuadro **Message (Mensaje)**, introduzca algún texto (por ejemplo, **Hello world\$1**) y elija **Publish message (Publicar mensaje)**.

    Aparecerá el siguiente mensaje: Your message has been successfully published.

# Verificación de la firmas de mensajes de Amazon SNS
<a name="sns-verify-signature-of-message"></a>

Amazon SNS utiliza las firmas de los mensajes para confirmar la autenticidad de los mensajes que se envían a su punto de conexión HTTP. Para garantizar la integridad de los mensajes y evitar la suplantación de identidad, **debe** verificar la firma antes de procesar cualquier mensaje de Amazon SNS.

**¿Cuándo se deben verificar las firmas de Amazon SNS?**

Debe verificar las firmas de los mensajes de Amazon SNS en los siguientes escenarios:
+ Cuando Amazon SNS envía un mensaje de notificación a su punto de conexión HTTP(S).
+ Cuando Amazon SNS envía un mensaje de confirmación a su punto de conexión tras una llamada a la API [https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html) o [https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html](https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html).

**Amazon SNS admite dos versiones de firmas:**
+ SignatureVersion1 — Utiliza un SHA1 hash del mensaje.
+ SignatureVersion2 — Utiliza un SHA256 hash del mensaje. Esto proporciona una mayor seguridad y es la opción recomendada.

**Para verificar correctamente las firmas de los mensajes de SNS, siga estas prácticas recomendadas:**
+ Recupere siempre el certificado de firma mediante HTTPs para evitar ataques de interceptación no autorizados.
+ Compruebe que el certificado lo ha emitido Amazon SNS.
+ Confirme que la cadena de confianza del certificado sea válida.
+ El certificado debe proceder de una URL firmada por SNS.
+ No confíe en ningún certificado proporcionado en el mensaje sin validación.
+ Rechace cualquier mensaje con un `TopicArn` inesperado para evitar la suplantación de identidad.
+ Los AWS SDKs para Amazon SNS incluyen una lógica de validación integrada, lo que reduce el riesgo de errores de implementación.

# Configuración de la versión de la firma de mensajes en los temas de Amazon SNS
<a name="sns-verify-signature-of-message-configure-message-signature"></a>

Al configurar la versión de firma del mensaje en el tema de Amazon SNS permite mejorar la seguridad y la compatibilidad del proceso de verificación de mensajes.

Seleccione entre `SignatureVersion` **1** (SHA1) y `SignatureVersion` **2** (SHA256) para controlar el algoritmo de hash utilizado para firmar los mensajes. Los temas de Amazon SNS utilizan `SignatureVersion`**1** de forma predeterminada. Puede configurar este ajuste mediante la acción de la API [https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html).

Utilice el siguiente ejemplo para establecer el atributo de tema `SignatureVersion` con la AWS CLI:

```
aws sns set-topic-attributes \
    --topic-arn arn:aws:sns:us-east-2:123456789012:MyTopic \
    --attribute-name SignatureVersion \
    --attribute-value 2
```

# Verificación de la firma de un mensaje de Amazon SNS cuando se utilizan solicitudes basadas en consultas HTTP
<a name="sns-verify-signature-of-message-verify-message-signature"></a>

Al verificar la firma de un mensaje de Amazon SNS cuando se utilizan solicitudes basadas en consultas HTTP se garantiza la autenticidad y la integridad del mensaje. Este proceso confirma que el mensaje proviene de Amazon SNS y no se ha manipulado durante el tránsito. Al analizar el mensaje, construir la cadena correcta para firmarlo y validar la firma con una clave pública de confianza, se protege el sistema contra la suplantación de identidad y las alteraciones no autorizadas de los mensajes.

1. Extraiga los **pares de clave-valor** del documento JSON en el cuerpo de la solicitud HTTP POST que envía Amazon SNS. Estos campos son necesarios para construir la **cadena que se va a firmar**.
   + `Message`
   + `Subject` (si está presente)
   + `MessageId`
   + `Timestamp`
   + `TopicArn`
   + `Type`

   Por ejemplo:

   ```
   MESSAGE_FILE="message.json"
   FIELDS=("Message" "MessageId" "Subject" "Timestamp" "TopicArn" "Type")
   ```
**nota**  
Si algún campo contiene caracteres de escape (por ejemplo,`\n`), conviértalos a su **formato original** para garantizar una coincidencia exacta.

1. Localice el campo `SigningCertURL` en el mensaje de Amazon SNS. Este certificado contiene la clave pública necesaria para verificar la firma del mensaje. Por ejemplo:

   ```
   SIGNING_CERT_URL=$(jq -r '.SigningCertURL' "$MESSAGE_FILE")
   ```

1. Asegúrese de que `SigningCertURL` sea de un AWS dominio de confianza (por ejemplo,https://sns.us-east-1.amazonaws.com). Rechaza cualquier ** AWS dominio URLs externo** por motivos de seguridad.

1. Descargue el **certificado X.509 **desde la URL proporcionada. Por ejemplo:

   ```
   curl -s "$SIGNING_CERT_URL" -o signing_cert.pem
   ```

1. Extraiga la **clave pública** del certificado X.509 descargado. La clave pública le permite descifrar la firma del mensaje y comprobar su integridad. Por ejemplo:

   ```
   openssl x509 -pubkey -noout -in signing_cert.pem > public_key.pem
   ```

1. Los diferentes tipos de mensajes requieren diferentes pares de clave-valor en la cadena para firmarlos. Identifique el **tipo de mensaje** (campo `Type` en el mensaje de Amazon SNS) para determinar qué **pares de clave-valor** incluir:
   + **Mensaje de notificación**: incluye `Message`, `MessageId`, `Subject` (si está presente), `Timestamp`, `TopicArn` y `Type`.
   + **SubscriptionConfirmation**o **UnsubscribeConfirmation mensaje**: incluye `Message``MessageId`,`SubscribeURL`, `Timestamp``Token`,`TopicArn`, y`Type`.

1. Amazon SNS requiere que la cadena se firme para seguir un orden de campos estricto y fijo para la verificación. **Solo se deben incluir los campos explícitamente obligatorios**; no se pueden añadir campos adicionales. Los campos opcionales, como `Subject`, deben incluirse solo si están presentes en el mensaje y deben aparecer en la posición exacta definida por el orden de los campos obligatorios. Por ejemplo:

   ```
   KeyNameOne\nValueOne\nKeyNameTwo\nValueTwo
   ```
**importante**  
No agregue un carácter de nueva línea al final de la cadena.

1. Organice los **pares de clave-valor** en orden de clasificación de bytes (alfabéticamente por nombre de clave).

1. Construya la **cadena para firmarla **con el siguiente ejemplo de formato:

   ```
   STRING_TO_SIGN=""
   for FIELD in "${FIELDS[@]}"; do
       VALUE=$(jq -r --arg field "$FIELD" '.[$field]' "$MESSAGE_FILE")
       STRING_TO_SIGN+="$FIELD\n$VALUE"
       # Append a newline after each field except the last one
       if [[ "$FIELD" != "Type" ]]; then
           STRING_TO_SIGN+="\n"
       fi
   done
   ```

   **Ejemplo de mensaje de notificación:**

   ```
   Message
   My Test Message
   MessageId
   4d4dc071-ddbf-465d-bba8-08f81c89da64
   Subject
   My subject
   Timestamp
   2019-01-31T04:37:04.321Z
   TopicArn
   arn:aws:sns:us-east-2:123456789012:s4-MySNSTopic-1G1WEFCOXTC0P
   Type
   Notification
   ```

   **SubscriptionConfirmation ejemplo:**

   ```
   Message
   Please confirm your subscription
   MessageId
   3d891288-136d-417f-bc05-901c108273ee
   SubscribeURL
   https://sns.us-east-2.amazonaws.com/...
   Timestamp
   2024-01-01T00:00:00.000Z
   Token
   abc123...
   TopicArn
   arn:aws:sns:us-east-2:123456789012:MyTopic
   Type
   SubscriptionConfirmation
   ```

1. El campo `Signature` del mensaje está codificado en Base64. Debe **descodificarlo** para comparar su **formato binario sin procesar** con el **hash derivado**. Por ejemplo:

   ```
   SIGNATURE=$(jq -r '.Signature' "$MESSAGE_FILE")
   echo "$SIGNATURE" | base64 -d > signature.bin
   ```

1. Use el campo `SignatureVersion` para seleccionar el algoritmo de hash:
   + Para `SignatureVersion` **1**, utilice **SHA1**(por ejemplo,`-sha1`).
   + Para `SignatureVersion` **2**, utilice **SHA256**(por ejemplo,`-sha256`).

1. Para confirmar la autenticidad del mensaje de Amazon SNS, genere un **hash** de la cadena construida y verifique la firma con la **clave pública**.

   ```
   openssl dgst -sha256 -verify public_key.pem -signature signature.bin <<< "$STRING_TO_SIGN"
   ```

   Si la firma es válida, el resultado es `Verified OK`. En cualquier otro caso, el resultado es`Verification Failure`.

## Script de ejemplo con gestión de errores
<a name="sns-verify-signature-of-message-example"></a>

El siguiente script de ejemplo automatiza el proceso de verificación:

```
#!/bin/bash

# Path to the local message file
MESSAGE_FILE="message.json"

# Extract the SigningCertURL and Signature from the message
SIGNING_CERT_URL=$(jq -r '.SigningCertURL' "$MESSAGE_FILE")
SIGNATURE=$(jq -r '.Signature' "$MESSAGE_FILE")

# Fetch the X.509 certificate
curl -s "$SIGNING_CERT_URL" -o signing_cert.pem

# Extract the public key from the certificate
openssl x509 -pubkey -noout -in signing_cert.pem > public_key.pem

# Define the fields to include in the string to sign
FIELDS=("Message" "MessageId" "Subject" "Timestamp" "TopicArn" "Type")

# Initialize the string to sign
STRING_TO_SIGN=""

# Iterate over the fields to construct the string to sign
for FIELD in "${FIELDS[@]}"; do
    VALUE=$(jq -r --arg field "$FIELD" '.[$field]' "$MESSAGE_FILE")
    STRING_TO_SIGN+="$FIELD\n$VALUE"
    # Append a newline after each field except the last one
    if [[ "$FIELD" != "Type" ]]; then
        STRING_TO_SIGN+="\n"
    fi
done

# Verify the signature
echo -e "$STRING_TO_SIGN" | openssl dgst -sha256 -verify public_key.pem -signature <(echo "$SIGNATURE" | base64 -d)
```

# Análisis de los formatos de mensajes de Amazon SNS
<a name="sns-message-and-json-formats"></a>

Cuando Amazon SNS envía mensajes a los HTTP/HTTPS puntos de enlace, estos contienen encabezados HTTP y un cuerpo de mensaje JSON. Estos mensajes siguen un formato estructurado que incluye metadatos como el tipo de mensaje, el ARN del tema, las marcas de tiempo y las firmas digitales. Al analizar correctamente los mensajes de Amazon SNS, puede determinar si un mensaje es una confirmación de suscripción, una notificación o una confirmación de cancelación de suscripción, extraer los datos relevantes y verificar la autenticidad mediante la validación de firmas.

# Encabezados de HTTP/HTTPS
<a name="http-header"></a>

Cuando Amazon SNS envía un mensaje de confirmación de suscripción, notificación o confirmación de cancelación de la suscripción a los HTTP/HTTPS puntos de conexión, envía un mensaje POST con varios valores de encabezado específicos de Amazon SNS. Puede utilizar los valores del encabezado para tareas como identificar el tipo de mensaje sin tener que analizar el cuerpo del mensaje JSON para leer el valor de `Type`. De forma predeterminada, Amazon SNS envía todas las notificaciones a puntos de conexión HTTP/S con `Content-Type` establecido a `text/plain; charset=UTF-8`. Para elegir `Content-Type` otro que no sea text/plain (predeterminado), consulte en. `headerContentType` [Crear una política HTTP/S de entrega](sns-message-delivery-retries.md#creating-delivery-policy)

**`x-amz-sns-message-type`**  
Tipo de mensaje. Los valores posibles son `SubscriptionConfirmation`, `Notification` y `UnsubscribeConfirmation`.

**`x-amz-sns-message-id`**  
Un identificador único universal (UUID), único para cada mensaje publicado. En las notificaciones que Amazon SNS reenvía durante un reintento, se usa el ID de mensaje original.

**`x-amz-sns-topic-arn`**  
Nombre de recurso de Amazon (ARN) del tema en el que se publicó el mensaje.

**`x-amz-sns-subscription-arn`**  
ARN de la suscripción a este punto de enlace.

El siguiente encabezado HTTP POST es un ejemplo de encabezado para un mensaje `Notification` a un punto de conexión HTTP.

```
POST / HTTP/1.1
x-amz-sns-message-type: Notification
x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55
Content-Length: 1336
Content-Type: text/plain; charset=UTF-8
Host: myhost.example.com
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent
```

# Formato JSON de confirmación de suscripción HTTP/HTTPS
<a name="http-subscription-confirmation-json"></a>

Tras suscribir un HTTP/HTTPS punto de conexión, Amazon SNS envía un mensaje de confirmación de suscripción al HTTP/HTTPS punto de conexión. Este mensaje contiene un valor `SubscribeURL` que debe visitar para confirmar la suscripción (o bien, puede utilizar el valor `Token` con [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html)). 

**nota**  
Amazon SNS no envía notificaciones a este punto de conexión hasta que se confirma la suscripción

El mensaje de confirmación de la suscripción es un mensaje POST con un cuerpo que contiene un documento JSON con los siguientes pares de nombre-valor.

**`Type`**  
Tipo de mensaje. Para obtener una confirmación de suscripción, el tipo es `SubscriptionConfirmation`.

**`MessageId`**  
Un identificador único universal (UUID), único para cada mensaje publicado. En los mensajes que Amazon SNS reenvía durante un reintento, se usa el ID de mensaje original.

**`Token`**  
Un valor que puede utilizar con la acción [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) para confirmar la suscripción. También puede visitar simplemente `SubscribeURL`.

**`TopicArn`**  
Nombre de recurso de Amazon (ARN) del tema al que está suscrito este punto de enlace.

**`Message`**  
Cadena que describe el mensaje. Para la confirmación de suscripción, esta cadena tiene el aspecto siguiente:  

```
You have chosen to subscribe to the topic arn:aws:sns:us-east-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.
```

**`SubscribeURL`**  
Dirección URL que debe visitar para confirmar la suscripción. O bien, puede utilizar `Token` con la acción [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) para confirmar la suscripción.

**`Timestamp`**  
Hora (GMT) de envío de la confirmación de suscripción.

**`SignatureVersion`**  
Versión de la firma de Amazon SNS utilizada.  
+ Si `SignatureVersion` es **1**, `Signature` es una firma `SHA1withRSA` codificada en Base64 de los valores `Message`, `MessageId`, `Type`, `Timestamp` y `TopicArn`. 
+ Si `SignatureVersion` es **2**, `Signature` es una firma `SHA256withRSA` codificada en Base64 de los valores `Message`, `MessageId`, `Type`, `Timestamp` y `TopicArn`.

**`Signature`**  
Firma de `SHA1withRSA` o `SHA256withRSA` codificada en Base64 de los valores `Message`, `MessageId`, `Type`, `Timestamp` y `TopicArn`.

**`SigningCertURL`**  
Dirección URL del certificado que se utilizó para firmar el mensaje.

El mensaje HTTP POST siguiente es un ejemplo de un mensaje de `SubscriptionConfirmation` a un punto de conexión HTTP.

```
POST / HTTP/1.1
x-amz-sns-message-type: SubscriptionConfirmation
x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
Content-Length: 1336
Content-Type: text/plain; charset=UTF-8
Host: myhost.example.com
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
  "Type" : "SubscriptionConfirmation",
  "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b",
  "Token" : "2336412f37...",
  "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
  "Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.",
  "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37...",
  "Timestamp" : "2012-04-26T20:45:04.751Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLEpH+DcEwjAPg8O9mY8dReBSwksfg2S7WKQcikcNKWLQjwu6A4VbeS0QHVCkhRS7fUQvi2egU3N858fiTDN6bkkOxYDVrY0Ad8L10Hs3zH81mtnPk5uvvolIC1CXGu43obcgFxeL3khZl8IKvO61GWB6jI9b5+gLPoBc1Q=",
  "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem"
}
```

# Formato JSON de notificación HTTP/HTTPS
<a name="http-notification-json"></a>

Cuando Amazon SNS envía una notificación a un punto de enlace HTTP o HTTPS suscrito, el cuerpo del mensaje POST enviado al punto de enlace contiene un documento JSON con los siguientes pares de nombre-valor.

**`Type`**  
Tipo de mensaje. Para una notificación, el tipo es `Notification`.

**`MessageId`**  
Un identificador único universal (UUID), único para cada mensaje publicado. En las notificaciones que Amazon SNS reenvía durante un reintento, se usa el ID de mensaje original.

**`TopicArn`**  
Nombre de recurso de Amazon (ARN) del tema en el que se publicó el mensaje.

**`Subject`**  
Parámetro `Subject` especificado cuando se publicó la notificación en el tema.  
Se trata de un parámetro opcional. Si no se especifica `Subject`, el par de nombre y valor no aparecerá en este documento JSON.

**`Message`**  
Valor `Message` especificado cuando se publicó la notificación en el tema.

**`Timestamp`**  
Hora (GMT) de publicación de la notificación.

**`SignatureVersion`**  
Versión de la firma de Amazon SNS utilizada.  
+ Si `SignatureVersion` es **1**, `Signature` es una firma `SHA1withRSA` codificada en Base64 de los valores `Message`, `MessageId`, `Subject` ( si está presente), `Type`, `Timestamp` y `TopicArn`.
+ Si `SignatureVersion` es **2**, `Signature` es una firma `SHA256withRSA` codificada en Base64 de los valores `Message`, `MessageId`, `Subject` ( si está presente), `Type`, `Timestamp` y `TopicArn`.

**`Signature`**  
Firma de `SHA1withRSA` o `SHA256withRSA` codificada en Base64 de los valores `Message`, `MessageId`, `Subject` (si está presente), `Type`, `Timestamp` y `TopicArn`.

**`SigningCertURL`**  
Dirección URL del certificado que se utilizó para firmar el mensaje.

**`UnsubscribeURL`**  
Dirección URL que puede utilizar para cancelar la suscripción del punto de enlace a este tema. Si visita esta URL, Amazon SNS cancela la suscripción del punto de enlace y deja de enviarle notificaciones.

El mensaje HTTP POST siguiente es un ejemplo de un mensaje de `Notification` a un punto de conexión HTTP.

```
POST / HTTP/1.1
x-amz-sns-message-type: Notification
x-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96
Content-Length: 773
Content-Type: text/plain; charset=UTF-8
Host: myhost.example.com
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
  "Type" : "Notification",
  "MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324",
  "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
  "Subject" : "My First Message",
  "Message" : "Hello world!",
  "Timestamp" : "2012-05-02T00:54:06.655Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLEw6JRN...",
  "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
  "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96"
  }
```

# Formato JSON de confirmación de cancelación de suscripción HTTP/HTTPS
<a name="http-unsubscribe-confirmation-json"></a>

Cuando se cancela la suscripción de un HTTP/HTTPS punto final a un tema, Amazon SNS envía un mensaje de confirmación de cancelación de la suscripción al punto final.

El mensaje de cancelación de la suscripción es un mensaje POST con un cuerpo que contiene un documento JSON con los siguientes pares de nombre-valor.

**`Type`**  
Tipo de mensaje. Para obtener una confirmación de la cancelación de suscripción, el tipo es `UnsubscribeConfirmation`.

**`MessageId`**  
Un identificador único universal (UUID), único para cada mensaje publicado. En los mensajes que Amazon SNS reenvía durante un reintento, se usa el ID de mensaje original.

**`Token`**  
Valor que puede utilizar con la acción [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) para volver a confirmar la suscripción. También puede visitar simplemente `SubscribeURL`.

**`TopicArn`**  
Nombre de recurso de Amazon (ARN) del tema del que el punto de enlace ha cancelado su suscripción.

**`Message`**  
Cadena que describe el mensaje. Para la confirmación de la cancelación de suscripción, esta cadena tiene el aspecto siguiente:  

```
You have chosen to deactivate subscription arn:aws:sns:us-east-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.
```

**`SubscribeURL`**  
Dirección URL que debe visitar para volver a confirmar la suscripción. O bien, puede utilizar `Token` con la acción [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) para volver a confirmar la suscripción.

**`Timestamp`**  
Hora (GMT) de envío de la cancelación de la suscripción.

**`SignatureVersion`**  
Versión de la firma de Amazon SNS utilizada.  
+ Si `SignatureVersion` es **1**, `Signature` es una firma `SHA1withRSA` codificada en Base64 de los valores `Message`, `MessageId`, `Type`, `Timestamp` y `TopicArn`.
+ Si `SignatureVersion` es **2**, `Signature` es una firma `SHA256withRSA` codificada en Base64 de los valores `Message`, `MessageId`, `Type`, `Timestamp` y `TopicArn`.

**`Signature`**  
Firma de `SHA1withRSA` o `SHA256withRSA` codificada en Base64 de los valores `Message`, `MessageId`, `Type`, `Timestamp` y `TopicArn`.

**`SigningCertURL`**  
Dirección URL del certificado que se utilizó para firmar el mensaje.

El mensaje HTTP POST siguiente es un ejemplo de un mensaje de `UnsubscribeConfirmation` a un punto de conexión HTTP.

```
POST / HTTP/1.1
x-amz-sns-message-type: UnsubscribeConfirmation
x-amz-sns-message-id: 47138184-6831-46b8-8f7c-afc488602d7d
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55
Content-Length: 1399
Content-Type: text/plain; charset=UTF-8
Host: myhost.example.com
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
  "Type" : "UnsubscribeConfirmation",
  "MessageId" : "47138184-6831-46b8-8f7c-afc488602d7d",
  "Token" : "2336412f37...",
  "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
  "Message" : "You have chosen to deactivate subscription arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.",
  "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37fb6...",
  "Timestamp" : "2012-04-26T20:06:41.581Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLEHXgJm...",
  "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem"
}
```

# SetSubscriptionAttributes política de entrega (formato JSON)
<a name="set-sub-attributes-delivery-policy-json"></a>

Si envía una solicitud a la acción `SetSubscriptionAttributes` y establece el parámetro `AttributeName` al valor `DeliveryPolicy`, el valor del parámetro `AttributeValue` válido debe ser un objeto JSON válido. Por ejemplo, el siguiente ejemplo establece la política de entrega en 5 reintentos en total.

```
http://sns.us-east-2.amazonaws.com/
?Action=SetSubscriptionAttributes
&SubscriptionArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic%3A80289ba6-0fd4-4079-afb4-ce8c8260f0ca
&AttributeName=DeliveryPolicy
&AttributeValue={"healthyRetryPolicy":{"numRetries":5}}
...
```

Utilice el siguiente formato JSON para el valor del parámetro `AttributeValue`.

```
{
    "healthyRetryPolicy" : {
        "minDelayTarget" :  int,
        "maxDelayTarget" : int,
        "numRetries" : int,
        "numMaxDelayRetries" : int,
        "backoffFunction" : "linear|arithmetic|geometric|exponential"
    },
    "throttlePolicy" : {
        "maxReceivesPerSecond" : int
    },
    "requestPolicy" : {
        "headerContentType" : "text/plain | application/json | application/xml"
    }
}
```

Para obtener más información sobre la `SetSubscriptionAttribute` acción, consulta la *referencia [SetSubscriptionAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html)de la API de Amazon Simple Notification Service*. Para obtener más información sobre los encabezados content-type de HTTP compatibles, consulte [Crear una política HTTP/S de entrega](sns-message-delivery-retries.md#creating-delivery-policy).

# SetTopicAttributes política de entrega (formato JSON)
<a name="set-topic-attributes-delivery-policy-json"></a>

Si envía una solicitud a la acción `SetTopicAttributes` y establece el parámetro `AttributeName` al valor `DeliveryPolicy`, el valor del parámetro `AttributeValue` válido debe ser un objeto JSON válido. Por ejemplo, el siguiente ejemplo establece la política de entrega en 5 reintentos en total.

```
http://sns.us-east-2.amazonaws.com/
?Action=SetTopicAttributes
&TopicArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic
&AttributeName=DeliveryPolicy
&AttributeValue={"http":{"defaultHealthyRetryPolicy":{"numRetries":5}}}
...
```

Utilice el siguiente formato JSON para el valor del parámetro `AttributeValue`.

```
{
    "http" : {
        "defaultHealthyRetryPolicy" : {
            "minDelayTarget":  int,
            "maxDelayTarget": int,
            "numRetries": int,
            "numMaxDelayRetries": int,
            "backoffFunction": "linear|arithmetic|geometric|exponential"
        },
        "disableSubscriptionOverrides" : Boolean,
        "defaultThrottlePolicy" : {
            "maxReceivesPerSecond" : int
        },
        "defaultRequestPolicy" : {
            "headerContentType" : "text/plain | application/json | application/xml"
        }
    }
}
```

Para obtener más información sobre la `SetTopicAttribute` acción, consulta la *referencia [SetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html)de la API de Amazon Simple Notification Service*. Para obtener más información sobre los encabezados content-type de HTTP compatibles, consulte [Crear una política HTTP/S de entrega](sns-message-delivery-retries.md#creating-delivery-policy).