首次使用boto3的用户。
我有一个使用ACL S3FullAccess的用户,并使用以下代码尝试上传文件;它使用pandas DataFrame作为源。
s3_client = boto3.client('s3')
io = StringIO()
df.to_csv(io)
response = s3_client.put_object(
Bucket=self.bucket,
Body=io,
Key=self.filename
)
这导致了这一回应
botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
因此,我检查了boto3是否从我的〜/ .aws / credentials文件中获取了秘密密钥和访问密钥,它们位于boto3的client.py的第604行上-request_signer = self._request_signer >
所以我在这里进行了SO的研究,似乎很多人都必须添加一个Policy文档,所以我这样做如下:
{
"Version": "2012-10-17",
"Id": "Policyxxx",
"Statement": [
{
"Sid": "Stmtx1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<12 digit id>:root"
},
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::<my-bucket>/*"
},
{
"Sid": "Stmtx6",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<12 digit id>:root"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::<my-bucket>"
}
]
}
我仍然遇到相同的错误,因此我将其添加到了put_object调用中,因为S3存储桶使用AES-256加密,我认为这仅是服务器端的,但是没有足够的想法,因此值得尝试。>
SSECustomerKey=os.urandom(32),
SSECustomerAlgorithm='AES256',
接下来,我删除了与SSE密钥相关的那些术语,意识到AES-256加密是服务器端的,不应影响我的访问。
然后,我尝试生成一对新的访问密钥,并使用它们来获得相同的结果。
是否有人知道我接下来会看什么,数百页的AWS文档中我缺少什么?
答案 0 :(得分:0)
这只是在创建用户时将他们添加到几个组中的一种情况。管理员和EC2MFA。我没有意识到这一点的含义,但是假设EC2MFA组阻止了API或CLI访问。我假设用户和S3端的Policy组合足够安全。