S3 を静的ファイル ホストとして Django プロジェクトをセットアップしています。
settings.py
AWS_STORAGE_BUCKET_NAME = 'project-1'
conn = boto.connect_s3()
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
S3_URL = 'http://project-1.s3.amazonaws.com/'
STATIC_URL = S3_URL
次に、次のように template タグを使用して、テンプレート内の静的ファイルへの参照を作成します。
<script src="{% static 'js/jquery.payment.js' %}"></script>
これはブラウザ内で正しくレンダリングされますが、URL にはSignature
、Expires
、およびの 3 つのパラメータがありAWSAccessKeyId
ます。後者の 2 つはファイルに影響を与えませんが、レンダリングされたSignature
値を使用してファイルにアクセスすると、InvalidAccessKeyId エラーが発生し、「指定した AWS アクセス キー ID は当社の記録に存在しません」というメッセージが表示されます。
パラメータを手動でSignature
削除すると、ファイルに問題なくアクセスできます。3 つのパラメーターをすべて削除しても問題ありません。後者の 2 つのパラメーターのいずれかを削除すると、「クエリ文字列認証には署名、有効期限、および AWSAccessKeyId パラメーターが必要です」というエラーが発生します。
Amazon の S3 ドキュメントには、通常は認証が必要なファイルへのアクセスを許可するためにクエリ文字列認証が使用されていること、およびExpires
パラメーターが (私が思っていたように) キャッシュに関連していないことが明らかになりました。これらのファイルは認証を必要としない (つまり、URL パラメーターが存在しない場合でもファイルにアクセスできる) ように見えるため、次のいずれかの助けが必要です。
- staticfiles/boto を作成して、これらのパラメーターを URL に強制しないようにします
- staticfiles/boto が有効な
Signature
値を取得するようにする