Amazon Simple Notification Service (Amazon SNS) トピックにサブスクライバーを追加しようとしたところ、Identity and Access Management (IAM) の認証エラーが表示されました。
簡単な説明
IAM エンティティが Subscribe API アクションのアクセス許可なしで Amazon SNS トピックにサブスクリプションを追加しようとすると、SNS は次のエラーを返します。
"An error occurred (AuthorizationError) when calling the Subscribe operation: User: your_IAM_user_or_role is not authorized to perform: sns:Subscribe on resource: YOUR_SNS_TOPIC_ARN"
注: 特定のエラーメッセージを確認して、エラーがアイデンティティベースのポリシーによるものか、リソースベースのポリシーによるものかを判断してください。
このエラーを解決するには、Amazon SNS トピックで Subscribe API アクションを実行するアクセス許可を IAM エンティティに付与します。
解決策
Amazon SNS トピックで Subscribe API アクションを実行するアクセス許可を IAM エンティティに付与するには、次の手順を実行します。
クロスアカウントアクセス
IAM エンティティが SNS トピックの AWS クロスアカウントにある場合は、次の手順を実行します。
-
以下のアイデンティティベースのポリシーを IAM エンティティにアタッチして、エンティティが sns:Subscribe API アクションを実行できるようにします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SNSSubscribePermission",
"Effect": "Allow",
"Action": "sns:Subscribe",
"Resource": "YOUR_SNS_TOPIC_ARN"
}
]
}
注: YOUR_SNS_TOPIC_ARN は Amazon SNS トピックの Amazon リソースネーム (ARN) に置き換えてください。
-
以下のリソースベースのポリシーをトピックのアクセスポリシーにアタッチして、IAM エンティティが sns:Subscribe API アクションを実行できるようにします。
{
"Sid": "AllowIAMEntity",
"Effect": "Allow",
"Principal": {
"AWS": "YOUR_IAM_ENTITY_ARN "
},
"Action": "sns:Subscribe",
"Resource": "YOUR_SNS_TOPIC_ARN"
}
注: YOUR_IAM_ENTITY_ARN は IAM エンティティの ARN に置き換えてください。YOUR_SNS_TOPIC_ARN は Amazon SNS トピックの ARN に置き換えてください。
同じアカウント間のアクセス
IAM エンティティが SNS トピックと同じ AWS アカウントにある場合は、sns:Subscribe アクションへのアクセス許可を許可するポリシーをアタッチします。前のステップで作成したアイデンティティベースのポリシーまたはリソースベースのポリシーのいずれかをアタッチします。
関連情報
Using identity-based policies with Amazon SNS (Amazon SNS でアイデンティティベースのポリシーを使用する)