今日の積み上げ
- SOA対策本 模擬試験(ラボ問題)2-1
今日はS3のラボ問題をやってみました。
S3オブジェクトの削除イベントをSNSに通知するために、
の手番を踏む必要があるんですが、2の変更のやり方がわからず、詰まりました。。
対策本の解説では、アクセスポリシーのCondition要素の下記のように修正する、となっており、やってみたけど、どうにもうまくいかない。。
(SNSアクセスポリシーの保存はできるんですが、S3イベント通知の作成でエラーになってしまう)
ちなみに、SNSトピックを作成した際のデフォルトのアクセスポリシーは下記の通り。
{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
{
"Sid": "__default_statement_ID",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"SNS:GetTopicAttributes",
"SNS:SetTopicAttributes",
"SNS:AddPermission",
"SNS:RemovePermission",
"SNS:DeleteTopic",
"SNS:Subscribe",
"SNS:ListSubscriptionsByTopic",
"SNS:Publish"
],
"Resource": "SNS-topic-ARN",
"Condition": {
"StringEquals": {
"AWS:SourceOwner": "bucket-owner-account-id"
}
}
}
]
}
しょうがないので、公式ドキュメントを調べてみることに。
下記ポリシーをコピペして、赤字箇所を自分用に修正したところ、無事イベント通知の作成まで完了することができました。
{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "Example SNS topic policy",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"SNS:Publish"
],
"Resource": "SNS-topic-ARN",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:s3:*:*:bucket-name"
},
"StringEquals": {
"aws:SourceAccount": "bucket-owner-account-id"
}
}
}
]
}
うまくいったのはよかったんですが、これ、何のヒントもなく本試験で出されたら、即アウトだなぁと思いました。
(何が悪くてうまくいかなかったのか、までは究明できていません)
SOA試験でこのレベルまで求められてしまうと、ほんとに実務レベルでやっていないと太刀打ちできそうにない感じがしてしまうのは気のせいですかね。
ま、ここを乗り切れるかどうか、試練の時なんでしょうね。
今日のところは、いい問題に巡り合えた、と前向きに捉えていこうと思います。
明日は引き続き、ラボ問題2-2のAWS Backupをやってみようと思います。
それでは、また明日!
[ 事後記載 2022/7/6 0:10 ]
謎が解けました!
Principal要素について、よく理解できていなかったことが原因でした。
"AWS":"*" → これはAWSアカウントがPublisher
"Service":service-name.amazonaws.com → これは赤字のAWSサービスがPublisher
つまり、Principal要素がS3サービスとしてアクセスポリシーを定義しないと、効力を発揮しないということ。
最初、うまくいかなかったのは、Principal要素がAWSアカウントとなっているポリシーのConditionに追加していたのが原因。(わかって振り返ると、なるほど納得って感じ)
謎解きにあたり、参考にした記事はこちら。
これで心置きなく眠れる~