boto3 Доступ запрещен S3 put_object с правильными разрешениями - PullRequest
0 голосов
/ 11 октября 2018

Первый раз пользователь 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?

1 Ответ

0 голосов
/ 12 октября 2018

Это был просто случай, когда пользователь был создан, когда он был добавлен в пару групп.Администраторы и EC2MFA.Я не знал о последствиях этого, но предположил, что группа EC2MFA запретила доступ к API или CLI.Я предполагаю, что комбинация Политики на стороне пользователя и S3 достаточно безопасна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...