Amazon S3 permission de copyObject

j'ai l'utilisateur avec toutes les permissions.

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

j'utilise aws-sdk-php-2 pour mettre et copier des objets dans un seau.

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

Mettre le code fonctionne parfaitement

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

après vérification si l'objet créé sur S3 via https://console.aws.amazon.com/s3 j'exécute le script suivant.

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

Et je suis irrécupérable erreur:

Fatal error: Uncaught AwsS3ExceptionS3Exception: 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

Après avoir télécharger le fichier manuellement console.aws.amazon.com/s3 je vois d'erreur lors de la tentative de copie:

Fatal error: Uncaught AwsS3ExceptionAccessDeniedException: 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

j'essaie aussi de définir les permissions sur le fichier et le dossier via console.aws.amazon.com/s3: Titulaire: tout le monde, ouvrir / télécharger et voir la Permission et éditer la Permission

Mais toujours la même erreur.

20
demandé sur Dawny33 2013-06-03 19:22:21

2 réponses

je sais que c'est une vieille question, mais j'ai rencontré le même problème récemment en travaillant sur un projet de legs.

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

tous mes autres appels S3 ont fonctionné sauf copyObject a continué à jeter un ACCÈS REFUSÉ erreur. Après quelques recherches, j'ai finalement compris pourquoi.

AWS v2 SDK CopySource Documentation

je passais juste la clé et faisant l'hypothèse que le seau passé était ce que les deux la source et la destination. S'avère que c'est une hypothèse erronée. La source avoir le nom du seau préfixé.

voici ma solution:

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

Il me dit "Accès Refusé" parce qu'il pense que la première partie de votre clé/dossier est en fait le nom du seau qui n'existe pas ou vous n'avez pas accès.

espérons que cela aide quelques personnes!

44
répondu Jeremy Harris 2016-08-11 17:57:04

J'ai découvert quel est le problème ici; étant un internaute novice de L'AWS j'ai lutté un peu ici jusqu'à ce que je réalise que chaque politique pour les utilisateurs que vous définissez doit autoriser clairement le service que vous utilisez.

dans ce cas, je n'avais pas paramétré l'utilisateur pour qu'il puisse entrer dans S3.

Goto IAM puis goto utilisateurs et cliquez sur l'utilisateur particulier qui possède les justificatifs d'identité que vous utilisez. De là, allez dans L'onglet Autorisations, puis cliquez sur Joindre la Politique de L'Utilisateur et trouvez la Politique S3 sous la Politique select. modèle. Cela devrait résoudre votre problème.

j'Espère que ça aide!

24
répondu Petrogad 2013-08-31 00:03:28