将对象从 minio 存储桶复制到 S3 存储桶

copy object from minio bucket to S3 bucket

我正在尝试使用本机 boto3 将对象从 Minio 存储桶复制到 aws s3 存储桶。我已经看到协议完全相同,但存储桶端点存在问题。我知道可以通过 mc 客户端实现,但我想使用本机 boto3 客户端。我已将源和目标存储桶都设置为 public,但我仍然无法完成。这是一个示例代码

import boto3

SESSION_s3 = boto3.session.Session(region_name="MY_REGION")
s3 = SESSION_s3.resource('s3', aws_access_key_id='MY_ACCESS_KEY',aws_secret_access_key='MY_SECRET_KEY').meta.client

SESSION_minio = boto3.session.Session(region_name="MY_REGION")
config=boto3.session.Config(signature_version='s3v4')
minio = SESSION_minio.resource('s3', endpoint_url='http://my_minio_public_server:9000',
                       aws_access_key_id='username',
                       aws_secret_access_key='password', config=config
                       ).meta.client

src = {"Bucket": "minio_bucket", "Key": "example.jpg"}
s3.copy(src, "s3_bucket_name", "example.jpg", SourceClient=minio) 

导致以下错误

botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the CopyObject operation: Access Denied

有没有办法在两个客户端之间建立这种连接?或者有更好的主意吗?注意到 minio 客户端不适合我。

copy() 命令告诉 Amazon S3 在 Amazon S3 生态系统 中复制一个对象。它可用于复制同一存储桶内或存储桶之间的对象,即使这些存储桶位于不同区域。

但是,minio 存在于 Amazon S3 'outside'。它不知道如何与 Amazon S3 对话,而 S3 也不知道如何与 minio 对话。他们使用自己的一组凭证,而其他系统也无法识别这些凭证。两个系统之间没有交互。

底线:您需要从一个系统下载文件并将其上传到另一个系统。