Date: 2016/9/7 Cate: Android Tags: ,  

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を許可したらうまくいった。

Leave a Reply