Существует ли политика S3 для ограничения доступа только для просмотра / доступа к одному сегменту? - PullRequest
106 голосов
/ 07 июля 2011

У меня есть простая корзина, которая выглядит как images.mysite.com на моем S3 и других корзинах, содержащих резервные копии и т. Д.

Я хочу разрешить конкретному пользователю иметь возможность доступа к корзине images.mysite.com по порядкузагружать изображения.Тем не менее, я не хочу, чтобы он видел другие ведра;даже то, что они существуют.

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

Ответы [ 22 ]

1 голос
/ 11 сентября 2015

Мне удалось заставить работать следующее. Имелось ввиду, что перечисление других сегментов получило сообщение «Отказано в доступе». Но я все еще мог видеть желаемую корзину, если подключился с именем корзины, заданным как путь.

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

Я использовал Cyberduck для проверки этого соединения.

1 голос
/ 04 января 2019

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

Например: s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=обзор

{
  "Statement": [
    {
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Action": [
        "s3:PutObject",
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname*"
      ]
    },

  ],
  "Version": "2012-10-17"
}
1 голос
/ 03 октября 2017

Хотя невозможно ограничить действие s3:ListAllMyBuckets определенными сегментами, в качестве обходного пути вы можете отправить им Консольный URL для конкретного сегмента, например,

Источник: Ограничение списка сегментов S3 из консоли S3

Для этого вам необходимо указать следующий документ политики для данного пользователя или группы:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1",
                "arn:aws:s3:::my-bucket-2"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1/*",
                "arn:aws:s3:::my-bucket-2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

Где my-bucket-1 и my-bucket-2 - ваши корзины для доступа на чтение и запись.

Связанный:

0 голосов
/ 24 мая 2016

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

Следующая политика применяется к группе IAM, и все пользователи находятся в этой группе. Вам нужно взять aws:userid и сделать в папке подпапку с тем же именем.

Идентификатор пользователя может быть принят: aws iam get-user --user-name "user_name_for_folder_access":

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name/${aws:userid}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name"
            ]
        }
    ]
}
0 голосов
/ 23 сентября 2018

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

Я решил попросить клиента явно использовать имя корзины.

0 голосов
/ 31 июля 2018
  • Создайте пользователя.
  • Нажмите на созданного пользователя в разделе IAM Management Screen.
  • Нажмите, чтобы добавить разрешения.
  • нажмите Прикрепить существующие политики напрямую.
  • нажмите на кнопку создания политики.
  • выберите json, вставьте ниже json, замените имя_сервера именем вашего сегмента.
  • Это позволяет конкретному пользователю просматривать, размещать и получать объекты только этого сегмента.

{

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

}

0 голосов
/ 05 сентября 2014
0 голосов
/ 18 октября 2017

Хорошее простое решение, которое мы придумали - заблокировать пользователя для входа в корневой каталог. Таким образом, они должны войти в систему с удаленным путем к нужной папке.

 {
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::folder-name*",
        "Condition": {}
    }
]
}
0 голосов
/ 05 мая 2017

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

 {    

"Statement": [    

{
    "Effect": "Allow",
    "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:GetObjectAcl",
        "s3:PutObjectAcl",
        "s3:ListBucket",
        "s3:GetBucketAcl",
        "s3:PutBucketAcl",
        "s3:GetBucketLocation"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",
    "Condition": {}
},
{
    "Effect": "Allow",
    "Action": "s3:ListAllMyBuckets",
    "Resource": "*",
    "Condition": {}
},
{
    "Effect": "Deny",
    "Action": [
        "s3:DeleteBucket",
        "s3:DeleteBucketPolicy",
        "s3:DeleteBucketWebsite",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",    

    "Condition": {}    

}
]
}      
0 голосов
/ 11 июня 2015

Решение ниже работает для меня. Я хотел, чтобы политика предоставила доступ определенному пользователю my_iam_user на определенное ведро my-s3-bucket .

Эта политика позволяет моему пользователю перечислять, удалять, получать и помещать файлы в определенную корзину s3.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket"
        },
        {
            "Sid": "AddDeleteFiles",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket/*"
        }
    ]
}
...