Почему эта политика отказа пользователей AWS S3 не работает?

Я изучаю AWS с помощью LocalStack, в настоящее время изучаю политики IAM в контексте пользователей IAM и корзин S3, и я сосредоточен на использовании интерфейса командной строки AWS.

Я попытался создать политику, запрещающую доступ к S3 для определенного пользователя:

{
  "comment": "s3-deny-stanley.json",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "s3:*",
      "Principal": { "AWS": "arn:aws:iam::000000000000:user/stanley" },
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

Вот профиль Стэнли:

$ aws --profile=admin_cred --endpoint-url=http://localhost:4593 iam get-user --user-name stanley
{
    "User": {
        "Path": "/",
        "UserName": "stanley",
        "UserId": "mnxybnqil4uugewvlq7x",
        "Arn": "arn:aws:iam::000000000000:user/stanley",
        "CreateDate": "2020-05-01T20:01:30.932000+00:00"
    }
}

Я применил политику следующим образом:

$ aws --profile=admin_cred --endpoint-url=http://localhost:4572 s3api put-bucket-policy --bucket my-bucket --policy file://s3-deny-stanley.json
$

Я добавляю файл в свое ведро следующим образом:

$ cat << EOF > foo.txt
> hello, world!
> EOF
$
$ aws --profile=admin_cred --endpoint-url=http://localhost:4572 s3 cp ./foo.txt s3://my-bucket/foo.txt
upload: ./foo.txt to s3://my-bucket/foo.txt

Теперь я пытаюсь получить доступ к файлу как Стэнли, но, вопреки моим надеждам, он, кажется, может:

$ aws --profile=stanley --endpoint-url=http://localhost:4572 s3 ls s3://my-bucket/
2020-05-01 14:33:03         14 foo.txt
$ aws --profile=stanley --endpoint-url=http://localhost:4572 s3 cp s3://my-bucket/foo.txt ./foo2.txt
download: s3://my-bucket/foo.txt to ./foo2.txt
$ 

Может ли кто-нибудь указать, что не так в моей попытке применить политику s3-deny-stanley к my-bucket?

(извиняюсь перед Стэнли)


Обновление:
Я проверил, что политика прикреплена следующим образом:

$ aws --profile=admin_cred --endpoint-url=http://localhost:4572 s3api get-bucket-policy --bucket my-bucket
{
    "Policy": "{\n  \"comment\": \"s3-deny-stanley.json\",\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Deny\",\n      \"Action\": \"s3:*\",\n      \"Principal\": { \"AWS\": \"arn:aws:iam::000000000000:user/stanley\" },\n      \"Resource\": \"arn:aws:s3:::my-bucket/*\"\n    }\n  ]\n}\n\n"
}

Обновление:
обновлена ​​политика, чтобы удалить «комментарий» следующим образом:

$ cat ./s3-deny-stanley.json
{
"Version": "2012-10-17",
"Statement": [
    {
      "Effect": "Deny",
      "Action": "s3:*",
      "Principal": { "AWS": "arn:aws:iam::000000000000:user/stanley" },
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

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


person StoneThrow    schedule 01.05.2020    source источник
comment
Не могли бы вы проверить, привязана ли политика корзины к my-bucket?   -  person jellycsc    schedule 02.05.2020
comment
@jellycsc - готово: обновил пост   -  person StoneThrow    schedule 02.05.2020
comment
Все выглядят хорошо для меня. Похоже на существующую ошибку локального стека. github.com/localstack/localstack/issues/2238   -  person jellycsc    schedule 02.05.2020
comment
@jellycsc - спасибо; Я не знаком с github; означает ли добавление тега отсутствия функции в нижней части этой страницы, что это было признано ошибкой? (В целях обучения меня в основном просто интересует, правильно ли то, что я пытался сделать, и я согласен с тем, что это ошибка в LocalStack)   -  person StoneThrow    schedule 02.05.2020
comment
Позвольте мне быстро попробовать это в aws и вернуться к вам ◡̈ Я хочу быть на 100% правильным, особенно не вводить вас в заблуждение.   -  person jellycsc    schedule 02.05.2020
comment
Не могли бы вы попытаться удалить ключ comment и его значение в политике корзины json? Я столкнулся с ошибкой при сохранении политики корзины.   -  person jellycsc    schedule 02.05.2020
comment
Давайте продолжим обсуждение в чате.   -  person StoneThrow    schedule 02.05.2020


Ответы (1)


Невозможно воспроизвести поведение, описанное OP на AWS. Я дал Стэнли разрешение администратора и получил следующее

$ aws s3 cp s3://bucketname/key . --profile stanley
fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden

Поэтому я считаю, что это ошибка локального стека.

person jellycsc    schedule 01.05.2020