Мне нужен пользователь Amazon S3 с полным доступом к одной корзине - PullRequest
31 голосов
/ 20 ноября 2011

У меня есть пользователь foo со следующими привилегиями (он не входит ни в одну группу):

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

Однако этот пользователь не может загружать или делать что-либо еще, пока я не предоставлю полный доступ аутентифицированным пользователям (что может относиться к любому). Это по-прежнему не позволяет пользователю изменять разрешение, так как выдает ошибку после загрузки, когда он пытается сделать key.set_acl('public-read').

В идеале этот пользователь должен иметь полный доступ к корзине bar и ничего больше, что я делаю не так?

Ответы [ 8 ]

40 голосов
/ 21 ноября 2011

Вам необходимо предоставить s3: ListBucket разрешение на саму корзину.Попробуйте политику ниже.

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "S3:*",
      "Resource": "arn:aws:s3:::bar/*",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::bar",
      "Condition": {}
    }
  ]
}
20 голосов
/ 21 ноября 2012

Выбранный ответ не работает для меня, но этот работал:

{
  "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:::*"
    }
  ]
}

Кредит: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam/

8 голосов
/ 05 октября 2012

Известно ли вам о Генераторе политик AWS ?

1 голос
/ 21 июня 2017

Официальная документация AWS на Написание политик IAM: как предоставить доступ к корзине Amazon S3

Просто скопируйте и вставьте соответствующее правило и замените ключ «Ресурс» на ARN вашего контейнера во всех операторах.

Для программного доступа политика должна быть:

{
    "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/*"]
        }
    ]
}

А для консольного доступа доступ должен быть:

{
    "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/*"]
        }
    ]
}
0 голосов
/ 21 июня 2019
{
    "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 голосов
/ 02 ноября 2017

@ Cloudberryman ответ правильный, но мне нравится делать вещи максимально короткими. Этот ответ может быть уменьшен до:

{  
   "Statement":[  
      {  
         "Effect":"Allow",
         "Action":"S3:*",
         "Resource":[  
            "arn:aws:s3:::bar",
            "arn:aws:s3:::bar/*"
         ]
      }
   ]
}
0 голосов
/ 23 ноября 2015

Если вы выдернули волосы, потому что не можете понять, почему Cyberduck не может установить объектные ACL, но работает с другим клиентом (например, Panic Transmit), вот решение:

Вывам нужно добавить s3:GetBucketAcl в ваш список действий, например:

{
    "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"
        }
    ]
}

Конечно, вам не нужно делать это, если вы менее ограничительны с s3:*, но я думаю, это полезно знать.

0 голосов
/ 25 января 2015

Это работает для меня:

{
    "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/*"
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...