Произошла ошибка (InvalidArgument) при вызове операции PutBucketAcl: неизвестно - PullRequest
0 голосов
/ 27 февраля 2019

Я получил это исключение при вызове метода put_bucket_acl (** kwargs) из boto3.client, чтобы установить ведро acl.(PS: это объект ceph вместо aws)


Мой код:

import boto3
import copy

s3_client = boto3.client('s3', 
        aws_access_key_id=s3_conf['ak'], 
        aws_secret_access_key=s3_conf['sk'], 
        endpoint_url=s3_conf["host"])
bucket_acl = s3.BucketAcl(test_bucket)
bucket_acl.grants.append(new_grants)
bucket_acl.put(ACL='private', AccessControlPolicy={'Grants': bucket_acl.grants, 'Owner': bucket_acl.owner})

Я также пробую Session.client:

session = Session(s3_conf["ak"], s3_conf["sk"])
s3 = session.resource("s3", endpoint_url=s3_conf["host"])
s3_client = session.client("s3", endpoint_url=s3_conf["host"])

rsp = s3_client.get_bucket_acl(Bucket=test_bucket)
old_access_control_policy = { 'Grants': copy.deepcopy(rsp['Grants']), 'Owner': copy.deepcopy(rsp['Owner']) }
new_access_control_policy = copy.deepcopy(old_access_control_policy)
new_access_control_policy['Grants'].append(new_grants)
s3_client.put_bucket_acl(Bucket=test_bucket, ACL='private', AccessControlPolicy=old_access_control_policy)

если я удаляю параметр AccessControlPolicy, он запускается успешно

s3_client.put_bucket_acl(Bucket=test_bucket, ACL='private')

Я вызываю этот метод неправильно?Но руководство также вызывает этот метод так же, как этот вызов: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.put_bucket_acl Думает о любой помощи.

1 Ответ

0 голосов
/ 05 марта 2019

Это нормально для установки ACL-корзины, например:

s3_client.put_bucket_acl(Bucket=test_bucket, AccessControlPolicy={...})

ACL и AccessControlPolicy - это AccessControlList, а параметр AccessControlList может быть только одним из: ACL, AccessControlPolicy, Bucket, ContentMD5, GrantFullControl, GrantRead, GrantReadACPGrantWrite, GrantWriteACP.Позже мне нужно прочитать код botocore и найти разницу между ceph s3 и amazon s3.Думайте для чтения.

...