web-dev-qa-db-fra.com

Autorisations de compartiment AWS S3 - Accès refusé

J'essaie de me donner la permission de télécharger des fichiers existants dans un compartiment S3. J'ai modifié la stratégie relative aux compartiments, comme suit:

        {
        "Sid": "someSID",
        "Action": "s3:*",
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::bucketname/AWSLogs/123123123123/*",
        "Principal": {
            "AWS": [
                "arn:aws:iam::123123123123:user/myuid"
            ]
        }
    }

Je crois comprendre que l’ajout à la politique devrait me donner tous les droits sur "nom de compartiment" pour mon compte "myuid", y compris tous les fichiers déjà présents dans ce compartiment. Cependant, des erreurs d'accès avec accès refusé continuent à apparaître lorsque j'essaie de télécharger l'un de ces fichiers via le lien qui apparaît dans la console.

Des pensées?

21
David

David , vous avez raison, mais j’ai trouvé qu’en plus de ce que bennie a dit ci-dessous, vous devez également autoriser la vue (ou l’accès que vous souhaitez) aux "utilisateurs authentifiés" .enter image description here

Mais une meilleure solution pourrait être d’éditer la stratégie de l’utilisateur pour accorder simplement l’accès au compartiment:

{
   "Statement": [
    {
      "Sid": "Stmt1350703615347",
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::mybucket/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": ["arn:aws:s3:::mybucket"],
      "Condition": {}
    }
  ]
}

Le premier bloc accorde toutes les autorisations S3 à tous les éléments du compartiment. Le second bloc accorde l’autorisation de liste sur le compartiment lui-même.

15
Karl Wilbur

Changez la ressource arn:aws:s3:::bucketname/AWSLogs/123123123123/* en arn:aws:s3:::bucketname/* pour avoir tous les droits sur le nom de compartiment

6
bennie j

Étape 1

Cliquez sur le nom de votre compartiment et sous l'onglet autorisations, assurez-vous que l'option Bloquer les nouvelles stratégies de gestion publique est désactivée

 enter image description here

Étape 2

Ensuite, vous pouvez appliquer votre stratégie de compartiment  enter image description here

J'espère que cela pourra aider

5

Utilisez la méthode ci-dessous pour télécharger n'importe quel fichier sous une forme lisible par le public en utilisant TransferUtility dans Android.

transferUtility.upload(String bucketName, String key, File file, CannedAccessControlList cannedAcl)

Exemple

transferUtility.upload("MY_BUCKET_NAME", "FileName", your_file, CannedAccessControlList.PublicRead);
3
varotariya vajsi

Pour clarifier: ce n'est vraiment pas bien documenté, mais vous avez besoin de deux déclarations d'accès.

En plus de votre instruction qui autorise les actions à générer des ressources "arn: aws: s3 ::: bucketname/AWSLogs/123123123123/*", vous avez également besoin d'une deuxième instruction permettant à ListBucket de "arn: aws: s3 ::: bucketname", car en interne, le client Aws essaiera de répertorier le compartiment afin de déterminer son existence avant de lancer son action.

Avec la deuxième déclaration, cela devrait ressembler à:

"Statement": [
    {
        "Sid": "someSID",
        "Action": "ActionThatYouMeantToAllow",
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::bucketname/AWSLogs/123123123123/*",
        "Principal": {
            "AWS": [
                "arn:aws:iam::123123123123:user/myuid"
            ]
    },
    {
        "Sid": "someOtherSID",
        "Action": "ListBucket",
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::bucketname",
        "Principal": {
            "AWS": [
                "arn:aws:iam::123123123123:user/myuid"
            ]
    }
]

Remarque: Si vous utilisez IAM, ignorez la partie "Principal".

2
chaqke

Allez à ce link et générez une politique. Dans le champ Principal, donnez * 

Dans la Actions, définissez le Get Objects 

Donnez la ARN comme arn:aws:s3:::<bucket_name>/*

Ajoutez ensuite une instruction, puis générez une stratégie. Vous obtiendrez un fichier JSON, puis copiez-le et collez-le dans la stratégie. 

Pour plus de détails, allez ici.

0
Pronoy Mukherjee

pour afficher le site web statique en s3:

 unckeched blocking bucket public

Ce sont les politiques de seau:

{
  "Version":"2012-10-17",
  "Statement":[{
  "Sid":"PublicReadGetObject",
    "Effect":"Allow",
  "Principal": "*",
  "Action":["s3:GetObject"],
  "Resource":["arn:aws:s3:::example-bucket/*"
  ]
  }
]
}