Как настроить AWS IAM, чтобы пользователь мог загружать некоторые папки / префиксы из корзины, но не другие? - PullRequest
0 голосов
/ 08 апреля 2020

Нам нужно настроить политику IAM в Amazon Web Services, чтобы позволить кому-либо использовать CLI (интерфейс командной строки) для загрузки объектов из определенных папок / с префиксом, но не из других. Например, если наше ведро называлось "companybucket", у нас есть три папки / префиксы:

  • companybucket / яблок
  • companybucket / апельсинов
  • companybucket / bananas

Нам нужен внешний пользователь, чтобы иметь возможность загружать объекты в папки «яблоки» и «бананы», но не апельсины.

Пока что мы создали следующую политику IAM чтобы начать работу с «яблоками»

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:GetLifecycleConfiguration",
                "s3:GetBucketTagging",
                "s3:GetInventoryConfiguration",
                "s3:GetObjectVersionTagging",
                "s3:ListBucketVersions",
                "s3:GetBucketLogging",
                "s3:ListBucket",
                "s3:GetAccelerateConfiguration",
                "s3:GetBucketPolicy",
                "s3:GetObjectVersionTorrent",
                "s3:GetObjectAcl",
                "s3:GetEncryptionConfiguration",
                "s3:GetBucketObjectLockConfiguration",
                "s3:GetBucketRequestPayment",
                "s3:GetAccessPointPolicyStatus",
                "s3:GetObjectVersionAcl",
                "s3:GetObjectTagging",
                "s3:GetMetricsConfiguration",
                "s3:GetBucketPublicAccessBlock",
                "s3:GetBucketPolicyStatus",
                "s3:ListBucketMultipartUploads",
                "s3:GetObjectRetention",
                "s3:GetBucketWebsite",
                "s3:GetBucketVersioning",
                "s3:GetBucketAcl",
                "s3:GetObjectLegalHold",
                "s3:GetBucketNotification",
                "s3:GetReplicationConfiguration",
                "s3:ListMultipartUploadParts",
                "s3:GetObject",
                "s3:GetObjectTorrent",
                "s3:DescribeJob",
                "s3:GetBucketCORS",
                "s3:GetAnalyticsConfiguration",
                "s3:GetObjectVersionForReplication",
                "s3:GetBucketLocation",
                "s3:GetAccessPointPolicy",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::companybucket/apples",
                "arn:aws:s3:::companybucket/apples/*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:GetAccessPoint",
                "s3:GetAccountPublicAccessBlock",
                "s3:ListAllMyBuckets",
                "s3:ListAccessPoints",
                "s3:ListJobs",
                "s3:HeadBucket"
            ],
            "Resource": "*"
        }
    ]
}

Затем на веб-сайте консоли AWS мы перешли к IAM (управление идентификацией и доступом) >> Пользователи >> выбрали нужного пользователя> > вкладка прав доступа >> напрямую прикрепила политику к пользователю

Затем пользователь выполняет в CLI следующую команду:

aws s3 sync s3://companybucket/apples  MYFILES 

Появляется следующая ошибка: «Произошла ошибка (AccessDenied) при вызове операции ListObjectsV2: доступ запрещен "

Что мы делаем неправильно? Любая помощь будет принята с благодарностью, спасибо.

1 Ответ

0 голосов
/ 08 апреля 2020

Следующий подход был успешным для нас, чтобы позволить пользователю AWS, настроенному в IAM, загружать файлы / объекты из некоторых (но не всех) папок в сегменте.

FIRST , настройте следующую политику в IAM.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowStatement01",
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::companybucket"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:prefix": [
                        "",
                        "apples",
                        "bananas"
                    ]
                }
            }
        },
        {
            "Sid": "AllowStatement02",
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::companybucket"
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "apples/*",
                        "bananas/*"
                    ]
                }
            }
        },
        {
            "Sid": "AllowStatement03",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::companybucket/apples/*",
                "arn:aws:s3:::companybucket/bananas/*"
            ]
        }
    ]
}

SECOND , присоедините вновь созданную политику непосредственно к пользователю в IAM.

THIRD , попросите пользователя настроить локальную папку уровня root с именем MYFILES, а затем введите следующую команду в CLI (интерфейс командной строки):

aws s3 sync s3://companybucket/apples MYFILES 
...