0

botoライブラリを使用して S3 バケットにファイルをアップロードするPython スクリプトを開発しました。Key.set_contents_from_filenameメソッドを使用してファイルをアップロードするときは、ヘッダーCache-ControlExpiresヘッダーを指定して、適切なブラウザー キャッシュを有効にします。これはすべて正常に機能し、メタデータ フィールドに正しいヘッダーが設定されたファイルがバケットに表示されます。

ファイルのホットリンクを防ぐために、S3 に次のバケット ポリシーを追加しました。

{
    "Version": "2008-10-17",
    "Id": "MySite",
    "Statement": [
        {
            "Sid": "Deny access if not specified referrer",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mybucket/*",
            "Condition": {
                "StringNotLike": {
                    "aws:Referer": [
                        "http://www.mysite.com/*",
                        "http://mysite.com/*"
                    ]
                }
            }
        }
    ]
}

このポリシーはホットリンクを防ぐために機能しますが、boto を使用してファイルをアップロードすると、ヘッダーCache-ControlExpiresヘッダーが設定されません。バケット ポリシーを削除すると問題が解決するため、バケット ポリシーを適切に指定していないことは明らかです。

ホットリンクを防止しながら、boto を使用してメタデータ フィールドをアップロードできるようにバケット ポリシーを変更する方法についてのアイデアはありますか?

4

1 に答える 1

0

私はヘッダーを自分でテストしていません。しかし、問題は Referer ヘッダーにある可能性があります。リファラーを使用してバケットにオブジェクトを取得および配置できるこのポリシーを追加することをお勧めします。

{
"Version": "2008-10-17",
"Statement": [
    {
        "Sid": "AllowFromReferer",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::745684876799:user/IAM_USER"
        },
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::BUCKET_NAME/*",
        "Condition": {
            "StringLike": {
                "aws:Referer": [
                    "http://mysite.com/*",
                    "http://www.mysite.com/*"
                ]
            }
        }
    }
]
}

これが失敗した場合、Referer に問題があると推測できます。リファラーに * だけを使用し、正常に機能する場合は、間違いなくリファラーの問題です。

于 2013-06-25T09:22:05.913 に答える