Comment puis-je mettre l'objet à amazon s3 en utilisant presigned url?

Je suis en train d'utiliser signé url de télécharger des images vers un compartiment s3. Voici mon seau politique:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::12345678:user/myuser",
                    "arn:aws:iam::12345678:root"
                ]
            },
        "Action": [
                "s3:List*",
                "s3:Put*",
                "s3:Get*"
            ],
            "Resource": [
                "arn:aws:s3:::myBucket",
                "arn:aws:s3:::myBucket/*"
            ]
        }
    ]
}

Je suis à la génération de la signature de l'url du serveur comme suit:

var aws = require('aws-sdk');
aws.config = {
    accessKeyId: myAccessKeyId,
    secretAccessKey: mySecretAccessKey
};

var s3 = new aws.s3();
s3.getSignedUrl('putObject', {
    Bucket: 'myBucket',
    Expires: 60*60,
    key: 'myKey'
}, function (err, url) {
    console.log(url);
});

- Je obtenir de l'url. Mais quand j'ai essayer de mettre un objet que j'obtiens l'erreur suivante:

<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>FXXXXXXXXX</RequestId>
    <HostId>fXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</HostId>
</Error>

Mise à jour de 1

Ici est myuser politique:

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Sid": "",
        "Effect": "Allow",
        "Principal": {
            "AWS": [
                "arn:aws:iam::2xxxxxxxxxxx:user/myuser",
                "arn:aws:iam::2xxxxxxxxxxx:root"
            ]
        },
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::myBucket",
            "arn:aws:s3:::myBucket/*"
        ]
    }
  ]
}

Mise à jour 2
Je peux télécharger uniquement lorsque l'option suivante est définie. Je ne comprends pas qui est l'utilisation de seau de la politique si seulement la sélection manuelle de l'autorisation de travail.

Comment puis-je mettre l'objet à amazon s3 en utilisant presigned url?

Mise à jour 3

Le code suivant fonctionne. Maintenant, le seul problème est la signature de l'url

 #!/bin/bash

 file="$1"

 bucket="mybucket"
 resource="/${bucket}/${file}"
 contentType="image/png"
 dateValue=`date -R`
 stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"
 s3Key="AKxxxxxxxxxxxxxxxxx"
 s3Secret="/Wuxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret}     -binary | base64`
 curl -X PUT -T "${file}" \
   -H "Host: ${bucket}.s3.amazonaws.com" \
   -H "Date: ${dateValue}" \
   -H "Content-Type: ${contentType}" \
   -H "Authorization: AWS ${s3Key}:${signature}" \
   https://${bucket}.s3.amazonaws.com/${file}
  • Je suppose myAccessKeyId et mySecretAccessKey appartiennent tous les deux à myuser?
  • Oui, ils sont de l'utilisateur
  • Vous téléchargez un fichier nommé "maclé" lorsque vous générer l'url pour "maclé", à droite?
  • pas nécessairement. le fichier est renommé pour maclé après le téléchargement de s3. Le problème n'est pas le nom ici. le problème, c'est la permission. Les uploads de fichier lorsque j'ai mis la permission à tout le monde, et l'accès est refusé lorsque je n'ai pas, quel que soit mon seau d'utilisateur ou de la politique
  • Je vois. Je ne pense pas que vous auriez besoin de "Principal" est l'utilisateur de la politique, il est joint à l'utilisateur de toute façon. Je vais essayer de joindre à l'utilisateur une S3 à part entière de la politique d'accès sélectionné dans la liste et essayez de télécharger un fichier avec ses clés à l'aide d'un outil comme la Chicouté d'éviter toute possibilité de surveillance avec le code ou le manuel de politiques. Une fois que vous pouvez télécharger manuellement les fichiers que je voudrais essayer le presigned url.
  • ok. permettez-moi d'essayer ceux de la première et parvenir jusqu'à vous. Merci. 🙂
  • Veuillez vérifier ma nouvelle mise à jour. Le final de mettre le code fonctionne. C'est pourquoi la politique est correcte. Je suis complètement ignorant ce qu'est le problème.

InformationsquelleAutor Pravin | 2016-03-04