Создайте одного пользователя IAM для доступа только к определенной корзине S3 - PullRequest
0 голосов
/ 11 июня 2018

У меня много ящиков S3 в моей учетной записи AWS.Но теперь, когда я создал пользователя IAM и новое хранилище S3, я хотел бы дать этому пользователю возможность доступа к новому хранилищу S3 с помощью клиента, такого как CyberDuck.

Я пытался создать так много политик.Но после этого этот пользователь также получил разрешение перечислять все мои другие группы.Как я могу дать доступ к списку и записи доступ к одной корзине S3?

Ответы [ 4 ]

0 голосов
/ 07 августа 2018

Согласно Справка Cyberduck / Howto / Amazon S3 , он поддерживает прямой ввод имени Bucket, как <bucketname>.s3.amazonaws.com.Если это возможно для используемого вами клиента, вам не нужны разрешения s3:ListAllMyBuckets.

Действие s должно быть сгруппировано по Resource s, которые ониcan parse ( Условия также потенциально различны для Действие ).

Эта политика IAM позволит полностью контролировать весь контент (он же в корзине *)1018 *) без управления подресурсами сегмента S3 (он же сегмента ):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "BucketOperations",
            "Effect": "Allow",
            "Action": "s3:ListBucket*",
            "Resource": "arn:aws:s3:::<bucketname>"
        },
        {
            "Sid": "ObjectOperations",
            "Effect": "Allow",
            "Action": [
               "s3:AbortMultipartUpload",
               "s3:ListMultipartUploads",
               "s3:DeleteObject*",
               "s3:GetObject*",
               "s3:PutObject*"
            ],
            "Resource": "arn:aws:s3:::<bucketname>/*"
        },
        {
            "Sid": "DenyAllOthers",
            "Effect": "Deny",
            "Action": "s3:*",
            "NotResource": [
               "arn:aws:s3:::<bucketname>",
               "arn:aws:s3:::<bucketname>/*"
            ]
        }
    ] 
}

Если вы специально не пытаетесь заблокировать пользователя IAM из всех возможных общедоступных S3Однако вы можете оставить «DenyAllOthers» Sid выключенным, не предоставляя пользователям дополнительных разрешений.

К вашему сведению, политика AWS ReadOnlyAccess автоматически присваивает s3:* всему, к чему она присоединена.Я рекомендую ViewOnlyAccess (который, к сожалению, предоставит s3:ListAllMyBuckets без DenyAllOthers).

0 голосов
/ 11 июня 2018

За это (https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/)

им нужно будет хотя бы перечислить все корзины.Но кроме этого здесь также приведен пример политики, которую я только вчера использовал для своей учетной записи, поэтому я могу подтвердить, что она работает.

Обновление Хорошо, я протестировали подтвердил с помощью CyberDuck, что следующая политика (разумеется, настроенная для вашей среды) не позволит пользователям просматривать все корневые сегменты и предоставит им доступ только к указанному вами сегменту:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowAllInBucket",
            "Action": [
                "s3:*"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::bucket-for-single-user"
        }
    ]
}

Просто убедитесь, что привы указываете путь в CyberDuck, который вы вводите как: bucket-for-single-user.s3.amazonaws.com.

Кроме того, только START без ограничений, как это, просто чтобы убедиться, что он работает для вас (так как доступ кбыть проблемой).После этого примените ограничения , знаете ли ... наименьшие привилегии и все.

0 голосов
/ 12 июня 2018

