15

バケットに次のバケットポリシーを設定しています。

{

"Version": "2008-10-17",

"Id": "My access policy",

"Statement": [

     {

 "Sid": "Allow only requests from our site",

 "Effect": "Allow",

 "Principal": { "AWS": "*"},

 "Action": "s3:GetObject",

 "Resource": "arn:aws:s3:::my_bucket/*",

 "Condition": {

   "StringLike": {

      "aws:Referer": [" http://mydomain.com/*"," http://www.mydomain.com/*"]

        }

              }

 },

{

   "Sid": "Dont allow direct acces to files  when no referer is present",

   "Effect": "Deny",

   "Principal": {"AWS": "*" },

  "Action": "s3:GetObject",

  "Resource": "arn:aws:s3:::my_bucket/*",

  "Condition": {

  "Null": {"aws:Referer": true }

         }

         }

]

  }

クエリ文字列認証も構成しましたが、両方を使用できないようです。mydomainから発信されていないリクエストを拒否するようにバケットポリシーを設定している場合、クエリ文字列認証を使用した一時URLも提供されません。だから私の質問は、どうすれば両方を持つことができますか?URLパラメータをチェックし、「署名」と呼ばれるパラメータがあるかどうかを確認する方法はありますか?その場合、リファラーポリシーを適用しませんか?

4

1 に答える 1

19

間違っているリファラー文字列" http://mydomain.com/* "のスペースを削除してください...Amazonの例でもその間違いを犯しました。

2番目のステートメントの場合、それを解決する簡単な方法は、ステートメント全体を削除し、ファイルのアクセス許可(ACL)をプライベート(所有者-読み取り/書き込みおよびワールド-読み取り/書き込みなし)に設定することです。

よくわかりませんが、拒否ステートメントがある場合でも、公的な許可(World Read)があれば、ファイルを読み取ることができるようです。

また、CloudFrontでファイルを配布する場合は、バケットの読み取りも許可することを忘れないでください。したがって、完全なバケットポリシーは次のようになります。

{
"Version": "2008-10-17",
"Id": "YourNetwork",
"Statement": [
    {
        "Sid": "Allow get requests to specific referrers",
        "Effect": "Allow",
        "Principal": {
            "AWS": "*"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::yourbucket/*",
        "Condition": {
            "StringLike": {
                "aws:Referer": [
                    "http://www.yourwebsite.com/*",
                    "http://yourwebsite.com/*"
                ]
            }
        }
    },
    {
        "Sid": "Allow CloudFront get requests",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::12345678:root"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::yourbucket/*"
    }
]
}

(12345678をダッシュ​​なしのAWSアカウントID番号に変更します)

于 2011-06-28T17:58:42.997 に答える