2016-05-05 10 views
0

Ich möchte Amazon SNS-Themen dynamisch im Code erstellen. Ich verwende den AWS Mobile Hub SDK für iOS.So erstellen Sie AWS SNS Thema im Code (iOS Mobile Hub SDK)

Wenn ich versuche, ein Thema zu erstellen

… 
AWSSNSCreateTopicInput* input = [AWSSNSCreateTopicInput new]; 
NSString* name = @"topic_name"; 
[input setName:name]; 

[[[[AWSSNS defaultSNS] createTopic:input] continueWithSuccessBlock:^id _Nullable(AWSTask<AWSSNSCreateTopicResponse *> * _Nonnull task) 
… 

Ich erhalte eine Fehlermeldung von AWS:

<Message>User: (role/credentials) is not authorized to perform: SNS:CreateTopic on resource: (topic)</Message> 

(Rolle/Credentials) stellt die IAM Rolle und seine Cognito Berechtigungsnachweise. (Thema) ist der ARN des Themas I, indem sie ein Thema Namen

AWS Mobile Hub erstellt die folgende Push Politik für meine Mobile Hub Rolle angefordert:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "sns:CreatePlatformEndpoint", 
       "sns:GetEndpointAttributes", 
       "sns:SetEndpointAttributes" 
      ], 
      "Resource": [ 
       "(APN role arn)" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "sns:Subscribe", 
       "sns:Publish", 
       "sns:Unsubscribe" 
      ], 
      "Resource": [ 
       "(dynamodb role arn)", 
       "(Mobile Hub Role arn)" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "sns:ListTopics" 
      ], 
      "Resource": [ 
       "*" 
      ] 
     } 
    ] 
} 

Ich habe versucht, das Hinzufügen der Zeile

"sns:CreateTopic", 

zu den mittleren Satz von Erlaubnis (knapp über "SNS: Abonnieren"), aber das hat den Fehler nicht gelöst. Aus der Fehlermeldung und dem Lesen von AWS-Dokumenten scheint es, dass ich jedem von mir erstellten Thema eine Richtlinie beifügen muss, um es zu verwenden. Hier sind zwei Auszüge aus der AWS docs die relevant sein kann:

The following example shows the permissions that are automatically created by AWS Config for a new topic. This policy statement allows AWS Config to publish to a specified Amazon SNS topic. 

If you want to use an existing SNS topic from another account or you set up your delivery channel using the API, make sure to attach the following policy to the SNS topic. 

{ 
    "Id": "Policy1415489375392", 
    "Statement": [ 
    { 
     "Sid": "AWSConfigSNSPolicy20150201", 
     "Action": [ 
     "SNS:Publish" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:sns:region:account-id:myTopic", 
     "Principal": { 
     "Service": [ 
      "config.amazonaws.com" 
     ] 
     } 
    } 
    ] 
} 

und

IAM Role Policy for Amazon SNS Topic 

Use this example policy as a model for granting AWS Config permissions to access your SNS topic: 

{ 
    "Version": "2012-10-17", 
    "Statement": 
    [ 
    { 
     "Effect":"Allow", 
     "Action":"sns:Publish", 
     "Resource":"yourSNStopicARN" 
    } 
    ] 
} 

Das ist alles, was ich habe in der Lage über das Erstellen von Themen mit einem sdk zu finden. Kann mir jemand ein vollständiges Beispiel geben oder zeigen?

Dank

Antwort

0

Das AWS Forum für Amazon SNS (Simple Notification Service), der Service mobile Push sichern, kann ein besserer Ort Hilfe zu diesem Thema zu erhalten.
https://forums.aws.amazon.com/forum.jspa?forumID=72

Das Problem scheint, dass die entsprechende mobile app Benutzer IAM Rolle ist nicht berechtigt zu sein, das Thema zu erstellen. Mobile Hub erteilt Nutzern mobiler Apps keine Berechtigungen zum Erstellen von SNS-Themen standardmäßig. Sie sollten die SNS: CreateTopic-Berechtigung für die Anweisung, die SNS hat: ListTopic, wie folgt ...

+0

Andrew C danke für Ihre Antwort. Ich habe die von Ihnen vorgeschlagene Änderung vorgenommen und erhalte immer noch denselben Fehler. Ich werde die Frage in dem von Ihnen vorgeschlagenen Forum erneut stellen. –

+0

Nun, ich würde bei AWS posten, aber obwohl ich ein AWS-Entwicklerkonto habe, das nicht neu ist und ich eingeloggt bin, bin ich nicht autorisiert, einen neuen Thread in einem AWS-Forum zu posten. Ich habe noch nicht herausgefunden, wie man dort Post-Erlaubnis erhält. –

+0

Frische Augen an diesem Morgen zeigten mir, dass ich am selben Ort einen anderen Fehler hatte. Ich musste auch sns: SetTopicAttributes zu demselben Abschnitt der Richtlinie hinzufügen. Danke für deine Hilfe und ich entschuldige mich für meine schlampige Schlussfolgerung. –