Django S3 使用 Boto3 和 OpenTelekomCloud (OTC)

Django S3 using Boto3 with OpenTelekomCloud (OTC)

我按照本教程 https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html 设置了我的 Django 应用程序与 S3 的 S3 集成。我使用 AWS 进行了测试,它运行良好,但对于生产用途,我想使用不同的 S3 提供商:OpenTelekomCloud aka OTC。

使用以下客户端代码,我可以访问 OTC 和 AWS,具体取决于 endpoint_url:

session = boto3.session.Session()
s3_client = session.client(
            service_name='s3',
            aws_access_key_id='XXXXXXXXXXX',
            aws_secret_access_key='XXXXXXXXXXXXXXXXXXXXXXXXX',
            endpoint_url='https://obs.eu-de.otc.t-systems.com',
            # region_name='eu-de',
            use_ssl=True,
            verify=True,
        )

print(s3_client.list_buckets())

但是我无法以正确的方式将配置移动到我的 Django 应用程序的 settings.py 文件中用于 OTC,而它在 AWS 上运行良好。

AWS_ACCESS_KEY_ID = 'XXXXXXXXXXXXX'
AWS_SECRET_ACCESS_KEY = 'XXXXXXXXXXXXXXXXXX'
AWS_STORAGE_BUCKET_NAME = 'my-bucket'
AWS_S3_CUSTOM_DOMAIN = 'obs.eu-de.otc.t-systems.com'  

AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}

尝试了几种不同的配置,但总是得到以下响应。

An error occurred (InvalidAccessKeyId) when calling the PutObject operation: The AWS Access Key Id you provided does not exist in our records.

为 OTC 配置我的 settings.py 以使其正常工作的正确方法是什么?

替换了这个

AWS_S3_CUSTOM_DOMAIN = 'obs.eu-de.otc.t-systems.com'

由此

AWS_S3_ENDPOINT_URL = 'http://obs.eu-de.otc.t-systems.com'

成功了!