AWS-S3-创建存储桶策略-错误:访问被拒绝

时间:2019-06-29 22:13:50

标签: python amazon-s3

尝试创建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())

2 个答案:

答案 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

希望它会有所帮助(: