CloudWatch Synthetics を使ってて、 Canary 実行は正常に OK、 NG を返しますが、スクリーンショット、 HAR ファイル、 ログなど、 S3 に保存される情報が確認できないという状態になってました。
結論
Canary を VPC から実行 (実体は VPC Lambda) されていて、さらに S3 の VPC エンドポイントが設定されていて、ポリシーの設定に不備があるのが原因でした。
ポイントとしてはバケット(リソース)自体に付与するポリシー (PutObject
, GetBucketLocation
) とバケット一覧を取得する ListAllMyBuckets
が必要でした。
ここでハマったのが ListAllMyBuckets
はバケット(リソース)レベルで付与するポリシーということではなかったので上手く権限設定できていないというところでした。
最終的に設定したエンドポイントのポリシーは以下のような形です。 ListAllMyBuckets
を設定する場合は Resource
を *
にするのがポイントになります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::cw-syn-results-XXXXXXXXXXXX-us-west-2/*",
"arn:aws:s3:::cw-syn-results-XXXXXXXXXXXX-us-west-2"
]
},
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
}
]
}
Canary の Lambda のログには「ListAllMyBuckets の許可がないよ」が出てましたが、設定方法を間違っていたため解決に時間がかかっていました。
以上。