web-dev-qa-db-ja.com

AmazonSNSClientを使用してテキストメッセージを送信するときの承認

Javaのaws SDKを使用した Textmessageの送信方法 に関する公式のawsドキュメントは非常に簡単です。

しかし、下部の例に示すようなメッセージを送信すると、エラー_User: arn:aws:iam::xxx:user/sms-testing is not authorized to perform: SNS:Publish on resource: +999999999_が発生します

_+999999999_は.withPhoneNumber()呼び出しに渡される電話番号であることに注意してください。そのため、aws apiは、IAMユーザーが_SNS:Publish_を使用するリソースへのメッセージを必要な権限を持っていないというメッセージを表示します。電話番号。

私の質問:SMS Java SDKを介して通知を送信できるIAMユーザーを作成するにはどうすればよいですか?現在、作成する必要があるようです私がメッセージを送信するそれぞれの番号に対する許可。これは奇妙で維持するのが難しいようです。

16
pulse00

このエラーは、IAMユーザー "sms-testing"がそのリソースにSNS(SNS:Publish)に公開する権限を持っていないことを示しています。 IAMユーザーにはSNS:Publish権限がまったくない可能性があります。つまり、何も公開できません。その場合は、次のIAMポリシーをユーザーに追加する必要がありますOR IAMユーザーが所属するIAMグループにポリシーを追加します。

以下のリンクをクリックすると、IAMコンソールにアクセスして、「sms-testing」ユーザーのアクセス許可を編集できます。また、IAMユーザーがSNS(SMS、トピック、エンドポイントなど)に何かを発行できるようにするサンプルポリシーも以下にあります。

権限を少し制限したい場合は、「リソース」を変更して、トピックやアプリケーションarnなどの特定のSNSリソースを指定します。 IAMユーザーポリシーを編集できない場合は、管理者にこのポリシーの追加を依頼する必要があります。

IAMユーザーを変更します: https://console.aws.Amazon.com/iam/home?region=us-east-1#users/sms-testing

すべてのリソースへのSNS公開を許可するためのサンプルポリシー:

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

SNSにはSMSリソースがないため、少しハックして、トピックとプラットフォームアプリケーションへのすべてのSNS公開を「拒否」し、SMSのみを残す残りへの公開を許可できます(今)。

SMSへの公開のみを許可し、トピックとアプリケーションへの公開を拒否するサンプルポリシーを次に示します(プッシュ通知)。

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

お役に立てば幸いです。

-デニス

36
Dennis H