#django #amazon-web-services #amazon-s3 #boto
Вопрос:
Я использую корзину AWS S3 для своих проектов для обслуживания статических файлов и медиафайлов. Я использовал ведро S3 для своих предыдущих проектов django, оно отлично работает. Но для моего текущего проекта при использовании команды возникает следующая ошибка python manage.py collectstatic
.
ботокор.исключения.ClientError: Произошла ошибка (403) при вызове операции HeadObject: Запрещено
Я использовал правильную настройку S3, а также сделал свою корзину S3 общедоступной. Но не знаю, почему возникает эта ошибка. пожалуйста, помогите мне решить эту проблему. Заранее спасибо.
Мой код
if config("USE_S3", cast=bool) == True:
# aws settings
AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = config('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = config('AWS_STORAGE_BUCKET_NAME')
AWS_S3_REGION_NAME = 'us-east-1'
AWS_DEFAULT_ACL = None
AWS_S3_FILE_OVERWRITE = False
AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400'
}
# s3 static settings
STATIC_LOCATION = 'static'
STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{STATIC_LOCATION}/'
STATICFILES_STORAGE= 'storages.backends.s3boto3.S3Boto3Storage'
else:
MEDIA_URL = '/mediafiles/'
MEDIA_ROOT = os.path.join(BASE_DIR, "mediafiles")
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static")
]
Моя политика в отношении ведра
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicRead",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::my-bucket-name/*"
}
]
}
Моя настройка cors для ведра,
[
{
"AllowedHeaders": [
"Authorization",
"Content-Range",
"Accept",
"Content-Type",
"Origin",
"Range"
],
"AllowedMethods": [
"GET"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": [
"Content-Range",
"Content-Length",
"ETag"
],
"MaxAgeSeconds": 3000
}
]
Ошибка в консоли,
(ENV) D:vssundar_product_websitewebapp>python manage.py collectstatic
You have requested to collect static files at the destination
location as specified in your settings.
This will overwrite existing files!
Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel: yes
Traceback (most recent call last):
File "D:vssundar_product_websitewebappmanage.py", line 22, in <module>
main()
File "D:vssundar_product_websitewebappmanage.py", line 18, in main
execute_from_command_line(sys.argv)
File "D:vssundar_product_websiteENVlibsite-packagesdjangocoremanagement__init__.py", line 419, in execute_from_command_line
utility.execute()
File "D:vssundar_product_websiteENVlibsite-packagesdjangocoremanagement__init__.py", line 413, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "D:vssundar_product_websiteENVlibsite-packagesdjangocoremanagementbase.py", line 354, in run_from_argv
self.execute(*args, **cmd_options)
File "D:vssundar_product_websiteENVlibsite-packagesdjangocoremanagementbase.py", line 398, in execute
output = self.handle(*args, **options)
File "D:vssundar_product_websiteENVlibsite-packagesdjangocontribstaticfilesmanagementcommandscollectstatic.py", line 187, in handle
collected = self.collect()
File "D:vssundar_product_websiteENVlibsite-packagesdjangocontribstaticfilesmanagementcommandscollectstatic.py", line 114, in collect
handler(path, prefixed_path, storage)
File "D:vssundar_product_websiteENVlibsite-packagesdjangocontribstaticfilesmanagementcommandscollectstatic.py", line 338, in copy_file
if not self.delete_file(path, prefixed_path, source_storage):
File "D:vssundar_product_websiteENVlibsite-packagesdjangocontribstaticfilesmanagementcommandscollectstatic.py", line 251, in delete_file
target_last_modified = self.storage.get_modified_time(prefixed_path)
File "D:vssundar_product_websiteENVlibsite-packagesstoragesbackendss3boto3.py", line 544, in get_modified_time
return make_naive(entry.last_modified)
File "D:vssundar_product_websiteENVlibsite-packagesboto3resourcesfactory.py",
line 339, in property_loader
self.load()
File "D:vssundar_product_websiteENVlibsite-packagesboto3resourcesfactory.py",
line 505, in do_action
response = action(self, *args, **kwargs)
File "D:vssundar_product_websiteENVlibsite-packagesboto3resourcesaction.py", line 83, in __call__
response = getattr(parent.meta.client, operation_name)(*args, **params)
File "D:vssundar_product_websiteENVlibsite-packagesbotocoreclient.py", line 388, in _api_call
return self._make_api_call(operation_name, kwargs)
File "D:vssundar_product_websiteENVlibsite-packagesbotocoreclient.py", line 708, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden
Комментарии:
1. Ведро тоже внутри
us-east-1
?2. Да, ведро было в США-восток-1