S3バケットにイベントを作成して、新しいオブジェクトが作成されるたびにメッセージがSNSに送信されるようにしようとしています。
いくつかの調査を行い、「ArnLike」:{"aws:SourceArn": "arn:aws:s3:::testBucket"}をターゲットトピックのポリシーに追加しました。 testBucketはバケットの名前です
しかし、イベントを作成しようとすると、「宛先トピックのアクセス許可では、S3がこのバケットからの通知を公開できません」と表示されます。
何か案は?大変感謝いたします
条件行を追加する前に、問題は解決しました
"ArnLike": {
"aws:SourceArn": "arn:aws:s3:*:*:testBucket"
}
デフォルトのステートメント内。公開アクションを含む新しいステートメントを作成する必要があることがわかりました。
{
"Sid": "publish-from-s3",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:ap-southeast-2:XXXXXXXXXXXXXX:testTopicforS3",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:s3:*:*:testBucket"
}
}
}
ええ、SNSを作成した後、それを変更してステートメントを追加します(デフォルトのステートメントの後に):
{
"Statement": [
{
"Sid": "__default_statement_ID",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"SNS:Publish",
"SNS:RemovePermission",
"SNS:SetTopicAttributes",
"SNS:DeleteTopic",
"SNS:ListSubscriptionsByTopic",
"SNS:GetTopicAttributes",
"SNS:Receive",
"SNS:AddPermission",
"SNS:Subscribe"
],
"Resource": "your sns arn"
},
{
"Sid": "s3",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "SNS:Publish",
"Resource": "your sns arn"
}
]
}
S3バケットの所有者がトピックに公開できるようにする必要があると思います。私は通常、最初に全員がトピックに公開できるようにして機能をテストし、後でより選択的なポリシーの詳細を追加します。
AWSコンソールでSNSトピックを選択し、[その他のトピックアクション]を選択し、[トピックポリシーの編集]を選択すると、[基本ビュー]タブが表示されます。 [これらのユーザーにこのトピックへのメッセージの公開を許可する]セクションで、[全員]を選択して保存します。次に、イベントをS3に追加し、基本的なイベント公開が機能することを確認します。その後、詳細ビューを使用して、詳細なポリシー変更をロックダウンできます。
新しいステートメントを追加する代わりに、"Service": "s3.awsamazon.com"
内部Principal
。したがって、次のようになります。
Statement: [
{
"Sid": "publish-from-s3",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com", # ADD THIS!
"AWS": <AWS_Account_Name_for_Access>
},
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:ap-southeast-2:XXXXXXXXXXXXXX:testTopicforS3",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:s3:*:*:*"
}
}
}
]