Salta al contenuto

Come posso configurare il mio endpoint di Amazon SQS multi-account per il topic Amazon SNS?

8 minuti di lettura
0

Desidero imparare a configurare una coda Amazon SQS multi-account per effettuare la sottoscrizione di un topic Amazon SNS e ricevere notifiche su diversi account AWS.

Breve descrizione

Crea una sottoscrizione dal topic Amazon Simple Notification Service (Amazon SNS) come proprietario del topic. Oppure creala dalla coda Amazon Simple Queue Service (Amazon SQS) come proprietario della coda. Per creare correttamente la sottoscrizione, entrambi gli approcci devono avere le autorizzazioni appropriate.

Risoluzione

Importante: per effettuare la sottoscrizione come proprietario di una coda, assicurati che la policy di accesso del topic SNS nell'account B abbia le autorizzazioni appropriate. Queste autorizzazioni consentono alla coda SQS nell'account A di effettuare la sottoscrizione del topic SNS. Per effettuare la sottoscrizione come proprietario di un topic, assicurati che la policy di accesso della coda SQS nell'account A abbia le autorizzazioni appropriate. L'account A deve avere le autorizzazioni per consentire al topic SNS di inviare l'URL di conferma della sottoscrizione.

Effettua la sottoscrizione come proprietario della coda

Per effettuare la sottoscrizione per una coda come proprietario della coda, completa le seguenti attività.

Modifica la policy di accesso di SNS nell'account B

Completa i passaggi seguenti:

  1. Accedi alla console Amazon SNS nell'account B.
  2. Passa alla Regione AWS appropriata.
  3. Scegli Argomenti, quindi seleziona il topic SNS.
  4. Scegli Modifica.
  5. Espandi la sezione Policy di accesso.
  6. Copia e incolla la seguente policy di accesso nella sezione Editor JSON:
    {
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "111122223333"
          },
          "Action": "sns:Subscribe",
          "Resource": "arn:aws:sns:Region:account-id:topic-name"
        }
      ]
    }
    Nota: sostituisci l'ARN dell'account AWS e del topic SNS con i tuoi valori.
  7. Scegli Salva.

In qualità di proprietario della coda, completa i seguenti passaggi per effettuare la sottoscrizione per la coda SQS nell'account A del topic SNS nell'account B:

  1. Accedi alla console Amazon SQS nell'account A.
  2. Passa alla Regione appropriata.
  3. Scegli Code, quindi seleziona la coda SQS.
  4. Nella sezione Sottoscrizioni SNS , seleziona Sottoscrivi l’argomento Amazon SNS.
  5. In Specify an Amazon SNS topic available for this queue (Specifica un topic Amazon SNS disponibile per questa coda), seleziona il menu a discesa. Quindi scegli Enter Amazon SNS topic ARN (Inserisci l'ARN del topic Amazon SNS).
  6. Nel campo di testo An Amazon SNS topic that can send notifications to an Amazon SQS queue (Un topic Amazon SNS in grado di inviare notifiche a una coda Amazon SQS), inserisci l'ARN del topic SNS.
  7. Scegli Salva.
  8. Accedi alla console Amazon SNS nell'account B.
  9. Scegli Argomenti, quindi seleziona il topic SNS.
  10. Per verificare che la sottoscrizione del topic SNS nell'account B sia confermata, consulta la sezione Sottoscrizioni.
    Nota: dopo aver creato la sottoscrizione, viene aggiunta un'istruzione alla policy di accesso della coda SQS. La policy consente al topic SNS di inviare messaggi alla coda. La policy è simile alla seguente:
{
      "Sid": "topic-subscription-arn:aws:sns:Region:account-id:topic-name",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "SQS:SendMessage",
      "Resource": "arn:aws:sqs:Region:account-id:queue-name",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:sns:Region:account-id:topic-name"
        }
      }
    }

Effettua la sottoscrizione come proprietario di un topic

Per effettuare la sottoscrizione per una coda come proprietario di un topic, completa le seguenti attività.

Modifica la coda SQS nell'account A

Completa i passaggi seguenti:

  1. Accedi alla console Amazon SQS nell'account A.
  2. Passa alla Regione appropriata.
  3. Scegli Code, quindi seleziona la coda SQS.
  4. Scegli Modifica.
  5. Espandi la sezione Policy di accesso.
  6. Copia e incolla la seguente policy di accesso nell'editor JSON:
    {
          "Sid": "Allow_SNS_topic_in_Account_B_to_Send_Message",
          "Effect": "Allow",
          "Principal": {
            "AWS": "*"
          },
          "Action": "SQS:SendMessage",
          "Resource": "arn:aws:sqs:Region:account-id:queue-name",
          "Condition": {
            "ArnLike": {
              "aws:SourceArn": "arn:aws:sns:Region:account-id:topic-name"
            }
          }
        }
    Nota: sostituisci l'ARN della coda SQS e del topic SNS con i tuoi valori.

In qualità di proprietario del topic, completa i seguenti passaggi per effettuare la sottoscrizione per la coda SQS in un altro account:

  1. Accedi alla console Amazon SNS nell'account B.
  2. Passa alla Regione appropriata.
  3. Scegli Argomenti, quindi seleziona il topic SNS.
  4. In Sottoscrizioni, seleziona Crea sottoscrizione.
  5. Scegli l'elenco a discesa Protocollo, quindi seleziona Amazon SQS.
  6. Quindi seleziona Crea sottoscrizione.
  7. Per verificare la sottoscrizione, accedi alla console Amazon SQS nell'account A.
  8. Scegli Code, quindi seleziona la coda SQS per la quale è stata effettuata la sottoscrizione.
  9. Scegli Invio e ricezione di messaggi.
  10. Seleziona Esegui il polling dei messaggi. Nella sezione Messaggi compare un messaggio da Amazon SNS.
  11. Seleziona l'ID del messaggio. In SubscribeURL, copia l'URL tra virgolette.
  12. Per vedere l'esito ConfirmSubscriptionResult con SubscriptionArn, incolla questo link URL nel browser web e premi Invio.
  13. Accedi alla console Amazon SNS nell'account B.
  14. Scegli Argomenti, quindi seleziona il topic SNS.
  15. Per verificare che la sottoscrizione sia confermata, controllane lo stato in Sottoscrizioni. Lo stato della sottoscrizione passa da In attesa di conferma a Confermata.

