web-dev-qa-db-fra.com

Autorisation lors de l'envoi d'un SMS à l'aide d'AmazonSNSClient

La documentation officielle de aws sur comment envoyer un message texte avec le kit de développement logiciel aws dans Java est assez simple.

Cependant, lorsque j'envoie un message comme indiqué dans l'exemple en bas, j'obtiens l'erreur User: arn:aws:iam::xxx:user/sms-testing is not authorized to perform: SNS:Publish on resource: +999999999

Notez que +999999999 Est le numéro de téléphone transmis à l'appel .withPhoneNumber(), donc l'api aws se plaint que mon utilisateur IAM ne dispose pas de l'autorisation nécessaire pour SNS:Publish Un message à la ressource avec ce numéro de téléphone.

Ma question: comment créer un utilisateur IAM capable d'envoyer des notifications SMS via le SDK Java? Actuellement, il semble que je devrais créer une autorisation pour chaque numéro auquel j'envoie des messages, ce qui semble étrange et difficile à maintenir.

16
pulse00

L'erreur vous indique que votre utilisateur IAM "sms-testing" n'a pas l'autorisation de publier sur SNS (SNS: Publish) sur cette ressource. Votre utilisateur IAM ne dispose probablement pas de l'autorisation SNS: Publier, ce qui signifie que vous ne pouvez rien publier. Si tel est le cas, il vous suffit d'ajouter la stratégie IAM suivante à votre utilisateur OR ajoutez la stratégie au groupe IAM auquel appartient votre utilisateur IAM.

Le lien ci-dessous devrait vous amener directement à la console IAM pour modifier les autorisations de l'utilisateur "sms-testing". Vous trouverez également ci-dessous un exemple de stratégie permettant à l'utilisateur IAM de publier n'importe quoi sur SNS (SMS, rubriques, points de terminaison, etc.).

Si vous souhaitez verrouiller un peu les autorisations, vous devez modifier la "Ressource" et spécifier une ressource SNS spécifique comme Topic ou application arn. Si vous ne parvenez pas à modifier la stratégie utilisateur IAM, vous devrez demander à votre administrateur d'ajouter cette stratégie pour vous.

Modifiez votre utilisateur IAM: https://console.aws.Amazon.com/iam/home?region=us-east-1#users/sms-testing

Exemple de stratégie pour autoriser la publication SNS vers TOUTES les ressources:

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

Étant donné que SNS n'a pas de ressource SMS, vous pouvez faire un peu de piratage et "refuser" toute publication SNS aux rubriques et aux applications de plate-forme, puis autoriser la publication au reste, ce qui ne laisse que SMS (pour maintenant).

Voici un exemple de stratégie autorisant uniquement la publication vers SMS et refusant la publication vers les rubriques et les applications (notifications push):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "sns:Publish"
            ],
            "Resource": "arn:aws:sns:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": "*"
        }
    ]
}

J'espère que cela pourra aider.

-Dennis

36
Dennis H