DjangoプロジェクトをAWS S3に接続しようとしています。
settings.py *です
_AWS_ACCESS_KEY_ID = #ID
AWS_SECRET_ACCESS_KEY = #Key
AWS_STORAGE_BUCKET_NAME = #Bucket
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'static'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'backend/static'),
]
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
_
IAMユーザーはAmazonS3FulAccessで作成されます。 しかし私が入力したとき:
_python manage.py collectstatic
_
エラーが発生しました:
設定で指定されているように、宛先の場所に静的ファイルを収集するように要求しました。
これは既存のファイルを上書きします。あなたはこれをやりたいのですか?
続行するには「はい」と入力します。キャンセルする 'no':はいトレースバック(最新の呼び出し):ファイル "manage.py"、22行目、22行目、22行目 "/ home/seokchan/server/mdocker /lib/python3.5/site-packages/django/core/management/init =; execute_from_command_line utility.execute()ファイル "/ home/seokchan/server/mdocker/lib/python3.5/site-packages/django/core/management/init。py "、line 375、execute self.fetch_command(サブコマンド).run_from_argv(self.argv)ファイル/ home/seokchan/server/mdocker/lib/python3.5/site-packages/django/core/management/base.py "、Run_from_argv self.execute(* args、** cmd_options)ファイル/ home/seokchan /server/mdocker/lib/python3.5/site-packages/django/core/management/base.py "、実行出力= self.handle(* args、**オプション)ファイル/ home/seokchan /server/mdocker/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectattatic.py "、188行目、188行目、collected = self.collect()ファイル"/home/seokc HAN/Server/MDocker/lib/python3.5/site-packages/django/control/staticfiles/managemen/commands/crowtestatic.py "、Line 114、Collect Handler(パス、prefixed_path、ストレージ)ファイル/ home/seokchan /server/mdocker/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collecttatic.py "、copy_file self.storage.save(prefixed_path、source_file)ファイル"/home /西京/サーバー/ MDocker/lib/python3.5/site-packages/django/core/files/storage.py "、49行目"、Save Return Self._save(名前、コンテンツ)ファイル "/ home/seokchan/server/mdocker/lib/python3.5/site-packages/storages/backends/s3boto3.py "、406、406、_save self._save_content(obj、content、parameters =パラメータ)ファイル/ home/seokchan/server/mdocker/lib /python3.5/site-packages/storages/backends/s3boto3.py "、行521、_save_content obj.upload_fileobj(コンテンツ、extrabls = put_parameters)ファイル" /home/seokchan/server/mdocker/lib/python3.5/ site-packages/boto3/s3/inject.py "、object_upload_fileobj extrabls = entrarg s、callback = callback、config = config)file "/home/seokchan/server/mdocker/lib/python3.5/site-packages/boto3/s3/inject.py"、539行目 "、uplobiobj return.result( )file "/home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/futures.py"、Line 106、Line 106、Line 106、In Self._coordinator.Result()ファイル/ home/seokchan/server /mdocker/lib/python3.5/site-packages/s3transfer/futures.py "、Line 265、Line 265、結果"/home/seokchan/server/mdocker/lib/python3.5/site-packages/ s3transfer/tasks.py "、行126、in- - call self._execute_main(kwargs)ファイル" /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/tasks _execute_main return_value = self._main(** kwargs)ファイル "/home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/upload.py"、492行目、 _Main Client.put_Object(Bucket = Bucket、Key =キー、Body = Body、** Extra_args)ファイル "/home/seokchan/server/mdocker/lib/python3.5/site-packages/botocore/client.py"、林E 357、_API_CALL RETURN SELF._MAKE_API_CALL(OPEROCH/SEOKCHAN/server/mdocker/lib/python3.5/site-packages/lib/python3.5/site-packages/lib/python3.5/site-packages/botocore/client.py "、661行目"、_make_api_call enerr_class( parsed_response、operation_name)botocore.exceptions.clientError:PutObject操作を呼び出すときにエラーが発生しました(AccesdDened):アクセスが拒否されました
SO、私は編集されたバケットポリシー:
_{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allow All",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::<bucket name>/*"
}
]
}
_
しかし、エラーはまだ発生しました。このエラーを解決するにはどうすればよいですか。
このステップでは、次のようなチュートリアルが表示されません。( https://simpleisbetterThanComplex.com/tutorial/2017/08/01/01/01/01/00-jap-amazon-s3-in- -django-project.html )
それはAWS S3アクセスの問題でした。
S3 Bucket Consoleでは、バケットの公衆アクセスを公開として編集しました。
これは私のために働いた:
_In my S3 bucket -> Permissions Tab -> click Block public access -> Edit -> untick Block all public access -> Save
_
と
In my AWS IAM settings -> Users Tab (under Access Management) -> <my-user> -> Add Permissions -> add AmazonS3FullAccess
これにより、ユーザー(AWS IDとAWS Secretによって識別された)が私のS3バケットを制御するためのアクセス権を認めました
デフォルトでは、新しいバケットを作成すると、S3オブジェクトのパブリックアクセスがすべてブロックされます(デフォルトではチェックされます)。つまり、パブリックAPIまたはアプリケーションを通じてオブジェクト(読み取り、書き込み)にアクセスすることはできません(Djangoアプリ))。だから、特定のバケット内のS3オブジェクトにアクセスしたい場合はアクセス許可を公開する権限を設定します(バケットの許可セクションを参照)。さらに制御するにはACLセクションからACL(Access Control List)ユーザーを追加できます。
これを参照することができます link
AWS_DEFAULT_ACL = None
を登録しました。 BOTOはデフォルトでpublic-read
ACLを要求しているようです。