gpt4 book ai didi

amazon-web-services - AWS S3 - 能够从本地上传文件但不能从部署(拒绝访问)

转载 作者:行者123 更新时间:2023-12-03 17:05:35 24 4
gpt4 key购买 nike

我的问题是我无法将文件从我部署的项目上传到 S3 存储桶,即使我可以从本地主机上传。期待 URL,当我调用该方法时,一切都保持不变(标题、正文等)。

我正在使用 boto3 与 s3 交互并使用创建的 IAM 用户凭证。此外,对于部署,我使用 AWS Elastic Beanstalk。

以下是我用于上传的代码;

 def put(self, bytes, data, folder, file_name):
self.ext = file_name.split(".")[-1]

if self.__is_audio_ext(self.ext):
if folder == self.__voice_record:
self.__create_voice_record(data, folder, file_name)
elif folder == self.__voice_message:
self.__create_voice_message(data, folder, file_name)
else:
return "Response cannot be constructed."

self.s3_client.put_object(Body=bytes, Bucket=self.bucket_name, Key=folder + "/" + file_name)

return "Successfully created at URL " \
+ self.bucket_url + self.bucket_name + "/" + folder + "/" + file_name
else:
return "Invalid file type"

另外,下面是我如何设置 boto3
 def __init__(self):
self.ext = ""
self.env = {
"aws_access_key_id": settings.AWS_ACCESS_KEY_ID,
"aws_secret_access_key": settings.AWS_SECRET_ACCESS_KEY,
"region_name": 'eu-central-1'
}

self.bucket_name = "********"
self.session = session.Session(region_name='eu-central-1')
self.s3_client = self.session.client('s3', config=boto3.session.Config(signature_version='s3v4'))
self.bucket_url = "http://s3-eu-central-1.amazonaws.com/"

当我向我的服务器发出 PUT 请求时,这是我得到的错误:

An error occurred (AccessDenied) when calling the PutObject operation: Access Denied"



请注意,我创建了 IAM 用户并授予它使用 S3 的完全权限,并且我确信我使用的是正确的凭据。这很容易理解,因为我实际上可以从本地上传文件。

这就是为什么我认为问题出在我请求中的文件和部署项目之间的原因。但这对我来说似乎仍然不正确。无论如何,不​​要听我的,我在这里很困惑。

请不要犹豫,问我你不明白的地方。我可能会跳过清除某些点。

我正在研究它几个小时,但无法提出任何适当的解决方案,所以我会很高兴得到任何帮助!

谢谢!

最佳答案

为时已晚,但希望对其他新用户完全有帮助。我们应该使用 S3 存储桶权限的正确权限将实例配置文件附加到 EC2,并确保存储桶策略应该允许附加到实例的角色。
Follow this link

关于amazon-web-services - AWS S3 - 能够从本地上传文件但不能从部署(拒绝访问),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40539631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com