Создай свою политику и работай на меня.Пользователь IAM может просто перечислить все ведра.Но ничего не могу сделать на другом ведре.Пользователь может получить доступ к определенному сегменту только с правами чтения, записи, удаления файлов.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "<EXAMPLE_SID>",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::<MYBUCKET>"
        },
        {
            "Sid": "<EXAMPLE_SID>",
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*"
        },  {
            "Sid": "<EXAMPLE_SID>",
            "Effect": "Deny",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::<MYotherBUCKET>"
        },  {
            "Sid": "<EXAMPLE_SID>",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::<MYBUCKET>/*"
        }

    ] 
}

Затем добавьте эту политику и этому пользователю.Эта политика ограничит все типы операций перечисленными другими сегментами s3.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "<EXAMPLE_SID>",
            "Effect": "Deny",
            "Action": [
                "s3:PutAnalyticsConfiguration",
                "s3:GetObjectVersionTagging",
                "s3:CreateBucket",
                "s3:ReplicateObject",
                "s3:GetObjectAcl",
                "s3:DeleteBucketWebsite",
                "s3:PutLifecycleConfiguration",
                "s3:GetObjectVersionAcl",
                "s3:PutBucketAcl",
                "s3:PutObjectTagging",
                "s3:DeleteObject",
                "s3:GetIpConfiguration",
                "s3:DeleteObjectTagging",
                "s3:GetBucketWebsite",
                "s3:PutReplicationConfiguration",
                "s3:DeleteObjectVersionTagging",
                "s3:GetBucketNotification",
                "s3:PutBucketCORS",
                "s3:DeleteBucketPolicy",
                "s3:GetReplicationConfiguration",
                "s3:ListMultipartUploadParts",
                "s3:PutObject",
                "s3:GetObject",
                "s3:PutBucketNotification",
                "s3:PutBucketLogging",
                "s3:PutObjectVersionAcl",
                "s3:GetAnalyticsConfiguration",
                "s3:GetObjectVersionForReplication",
                "s3:GetLifecycleConfiguration",
                "s3:ListBucketByTags",
                "s3:GetInventoryConfiguration",
                "s3:GetBucketTagging",
                "s3:PutAccelerateConfiguration",
                "s3:DeleteObjectVersion",
                "s3:GetBucketLogging",
                "s3:ListBucketVersions",
                "s3:ReplicateTags",
                "s3:RestoreObject",
                "s3:GetAccelerateConfiguration",
                "s3:GetBucketPolicy",
                "s3:PutEncryptionConfiguration",
                "s3:GetEncryptionConfiguration",
                "s3:GetObjectVersionTorrent",
                "s3:AbortMultipartUpload",
                "s3:PutBucketTagging",
                "s3:GetBucketRequestPayment",
                "s3:GetObjectTagging",
                "s3:GetMetricsConfiguration",
                "s3:DeleteBucket",
                "s3:PutBucketVersioning",
                "s3:PutObjectAcl",
                "s3:ListBucketMultipartUploads",
                "s3:PutMetricsConfiguration",
                "s3:PutObjectVersionTagging",
                "s3:GetBucketVersioning",
                "s3:GetBucketAcl",
                "s3:PutInventoryConfiguration",
                "s3:PutIpConfiguration",
                "s3:GetObjectTorrent",
                "s3:ObjectOwnerOverrideToBucketOwner",
                "s3:PutBucketWebsite",
                "s3:PutBucketRequestPayment",
                "s3:GetBucketCORS",
                "s3:PutBucketPolicy",
                "s3:GetBucketLocation",
                "s3:ReplicateDelete",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::<MYotherBUCKET>/*",
                "arn:aws:s3:::<MYotherBUCKET>"
            ]
        }
    ]
}
0 голосов
/ 11 июня 2018

Сначала вы создаете Политику, чтобы разрешить доступ к одной корзине S3 (IAM -> Политики -> Создать политику).Вы можете использовать AWS Policy Generator (http://awspolicygen.s3.amazonaws.com/policygen.html),, он должен выглядеть примерно так:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1528735049406",
      "Action": [
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:HeadBucket",
        "s3:ListBucket",
        "s3:ListObjects",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::YOURBUCKETNAME"
    }
  ]
}

Сохраните политику и запишите имя, которое вы ей дали, затем перейдите в IAM -> Users и выберитенужного пользователя. На вкладке разрешений нажмите «Добавить разрешения», затем выберите «Прикрепить существующие политики непосредственно» вверху. Найдите свою политику по ее имени, поставьте галочку и завершите процесс.

...