web-dev-qa-db-fra.com

La copie s3 de l'AWS CLI échoue avec l'erreur 403, en essayant d'administrer un objet téléchargé par l'utilisateur

Essayer de copier un fichier d'un compartiment S3 sur ma machine locale:

aws s3 cp s3://my-bucket-name/audio-0b7ea3d0-13ab-4c7c-ac66-1bec2e572c14.wav ./

fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden 

Choses que j'ai confirmées:

  • J'utilise la version aws-cli/1.11.13 Python/3.5.2 Linux/4.4.0-75-generic botocore/1.4.70
  • La clé d'objet S3 est correcte. Je l'ai copié directement depuis l'interface Web S3.
  • AWS CLI est configurée avec des informations d'identification valides. J'ai généré une nouvelle paire clé/secret. J'ai supprimé le dossier ~/.aws avant de reconfigurer l'aws cli. L’interface Web IAM en ligne confirme que l’utilisateur spécifique d’Arn utilise bien S3 via l’interface CLI.
  • La stratégie gérée avec accès complet S3 est attribuée à l’utilisateur IAM, conformément à cet SO message . J'ai supprimé toutes les stratégies de ces utilisateurs, puis ajouté uniquement la stratégie gérée AWS appelée AdministratorAccess, qui inclut «S3, Accès complet, Toutes les ressources». Existe-t-il un moyen différent d'accorder l'accès via l'interface de ligne de commande? Je n'y croyais pas.

La politique de seau est destinée à accorder un large accès ouvert:

    {
        "Sid": "AdminAccess",
        "Effect": "Allow",
        "Principal": "*",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::my-bucket-name",
            "arn:aws:s3:::my-bucket-name/*"
        ]
    }

Comment ai-je téléchargé cet objet?

J'ai téléchargé cet objet à l'aide de la stratégie de téléchargement signé AWS Signature v4 à partir d'une application Web du navigateur client directement vers AWS.

8
Charney Kaye

En regardant les propriétés de l'objet, je vois que le propriétaire de l'objet est "anonyme" et que "anonyme" est également autorisé à accéder à cet objet.

Je crois que c'est pourquoi je ne suis pas capable d'accéder à cet objet (je suis authentifié). Exemple: étant donné que l'utilisateur "anonyme" dispose d'une autorisation complète, je peux accéder via GET à l'aide d'un navigateur Web. Cela fonctionne comme prévu. Le compartiment S3 sert au téléchargement de fichiers qui deviennent ensuite disponibles pour la consommation publique.

Ainsi, lorsque le fichier est POSTé avec la stratégie de téléchargement, le propriétaire résultant est "Anonymous".

Dans ce cas, acl=bucket-owner-full-control doit être utilisé lors du téléchargement de l'objet pour que le propriétaire du compartiment puisse contrôler l'objet . Ce faisant, le propriétaire sera toujours "Anonyme". Cependant, le propriétaire du compartiment (moi) en sera entièrement informé. permission et je devrais pouvoir accéder à l'objet après cela, via AWS CLI.

Notez que acl=ec2-bundle-read est un paramètre par défaut codé en dur dans le dernier kit SDK AWS. Voir https://github.com/aws/aws-sdk-Java/blob/7844c64cf248aed889811bf2e871ad6b276a89ca/aws-Java-sdk-ec2/src/main/Java/com/amazonaws/services/ec2/util/2 # L77

Il était nécessaire de copier S3UploadPolicy.Java dans mon propre code (il s’agit d’une petite classe d’utilitaires entièrement portable) et de le modifier pour pouvoir utiliser acl=bucket-owner-full-control. Et j'ai vérifié que cela permettait l'administration des objets téléchargés via AWS CLI.

2
Charney Kaye

Dans mon cas, l'erreur ci-dessus est apparue lorsque la machine qui tentait de contacter S3 avait l'heure du système était loin de celle actuelle . Définir une heure correcte a aidé.

0
pawel.uramowski

AWS S3 vous renverra Interdit (403), même si le fichier n'existe pas pour des raisons de sécurité ..___, veuillez vous assurer que vous avez indiqué le chemin s3 correct lors du téléchargement.

Vous pouvez en lire plus à ce sujet ici

0
tom

J'ai rencontré un problème d'autorisations similaire lorsque j'essayais de télécharger quelque chose que j'avais déjà téléchargé sur S3. Il s'avère que cela n'a rien à voir avec la stratégie bucket ni avec tout ce qui concerne la manière dont vos informations d'identification sont définies lors du téléchargement et la manière dont vous accordez des privilèges d'accès. Voir this pour plus d’informations sur plusieurs façons de résoudre le problème.

0
watsonic