2017-05-23 1 views
1

boto3에 버킷 이름 목록을 전달하고 각 버킷에서 버전 관리를 활성화 한 다음 각 버킷에서 수명주기 정책을 사용하도록 설정하려고합니다.AWS : Boto3 S3 버전 관리/라이프 사이클 사용 - 액세스 거부

나는 aws configure를 수행했으며, 필요한 모든 권한을 가진 현재의 활성 사용자 프로파일과 두 개의 프로파일을 가지고있다. 내가 사용하고자하는 것은 "default"라는 이름입니다. 그 문제가되지 않습니다, 그래서 내 프로필이 모든 권한을 가지고

Traceback (most recent call last): 
    File "putVersioning.py", line 27, in <module> 
    bucketVersioning.enable() 
    File "/usr/local/lib/python2.7/dist-packages/boto3/resources/factory.py", line 520, in do_action 
    response = action(self, *args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/boto3/resources/action.py", line 83, in __call__ 
    response = getattr(parent.meta.client, operation_name)(**params) 
    File "/home/user/.local/lib/python2.7/site-packages/botocore/client.py", line 253, in _api_call 
    return self._make_api_call(operation_name, kwargs) 
    File "/home/user/.local/lib/python2.7/site-packages/botocore/client.py", line 557, in _make_api_call 
    raise error_class(parsed_response, operation_name) 
botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the PutBucketVersioning operation: Access Denied 

:이 프로그램을 실행할 때

import boto3 


# Create session 
s3 = boto3.resource('s3') 

# Bucket list 
buckets = ['BUCKET-NAME'] 

# iterate through list of buckets 
for bucket in buckets: 
    # Enable Versioning 
    bucketVersioning = s3.BucketVersioning('bucket') 
    bucketVersioning.enable() 

    # Current lifecycle configuration 
    lifecycleConfig = s3.BucketLifecycle(bucket) 
    lifecycleConfig.add_rule={ 
     'Rules': [ 
      { 
       'Status': 'Enabled', 
       'NoncurrentVersionTransition': { 
        'NoncurrentDays': 7, 
        'StorageClass': 'GLACIER' 
       }, 
       'NoncurrentVersionExpiration': { 
        'NoncurrentDays': 30 
       } 
      } 
     ] 
    } 


    # Configure Lifecycle 
    bucket.configure_lifecycle(lifecycleConfig) 


print "Versioning and lifecycle have been enabled for buckets." 

나는 다음과 같은 오류가 발생합니다. passing credentials에 대한 다른 조치가 필요합니까? 모두에게 감사드립니다!

+0

당신이 "프로필"을 쓸 때 당신은 "역할"또는 "사용자"를 뜻이어야한다 : 그러나, 나는 또한 변수를 인용하여 내 코드에 놓 쳤어 나타 납니까? 어느 특권에 "기본"권한이 있습니까? 그것이 역할이라면, 당신이 기계에서 돌아가고 있는지 확인 했습니까? 그것이 사용자 인 경우,'AWS_ACCESS_KEY_ID'와'AWS_SECRET_ACCESS_KEY'가 유효하고 활성화되어 있는지 확인 했습니까? – l0b0

+0

죄송합니다. 나는 명시하지 않았습니다. 내 프로필이 내 "사용자"프로필입니다. 그것은 유효하고 활동적이며, 나는 aws cli를 통해 모든 것을 할 수 있습니다. – flyingcars34

+0

실제 코드입니까? '버킷'이라는 버킷을 사용하셨습니까? –

답변

1

To set the versioning state, you must be the bucket owner.

위의 문은 의미 - 버전 관리를 가능하게 PutBucketVersioning 작업를 사용하려면 버킷의 소유자 여야합니다.

다음 명령을 사용하여 버킷 소유자를 확인하십시오. 버킷 소유자는 버전 관리 상태를 ENABLED/SUSPENDED으로 설정할 수 있습니다.

aws s3api get-bucket-acl --bucket yourBucketName 
0

좋아요, notionquest는 정확합니다.

bucketVersioning = s3.BucketVersioning('bucket') 

bucketVersioning = s3.BucketVersioning(bucket)