Sto scrivendo un semplice client SNS che si intende sottoscrivere a un argomento SNS e quindi ascoltare le notifiche. Posso presentare con successo una richiesta sns.subscribe
, ma quando prendo in mano il messaggio SubscriptionConfirmation
POST da AWS e cercare di rispondere utilizzando sns.confirmSubscription
ottengo un AuthorizationError
tornato:Autorizzazione Errore durante la conferma dell'iscrizione SNS su HTTP
[AuthorizationError: User: arn:aws:iam::xxx:user/mv-user is not authorized to perform: SNS:ConfirmSubscription on resource: arn:aws:sns:us-east-1:xxx:*]
Se uso esattamente lo stesso motivo e TopicArn in un GET interrogare al server la conferma dell'iscrizione funziona bene, senza autenticazione.
Qualche idea sul perché non funziona? L'argomento My SNS è completamente aperto con autorizzazioni di pubblicazione/sottoscrizione impostate su "Tutti".
Per riferimento, il mio codice è qualcosa di simile:
var params = {
TopicArn: topicArn, // e.g. arn:aws:sns:us-east-1:xxx:yyy
Token: token // long token extracted from POST body
};
sns.confirmSubscription(params, function (err, data) {
if (err) {
// BOOOM - keep getting here with AuthorizationError
} else {
// Yay. Worked, but never seem to get here :(
}
});
Tuttavia, se ci si dirige verso l'URL simile a questo in un browser (cioè completamente non autenticato), funziona perfettamente:
http://sns.us-east-1.amazonaws.com/?Action=ConfirmSubscription&Token=<token>&TopicArn=arn%3Aaws%3Asns%3Aus-east-1%3Axxx%3Ayyy&Version=2010-03-31
Le uniche differenze sembrano essere l'inclusione delle intestazioni 'Autorizzazione' e 'Firma' nella versione programmatica (verificata utilizzando Wireshark).
Qualche idea? Grazie in anticipo!
Aggiornamento
Nel mio codice, se ho appena programatically fare una semplice richiesta GET alla SubscribeURL
nel messaggio SubscriptionConfirmation
questo funziona bene. Sembra strano che la chiamata all'API confirmSubscription
non funzioni. Probabilmente resterà fedele a questa soluzione alternativa per ora.
Update 2
anche ottenere lo stesso errore quando si chiama sns.unsubscribe
anche se, ancora una volta, chiamando il UnsubscribeURL
in ogni notifica funziona. Sembra che anche altre persone si siano imbattuti in questo problema, ma non riescono a trovare alcuna soluzione.
Quali sono le autorizzazioni IAM per 'mv-user'? – tedder42
L'utente non dispone di autorizzazioni o ruoli IAM specifici. Ho provato varie impostazioni per l'utente nella politica dell'argomento SNS. Aggiornerà il post per mostrare la politica quando torno in ufficio. –
E ciò che è davvero frustrante, questa pagina doc (http://docs.aws.amazon.com/sns/latest/dg/UsingIAMwithSNS.html) dice "Tuttavia, le azioni ConfirmSubscription e Unsubscribe non richiedono l'autenticazione, il che significa che anche se si specificano tali azioni in una politica, IAM non limiterà l'accesso degli utenti a tali azioni. " –