Создайте одного пользователя IAM для доступа только к определенной корзине S3

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

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


person Sruthin Kumar TK    schedule 11.06.2018    source источник
comment
Разрешение на просмотр списка имен сегментов не может быть ограничено возвратом только одного сегмента. Либо они могут перечислить все имена сегментов, либо ни одного имен сегментов. Однако вы можете ограничить разрешения внутри сегмента для каждого сегмента.   -  person John Rotenstein    schedule 12.06.2018


Ответы (5)


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

person marekful    schedule 11.06.2018
comment
Спасибо за ответ. Но, к сожалению, когда я использую s3 через клиент, я получил ошибку отказа в доступе - person Sruthin Kumar TK; 11.06.2018
comment
Попробуйте: `Resource: [arn: aws: s3 ::: YOURBUCKETNAME, arn: aws: s3 ::: YOURBUCKETNAME / *] - person John Rotenstein; 12.06.2018
comment
При доступе к S3 с помощью клиентской программы вы должны использовать ключ доступа API. Выберите пользователя в IAM и используйте «Создать ключ доступа» на вкладке «Учетные данные безопасности». - person marekful; 12.06.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 неограничен, просто чтобы убедиться, что он работает для вас (поскольку доступ кажется проблемой). После этого применить ограничения, ну понимаешь ... минимум привилегий и все.

person thisAaronMdev    schedule 11.06.2018
comment
@thisAronMdev, спасибо, но еще раз перечисляю все мои другие корзины также для этого пользователя IAM - person Sruthin Kumar TK; 11.06.2018
comment
@SruthinKumarTK, конечно, но после того, как они внесены в список, могут ли они просматривать содержимое других корзин или только содержимое той, к которой вы предоставили им доступ? - person thisAaronMdev; 11.06.2018
comment
@SruthinKumarTK, хорошо, обновил свой ответ с помощью рабочей политики, основанной на информации в URL-адресе, который я изначально связал. Я протестировал его, поэтому знаю, что он работает так, как вы хотите (по крайней мере, для меня). - person thisAaronMdev; 12.06.2018
comment
Я обновил свою политику следующим образом. При открытии Cyber-Duck я получаю сообщение об отказе в доступе - person Sruthin Kumar TK; 12.06.2018
comment
1) указали ли вы имя корзины как BUCKETNAME.s3.amazonaws.com в CyberDuck; 2) при создании политики вы обязательно прикрепили ее либо к пользователю, либо к группе / роли, с которой связан пользователь (а также пока отсоедините любые другие политики), 3) подтвердили ли вы, что идентификатор ключа доступа и секретный ключ доступа верны и действительны для пользователя? Если да на все вышеперечисленное, то я не могу придумать ничего другого, что могло бы быть неправильным, но кто-то другой мог бы. - person thisAaronMdev; 12.06.2018
comment
Спасибо @thisAaronMdev за ответ. Наконец, я создаю свою собственную политику. Я разместил здесь. - person Sruthin Kumar TK; 12.06.2018

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

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

Эта политика IAM позволит полностью контролировать все содержимое (также известное как в сегменте) без управления субресурсами сегмента 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).

person Sean Summers    schedule 06.08.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>"
            ]
        }
    ]
}
person Sruthin Kumar TK    schedule 12.06.2018
comment
Однако рад, что это работает для вас, есть ли причина, по которой вы используете две разные политики вместо простого выполнения `Effect: Deny, Action: s3: *, Resource: arn: aws: s3 ::: ‹MYotherBUCKET›`, поскольку похоже, это то, чего вы пытаетесь достичь? Если он работает так, как вы, то считайте это хорошим, но быть немного более кратким не повредит. - person thisAaronMdev; 12.06.2018
comment
Когда я использую как `Effect: Deny, Action: s3: *, Resource: arn: aws: s3 ::: ‹MYotherBUCKET›`, я получил ошибку отказа в доступе, поэтому я создаю две политики - person Sruthin Kumar TK; 12.06.2018

Недавно мне удалось заставить это работать с помощью Amazon документация. Ключевым моментом для меня было указать пользователю IAM на конкретную корзину, НЕ на консоль S3. Согласно документации, "Предупреждение. После изменения этих разрешений пользователь получает сообщение об ошибке" Доступ запрещен "при доступе к основной консоли Amazon S3. Ссылка на главную консоль аналогична следующей:

https://s3.console.aws.amazon.com/s3/home

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

https://s3.console.aws.amazon.com/s3/buckets/awsexamplebucket/ "

Моя политика ниже:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "Stmt1589486662000",
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::AWSEXAMPLEBUCKET",
            "arn:aws:s3:::AWSEXAMPLEBUCKET/*"
        ]
    }
]
}
person Josh Janjua    schedule 15.05.2020