Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 调用PutBucketAcl操作时出错(InvalidArgument):未知_Amazon S3_Boto3_Botocore - Fatal编程技术网

Amazon s3 调用PutBucketAcl操作时出错(InvalidArgument):未知

Amazon s3 调用PutBucketAcl操作时出错(InvalidArgument):未知,amazon-s3,boto3,botocore,Amazon S3,Boto3,Botocore,我在调用boto3.client的put_bucket_acl(**kwargs)方法来设置bucket acl时遇到了这个异常。(注:这是一桶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'], en

我在调用boto3.client的put_bucket_acl(**kwargs)方法来设置bucket acl时遇到了这个异常。(注:这是一桶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)
如果删除param AccessControlPolicy,它将成功运行

s3_client.put_bucket_acl(Bucket=test_bucket, ACL='private')
我是否以错误的方式调用此方法? 但《指南》也以同样的方式调用此方法:
想得到任何帮助。

可以将bucket acl设置为:

s3_client.put_bucket_acl(Bucket=test_bucket, AccessControlPolicy={...})
ACL和AccessControlPolicy是AccessControlList,参数AccessControlList只能是以下其中之一:ACL、AccessControlPolicy、Bucket、ContentMD5、GrantFullControl、GrantTread、GrantTreadACP、GrantWrite、GrantWriteACP。稍后我需要阅读botocore的代码,并找出CephS3和AmazonS3之间的差异。为阅读而思考