2013-06-03 7 views
16

모든 권한을 가진 사용자가 있습니다.Amazon S3 copyObject 권한

{ 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": "*", 
     "Resource": "*" 
    } 
    ] 
} 

aws-sdk-php-2를 사용하여 객체를 버킷에 넣거나 복사합니다. 개체가 나는 다음 스크립트를 실행하고있어 https://console.aws.amazon.com/s3를 통해 S3에 만든 경우

http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.S3.S3Client.html

넣어 코드 확인 후

   $client->putObject(array(
       'Bucket'  => 'kiosk', 
       'Key'  => 'test/orders/test.csv', 
       'SourceFile' => $sourcePath, 
      )); 

완벽하게 작동합니다.

Fatal error: Uncaught Aws\S3\Exception\AccessDeniedException: AWS Error Code: AccessDenied, Status Code: 403, AWS Request ID: XXX, AWS Error Type: client, AWS Error Message: Access Denied, User-Agent: aws-sdk-php2/2.2.1 Guzzle/3.3.1 curl/7.19.7 PHP/5.4.13 thrown in phar:///usr/share/pear/AWSSDKforPHP/aws.phar/src/Aws/Common/Exception/NamespaceExceptionFactory.php on line 89 
: 업로드 파일을 수동으로 내가 복사하려고 다른 오류를 참조 console.aws.amazon.com/s3

Fatal error: Uncaught Aws\S3\Exception\S3Exception: AWS Error Code: AllAccessDisabled, Status Code: 403, AWS Request ID: XXX, AWS Error Type: client, AWS Error Message: All access to this object has been disabled, User-Agent: aws-sdk-php2/2.2.1 Guzzle/3.3.1 curl/7.19.7 PHP/5.4.13 thrown in phar:///usr/share/pear/AWSSDKforPHP/aws.phar/src/Aws/Common/Exception/NamespaceExceptionFactory.php on line 89 

후 :

 $result = $client->copyObject(array(
     'Bucket' => 'kiosk', 
     'CopySource' => 'test/orders/test.csv', 
     'Key' => 'test/test.csv', 
    )); 

그리고 치명적인 오류를 받고 있어요

console.aws.amazon.com/s3을 통해 파일 및 폴더에 대한 사용 권한을 설정하려고합니다. 피부 : 모든 사용자, 열기/다운로드 권한 및 편집 권한보기

하지만 여전히 같은 오류입니다.

+0

S3에서 개체에 액세스하려고 할 때 같은 오류 메시지가 나타납니다 ... 답변을 찾았습니까? – insanepaul

+0

이 문제가있는 다른 모든 사람들은 내 결심을 공유 할 것이라고 생각했습니다. 내 문제는 한 사용자 계정으로 파일을 업로드하고 다른 사용자와 함께 파일 복사를 시도하여 액세스 거부 오류가 발생했기 때문입니다. –

답변

22

문제가 무엇인지 알아 냈습니다. AWS 초보자 였기 때문에 사용자가 설정 한 각 정책에 따라 사용중인 서비스를 명확하게 허용해야한다는 사실을 깨닫기까지는 조금 어려움을 겪었습니다.

이 경우 사용자를 S3에 허용하도록 설정하지 않았습니다.

IAM을 실행 한 다음 goto 사용자로 이동하고 사용중인 자격 증명이있는 특정 사용자를 클릭하십시오. 권한 탭을 클릭 한 다음 사용자 정책 첨부를 클릭하고 정책 템플릿 선택에서 S3 정책을 찾습니다. 이렇게하면 문제가 해결됩니다.

희망 하시겠습니까?

+1

나는 AWS를 얻었지만 여전히 오류 코드 : AccessDenied 오류 유형 : 클라이언트 모든 포인터하시기 바랍니다 – mithra

30

나는 이것이 오래된 질문이라는 것을 알고 있지만, 나는 레거시 프로젝트 작업을하면서 최근에 같은 문제에 부딪혔다.

$this->client->copyObject([ 
    'Bucket'  => $this->bucket, 
    'CopySource' => $file, 
    'Key'   => str_replace($source, $destination, $file), 
]); 

내 다른 S3 통화의 모든

copyObjectACCESS DENIED 오류가 발생 계속을 제외했다. 약간 파기 후에, 나는 why를 마침내 계산했다. 난 그냥 키를 전달하고 만들고 있었다

AWS v2 SDK CopySource Documentation

버킷이 전달되는 것을 가정은 소스 및 대상 둘 다 사용하는 것이 무엇이었다. 잘못된 가정이라고 밝혀졌습니다. 소스 은 접두사가 붙은 버킷 이름이이어야합니다. 여기

내 솔루션했다 : 그것은 당신의 키의 첫 번째 부분은 생각하기 때문에 "액세스가 거부되었습니다"라는

$this->client->copyObject([ 
    'Bucket'  => $this->bucket, 
    // Added the bucket name to the copy source 
    'CopySource' => $this->bucket.'/'.$file, 
    'Key'   => str_replace($source, $destination, $file), 
]); 

/폴더는 정말 돈 실제로 존재하지 않는 버킷의 이름 또는 에 대한 액세스 권한이 없습니다.

소수의 사람들을 돕는 희망!

+2

aws cli'aws s3api copy-object 명령을 사용할 때와 같은 일이 발생합니다. '--bucket' 인수에 대해 지정했지만 동일한 버킷 내에서 복사하는 경우에도 버킷 이름을'--key' 인수의 일부로 다시 제공해야합니다. –