尝试创建Amazon Web Services-S3存储桶策略,但是在运行脚本时出现以下错误。我的访问权限在哪里被拒绝?这个问题可能与我如何设置AWS配置
有关吗?Traceback (most recent call last):
File "C:\Users\*****\githubb\aws\s3operations.py", line 40, in <module>
print(create_bucket_policy())
File "C:\Users\Patrick\githubb\aws\s3operations.py", line 36, in create_bucket_policy
Policy=policy_string
File "C:\Users\Patrick\Python36\lib\site-packages\botocore\client.py", line 357, in _api_call
return self._make_api_call(operation_name, kwargs)
File "C:\Users\Patrick\Python36\lib\site-packages\botocore\client.py", line 661, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occur
red (AccessDenied) when calling the PutBucketPolicy operation: Access Denied
以下是我的脚本:
import boto3
import json
BUCKET_NAME ='patricksbucket'
def s3_client():
s3 = boto3.client('s3')
""":type : pyboto3.s3"""
return s3
def create_bucket(bucket_name):
return s3_client().create_bucket(
Bucket=bucket_name,
CreateBucketConfiguration={
'LocationConstraint': 'us-east-2'
}
)
def create_bucket_policy():
bucket_policy = {
"Vesrion": "2012-10-17",
"Statement":[
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action":["s3:*"],
"Resource":["arn:aws:s3:::patricksbucket/*"]
}
]
}
policy_string = json.dumps(bucket_policy)
return s3_client().put_bucket_policy(
Bucket=BUCKET_NAME,
Policy=policy_string
)
if __name__ == '__main__':
#print(create_bucket(BUCKET_NAME))
print(create_bucket_policy())
答案 0 :(得分:1)
在S3中设置权限可能有些棘手。有时我会遇到相同的问题,我需要花费很多时间才能使其正常工作。但是在大多数情况下,您必须设置正确的政策和权利。首先,您的保单中有错字:
"Vesrion": "2012-10-17",
^^^^^^^^^
可能未应用该策略。您应该在S3后端中进行检查。在那里,您可以更改并测试某些内容,然后再次进行测试。
答案 1 :(得分:1)
虽然主要与您的凭据或策略有关,但可能由于多种原因而发生这种情况。无论如何,您只需要遵循权限说明,如我在您的代码中看到的那样,说明如何使用通配符授予一切
Amazon Docs中的一个例子可以说明问题
"Action": "*"
"Action": "s3:*"
除了上述原因之外,另一个原因是您的凭据。例如,如果您使用AWS CLI
$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json
希望它会有所帮助(: