ошибка ботокора возникает при сборе статических файлов в приложении django

#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