Nota: poiché la sottoscrizione appartiene all'account SNS, non puoi visualizzarla nella console SQS.

Suggerimenti per la risoluzione dei problemi

Per risolvere i problemi relativi alle code, completa le seguenti attività in base al caso d'uso.

La mia coda SQS è crittografata

Le code SQS crittografate con una chiave del Servizio AWS di gestione delle chiavi (AWS KMS) possono limitare l'accesso multi-account. Se non definisci una chiave per la coda crittografata, la coda utilizza la chiave AWS KMS (SSE-KMS) come chiave predefinita. Questa chiave consente l'accesso solo ai principali dello stesso account. Per ulteriori informazioni, consulta Crittografia inattiva in Amazon SQS.

Per accedere alle code crittografate che utilizzano SSE-KMS, crea una chiave AWS KMS gestita dal cliente. Quindi aggiungi nella policy della chiave autorizzazioni che consentano al servizio SNS di effettuare chiamate API AWS KMS.

Per consentire al servizio SNS di utilizzare i metodi API GenerateDataKey e Decrypt, aggiungi la seguente istruzione alla policy della chiave gestita dal cliente:

{
      "Effect": "Allow",
      "Principal": {
            "Service": "sns.amazonaws.com"
      },
      "Action": [
            "kms:GenerateDataKey*",
            "kms:Decrypt"
      ],
      "Resource": "*"
}

Per ulteriori informazioni, consulta Configurazione della crittografia lato server per una coda utilizzando la console Amazon SQS.

La mia sottoscrizione risulta ancora in sospeso nella console SNS quando la creo dalla console Amazon SNS

Per risolvere questo errore, completa i seguenti passaggi:

  1. Elimina la sottoscrizione. Quindi inizia dal passaggio 13 della procedura prima illustrata.

  2. Per eseguire il polling della coda SQS utilizzando l'Interfaccia della linea di comando AWS (AWS CLI), esegui questo comando per recuperare l'URL della sottoscrizione:

    aws sqs receive-message --queue-url https**:**//sqs.us-east-1.amazonaws.com/80398EXAMPLE/MyQueue --attribute-names All --message-attribute-names All --max-number-of-messages 10

    Nota: se visualizzi dei messaggi di errore quando esegui i comandi dell'interfaccia della linea di comando AWS, consulta la sezione Risolvere gli errori AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

  3. Copia e incolla questo URL nel browser per verificare la sottoscrizione. Assicurati di sostituire l'URL della coda con il tuo.

Quando copio e incollo la mia policy di accesso del topic SNS, ricevo un errore "Couldn't set topic access policy"

Quando copio e incollo la mia policy di accesso del topic SNS, ricevo il seguente errore:

"Couldn't set topic access policy.Error code: InvalidParameter - Error message: An error occurred while setting the attribute access policy. Invalid parameter: Policy Error: null."

Utilizza i seguenti passaggi per risolvere l'errore:

  1. Per assicurarti che la sintassi della policy sia corretta, copia e incolla la policy di accesso sul sito web dello strumento JSON Validator.
  2. Rivedi la policy di accesso per assicurarti di non avere un'istruzione duplicata. Assicurati che ci sia una virgola dopo il primo ID dell'istruzione.

L'ID della mia sottoscrizione viene visualizzato come "Eliminato" nella console Amazon SNS

Nell'integrazione multi-account di SNS e SQS, il proprietario della sottoscrizione dipende da dove è stata creata.

Se la sottoscrizione viene creata dall'account SQS, SQS ne è il proprietario. Se la sottoscrizione viene creata dall'account SNS, SNS ne è il proprietario.

Se chiami l'API Unsubscribe da un account che non è proprietario della sottoscrizione, la sottoscrizione passa nello stato Eliminata. Oppure se tenti di eliminare la sottoscrizione dalla console, l'abbonamento passa allo stato Eliminata. Mentre la sottoscrizione del topic SNS è nello stato Eliminata, l'account che ne è il proprietario non può effettuate nuovamente la sottoscrizione del topic con lo stesso endpoint.

Dopo 48 ore, Amazon SNS annulla la sottoscrizione Eliminata e l'account che ne è il proprietario può effettuare nuovamente la sottoscrizione del topic con lo stesso endpoint.

Per effettuare nuovamente la sottoscrizione prima che siano trascorse 48 ore, chiama l'API Subscribe dall'account AWS che è proprietario del topic SNS per ricrearla.

Best practice

Autentica la sottoscrizione SNS nella coda SQS. Con questa configurazione, solo il proprietario del topic e il proprietario della sottoscrizione possono annullare la sottoscrizione del topic SNS per la coda SQS.

Informazioni correlate

Invio di messaggi Amazon SNS a una coda Amazon SQS; in un altro account

Consentire la pubblicazione delle notifiche degli eventi Amazon S3 su un topic

Come posso risolvere gli errori di autorizzazione quando tento di aggiungere sottoscrizioni a un topic Amazon SNS?

Informazioni sul periodo di riutilizzo della chiave di dati Amazon Simple Notification Service (Amazon SNS) Amazon Simple Queue Service (Amazon SQS)