Подтвердить что ты не робот

Ограничить список ковшей для конкретного пользователя

Мне удалось создать пользовательскую политику, которая дает доступ только к определенному ведру, но после попытки всего (включая этот пост: Существует ли политика S3 для ограничения доступа к только видеть/получать доступ к одному ведру?).

Проблема: Я не могу ограничить список ведер до одного ведра. По целому ряду причин я не хочу, чтобы в листинге показывались какие-либо ведра, кроме указанных.

Я пробовал различные политики, но безрезультатно. Здесь моя последняя политика JSON, которая работает с ограничениями операций, но не перечисляет:

{
    "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:ListAllMyBuckets",
            "s3:ListBucket",
            "s3:GetBucketLocation"
        ],
        "Resource": "arn:aws:s3:::*"
    },
    {
        "Effect": "Deny",
        "Action": [
            "s3:ListBucket"
        ],
        "NotResource": [
            "arn:aws:s3:::acgbu-acg",
            "arn:aws:s3:::acgbu-acg/*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::acgbu-acg",
            "arn:aws:s3:::acgbu-acg/*"
        ]
    }
]
}

Любая помощь будет принята с благодарностью. Я начинаю задаваться вопросом, возможно ли это.

4b9b3361

Ответ 1

В настоящее время невозможно ограничить список ведер показов только одним ведром.

Консоль AWS полагается на действие ListAllMyBuckets, чтобы получить список ведер, принадлежащих пользователю, но возвращаемый список не может быть ограничен, используя имя ресурса Amazon (или ARN; единственное ARN, которое разрешено для ListAllMyBuckets arn:aws:s3:::*).

Это ограничение не ясно объяснено в официальных документах AWS, но ListAllMyBuckets - это вызов API уровня сервиса (он также называется службой GET в REST API), а не API API уровня ковша и связанный с ним ARN в Политика IAM относится к службе S3 не к определенному ведру.

Для возможных обходных решений см. этот ответ в StackOverflow:

Ответ 2

Бесплатный "S3 Browser" (это работает в моей версии 3-7-5) позволяет пользователям с соответствующими разрешениями "Добавить внешний ведро" для учетной записи, все, что им нужно знать, - это имя ведра. Это позволяет им "видеть" их ведро и содержимое (и то, что когда-либо было им дано внутри этого ведра), они не будут видеть ни одного из других ковшей.

Чтобы заставить ковш "играть хорошо" с поведением браузера S3, я предлагаю следующую политику IAM для пользователя или группы:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:GetBucketAcl"
      ],
      "Resource": "arn:aws:s3:::acgbu-acg"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::acgbu-acg/*"
    }
  ]
}

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

Ответ 3

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

В любом случае, похоже, Google пользуется, поэтому пусть немного обогатит его:
Если вам необходимо ограничить доступ к ведру некоторым пользователям (пользователям), выполните следующие действия:


Сначала получите идентификаторы пользователя, которому вы хотите предоставить права.
Это может быть достигнуто с помощью команды awscli aws iam list-users
Эти идентификаторы выглядят следующим образом: "AIDAIFKYAC9DNJXM2CRD" или "AIDAZ362UEKJCJMFFXCL"
Пожалуйста, комментарий, если он доступен в веб-консоли.

После того, как вы получили идентификаторы, которым должен быть предоставлен доступ, введите политику в ведро, которое вы хотите защитить.
Чтобы сделать это с помощью веб-консоли:
→ Открыть S3 → Открыть ведро → Выбрать вкладку "Свойства" → Нажмите "Изменить политику ведра"

Чтобы применить политику с помощью awscli, создайте файл с содержимым политики и поместите его в свое ведро с помощью этой команды:
aws s3api put-bucket-policy --bucket NAME_OF_YOUR_BUCKET --policy file:///path/to/policyFile.json
Конечно, установите YOUR_BUCKET_NAME и путь к вашим значениям, НО НЕ удаляйте файл://префикс перед вашим именем файла


Предупреждение: эта политика deny переопределит стандартный "доступ к s3", который может иметь пользователь. Это означает, что вы можете запретить доступ к своему пользователю OWN с этим. Используйте с осторожностью!
Я даже боюсь, что вы можете сделать ведро полностью недоступным.
Из любопытства я попытался получить доступ к нашему пользователю root, к которому я не предоставлял доступ, и фактически не смог.
Gotta попросите это поддержать и, надеюсь, обновить этот ответ.

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

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::your-bucket-name",
        "arn:aws:s3:::your-bucket-name/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AIDAXAXAXAXAXAXAXAXAX",
            "AIDAOXOXOXOXOXOOXOXOX",
            "AIDAXIXIXIXIXIXIXIXIX"
          ]
        }
      }
    }
  ]
}

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

Надеюсь, что это поможет