Amazon web services Boto3返回调用PutObject操作时发生的错误(AccessDenied):拒绝访问
我已经创建了一个具有对S3完全访问权限的策略的用户: 当我设置凭据(~/.aws/credentials)并尝试使用boto3将文件推送到我的存储桶时,它返回Amazon web services Boto3返回调用PutObject操作时发生的错误(AccessDenied):拒绝访问,amazon-web-services,amazon-s3,boto3,amazon-iam,Amazon Web Services,Amazon S3,Boto3,Amazon Iam,我已经创建了一个具有对S3完全访问权限的策略的用户: 当我设置凭据(~/.aws/credentials)并尝试使用boto3将文件推送到我的存储桶时,它返回调用PutObject操作时发生的错误(AccessDenied):拒绝访问 知道为什么会这样吗 我甚至尝试为根帐户生成一个访问密钥id/秘密访问密钥,但它返回相同的错误。我已经用另一个帐户的凭据运行了我的代码,它工作正常,因此问题出在帐户本身 编辑: 我使用boto3.client('sts').get\u caller\u ident
调用PutObject操作时发生的错误(AccessDenied):拒绝访问
知道为什么会这样吗
我甚至尝试为根帐户生成一个访问密钥id/秘密访问密钥,但它返回相同的错误。我已经用另一个帐户的凭据运行了我的代码,它工作正常,因此问题出在帐户本身
编辑:
我使用boto3.client('sts').get\u caller\u identity().get('account')
验证了呼叫者ID与我的帐户相同
我没有为我的bucket设置策略,这些是它的权限
这是我课堂上的一个片段
from boto3 import client
from botocore.exceptions import ClientError
from boto3.exceptions import S3UploadFailedError
class AmazonS3(object):
s3 = client('s3')
@classmethod
def upload_image(cls, bucket_name, object_name, file_content):
extra_args = {"ACL": "public-read",
"ContentType": "image/jpeg" if object_name.split('.')[-1] in ['jpg', 'jpeg'] else "image/png",
"ContentDisposition": "inline",
"ContentEncoding": "base64"}
try:
cls.s3.put_object(Body=file_content, Bucket=bucket_name, Key=object_name, **extra_args)
except (ClientError, S3UploadFailedError, Exception) as e:
raise Exception('There was an error when uploading the image')
我发现了问题。在我的代码中,我从一个环境变量中获取了bucket名称,如下面的
os.getenv('AWS\u bucket\u name','X')
在我的部署中,我已经将BUCKET_NAME='Y'设置为环境变量,因此能够列出我的S3 BUCKET并在输出中获取'Y',并且不能将文件上载到'X'而不是'Y'是有意义的,因为AWS_BUCKET_NAME
在部署期间没有设置
但是错误
调用PutObject操作时发生了一个错误(AccessDenied):“拒绝访问”
具有误导性,并说明我没有正确的权限,而不是说明bucket可能不存在。请尝试aws sts get caller identity
,并确保调用由正确的主体进行。桶上有桶策略吗?请包括您以JSON格式设置的任何策略。如果您尝试使用AWS CLI复制文件,该策略是否有效?@JohnRotenstein yes如果它可以从AWS CLI工作,但不能从boto3工作,并且两者都使用相同的凭据,则错误可能出在您的Python代码中。你能在你的问题中加入一个可重复性最低的例子吗?@JohnRotenstein我已经编辑了我的问题。我应该注意到,这段代码已经在另一个环境中工作了几个月,我通过在docker compose文件中设置本地凭据来测试它们。旧的证书有效,但不幸的是新的证书无效。但我已经在容器内尝试了aws s3 cp,它正在工作