Первый раз пользователь boto3.
У меня был пользователь с ACL S3FullAccess и я использовал следующий код, чтобы попытаться загрузить файл;он использует DataFrame pandas в качестве источника.
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, и они находятся в строке 604 файла client.py в boto3 - request_signer = self._request_signer
Итак, я исследовал SO, и, похоже, многим пришлось добавитьПолитический документ, поэтому я сделал это следующим образом:
{
"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?