web-dev-qa-db-fra.com

J'ai besoin d'un utilisateur Amazon S3 avec un accès complet à un seul compartiment

J'ai un utilisateur foo avec les privilèges suivants (il n'est membre d'aucun groupe):

{
  "Statement": [
    {
      "Sid": "Stmt1308813201865",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::bar"
    }
  ]
}

Cet utilisateur semble cependant incapable de télécharger ou de faire quoi que ce soit jusqu'à ce que j'accorde un accès complet aux utilisateurs authentifiés (qui pourraient s'appliquer à n'importe qui). Cela ne permet toujours pas à l'utilisateur de modifier l'autorisation car boto génère une erreur après un téléchargement lorsqu'il essaie de faire key.set_acl('public-read').

Idéalement, cet utilisateur aurait un accès complet au compartiment bar et à rien d'autre, que fais-je de mal?

32
Kit Sunde

Vous devez accorder s3: ListBucket l'autorisation au compartiment lui-même. Essayez la politique ci-dessous.

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "S3:*",
      "Resource": "arn:aws:s3:::bar/*",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::bar",
      "Condition": {}
    }
  ]
}
40
cloudberryman

La réponse sélectionnée n'a pas fonctionné pour moi, mais celle-ci a:

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

Crédit: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-Amazon-iam/

20
Suman

Connaissez-vous AWS Policy Generator ?

8
Ryan Parman

Il existe une documentation AWS officielle sur Écriture de stratégies IAM: comment accorder l'accès à un compartiment Amazon S

Copiez et collez simplement la règle appropriée et remplacez la clé "Resource" par l'ARN de votre compartiment dans toutes les instructions.

Pour l'accès programmatique la politique doit être:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["s3:ListBucket"],
            "Resource": ["arn:aws:s3:::bar"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:DeleteObject"
            ],
            "Resource": ["arn:aws:s3:::bar/*"]
        }
    ]
}

Et pour l'accès à la console , l'accès doit être:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::bar*"
        },
        {
            "Effect": "Allow",
            "Action": ["s3:ListBucket"],
            "Resource": ["arn:aws:s3:::bar"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:DeleteObject"
            ],
            "Resource": ["arn:aws:s3:::bar/*"]
        }
    ]
}
2
Marcio Mazzucato
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                        "s3:GetBucketLocation",
                        "s3:ListAllMyBuckets"
                      ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::YOUR-BUCKET",
                "arn:aws:s3:::YOUR-BUCKET/*"
            ]
        }
    ]
}
0
Rishikesh

Si vous vous êtes arraché les cheveux parce que vous ne pouvez pas comprendre pourquoi Cyberduck n'est pas en mesure de définir des listes de contrôle d'accès d'objet mais qu'il fonctionne avec un autre client (comme Panic Transmit), voici la solution:

Vous devez ajouter s3:GetBucketAcl à votre liste d'actions, par exemple:

{
    "Statement": [
        {
            "Sid": "Stmt1",
            "Action": [
                "s3:GetBucketAcl",
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::your-bucket-name"
        }
    ]
}

Bien sûr, vous n'avez pas besoin de le faire si vous êtes moins restrictif avec s3:* mais je pense que c'est bon à savoir.

0
daniel

La réponse de @ cloudberryman est correcte mais j'aime que les choses soient aussi courtes que possible. Cette réponse peut être réduite à:

{  
   "Statement":[  
      {  
         "Effect":"Allow",
         "Action":"S3:*",
         "Resource":[  
            "arn:aws:s3:::bar",
            "arn:aws:s3:::bar/*"
         ]
      }
   ]
}
0
Sam Rueby

Autoriser les dossiers internes de compartiment en mentionnant comme ci-dessous dans la ressource, vous devez également donner l'autorisation de liste à tous les compartiments. Consultez l'exemple de politique ci-dessous,

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

Pour en savoir plus sur ce sujet, trouvez ceci article .

0
Karthik

Ça marche pour moi:

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListBucketMultipartUploads",
                "s3:ListBucketVersions"
            ],
            "Resource": "arn:aws:s3:::bucket_name_here"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:*Object*",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload"
            ],
            "Resource": "arn:aws:s3:::bucket_name_here/*"
        }
    ]
}
0
Vlad E. Borovtsov