64 votes

Quelle est la cause du refus d'accès lors de l'utilisation du cliquet aws pour télécharger depuis Amazon S3 ?

Je suis vraiment en train d'essayer de comprendre ce que je manque ici. J'aimerais faire en sorte qu'un utilisateur IAM puisse télécharger des fichiers à partir d'un seau S3 - sans rendre les fichiers totalement publics - mais l'accès m'est refusé. Si quelqu'un peut trouver ce qui ne va pas, je serai ravi.

Ce que j'ai fait jusqu'à présent :

  • Création d'un utilisateur appelé mon-utilisateur (pour les besoins de l'exemple)
  • Généré les clés d'accès pour l'utilisateur et les mettre dans ~/.aws sur une instance EC2
  • Création d'une politique de seau qui, je l'espère, accorde l'accès à mon-utilisateur.
  • J'ai lancé la commande aws s3 cp --profile my-user s3://my-bucket/thing.zip .

Politique des seaux :

{
  "Id": "Policy1384791162970",
  "Statement": [
    {
      "Sid": "Stmt1384791151633",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/my-user"
      }
    }
  ]
}

Le résultat est A client error (AccessDenied) occurred: Access Denied bien que je puisse télécharger en utilisant la même commande et les clés d'accès par défaut (compte root ?).

J'ai également essayé d'ajouter une politique d'utilisateur. Bien que je ne sache pas pourquoi cela serait nécessaire, j'ai pensé que cela ne ferait pas de mal, alors j'ai attaché ceci à mon-utilisateur.

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

Mêmes résultats.

43voto

Sergio Points 556

Je me posais aussi la question, mais j'ai trouvé une réponse ici. https://stackoverflow.com/a/17162973/1750869 qui a aidé à résoudre ce problème pour moi. Je répète la réponse ci-dessous.


Vous n'êtes pas obligé d'ouvrir les autorisations à tout le monde. Utilisez les politiques de godet ci-dessous sur la source et la destination pour copier d'un godet d'un compte à un autre en utilisant un utilisateur IAM.

Godet à copier depuis - SourceBucket

Godet à copier - DestinationBucket

ID du compte AWS source - XXXX-XXXX-XXXX

Utilisateur IAM source - src-iam-user

La politique ci-dessous signifie que l'utilisateur IAM - XXXX-XXXX-XXXX:src-iam-user a des privilèges s3:ListBucket et s3:GetObject sur SourceBucket/* et s3:ListBucket et s3:PutObject sur DestinationBucket/*.

Sur le SourceBucket, la politique devrait être la suivante :

{
"Id": "Policy1357935677554",
"Statement": [
    {
        "Sid": "Stmt1357935647218",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::SourceBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
    },
    {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:GetObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: SourceBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
   }
]
}

Sur le DestinationBucket, la politique doit être la suivante :

{
"Id": "Policy1357935677554",
"Statement": [
    {
        "Sid": "Stmt1357935647218",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: DestinationBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
    },
    {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:PutObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: DestinationBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
   }
]
}

La commande à exécuter est s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1

16voto

zjor Points 261

Lorsque j'ai été confronté au même problème, il s'est avéré qu'AWS exigeait que le cryptage côté serveur soit activé. La commande suivante a donc fonctionné avec succès pour moi :

aws s3 cp test.txt s3://my-s3-bucket --sse AES256

6voto

Robin Charlton Points 180

Même si vos politiques IAM sont configurées correctement, vous pouvez toujours obtenir une erreur du genre An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied en raison des exigences de l'authentification multifactorielle (MFA) sur vos informations d'identification. Ces problèmes peuvent vous prendre au dépourvu, car si vous vous êtes déjà connecté à la console AWS, il semblera que vos informations d'identification fonctionnent correctement, et le message d'erreur "permission refusée" du cli aws n'est pas particulièrement utile.

Il existe déjà de bonnes instructions sur la façon de configurer le MFA avec aws cli :

En gros, vous devez obtenir l'adresse de votre dispositif MFA et l'envoyer avec le code de votre dispositif pour obtenir un jeton temporaire.

5voto

Andrew Points 51

Je ne recommande pas l'option "Tout utilisateur AWS authentifié" mentionnée par James.

Ce faisant, vous ajoutez une ACL au niveau du seau qui permet à tout compte AWS (et pas seulement à vos utilisateurs IAM) de lister/supprimer/modifier les ACL pour ce seau.

c'est-à-dire lecture/écriture publique pour toute personne possédant un compte aws.

3voto

James Dunmore Points 131

J'ai réussi à résoudre ce problème sans avoir à écrire des politiques - à partir de la console S3 (interface web), j'ai sélectionné le seau et dans l'onglet des permissions, j'ai choisi "Any Authenticated AWS User" et j'ai coché toutes les cases.

UPDATE : comme indiqué dans les commentaires "Any Authenticated AWS User" ne concerne pas seulement les utilisateurs de votre compte, mais tous les utilisateurs authentifiés par AWS, à utiliser avec précaution.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X