AndroidでAWS SDKを使っていて、ファイルが存在するかを確認するためにdoesObjectExist
を呼び出したところ、存在しているときは問題なく動くが、存在しない場合に
Forbidden (Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden; Request ID: xxxxxxxxxxxxx)
といったエラーがでた。
AWS SDKからS3操作をするのにCognitoを使っているが、権限の設定が良くなかったみたい。
最初は
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1473155690000", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::hoge/*" ] } ] }
こんなかんじだったのを、
{ "Version": "2012-10-17", "Statement": [ // 追加 { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::hoge" }, // 追加おわり { "Sid": "Stmt1473155690000", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::hoge/*" ] } ] }
こう修正した。
こんなかんじで、hoge
というバケットに対してListBucketを許可したらうまくいった。