Почему политика AWS Bucket Policy NotPrincipal с конкретным пользователем не работает с клиентом aws, если профиль не указан?

У меня есть эта политика ведра AWS S3:

{
    "Version": "2012-10-17",
    "Statement": [
        {
           "Sid": "OnlyS3AdminCanPerformOperationPolicy",
           "Effect": "Deny",
           "NotPrincipal": {
               "AWS": "arn:aws:iam::<account-id>:user/s3-admin"
           },
           "Action": [
               "s3:*"
           ],
           "Resource": [
               "arn:aws:s3:::my-bucket-name",
               "arn:aws:s3:::my-bucket-name/*"
           ]
       }
   ]
}

Примечание: к пользователю IAM s3-admin прикреплена политика AdministratorAccess.

Сначала я думал, что политика ведра не работает. Вероятно, это было из-за того, как я тестировал операцию.

aws s3 rm s3://my-bucket-name/file.csv 

Caused:
delete failed: s3://test-cb-delete/buckets.csv An error occurred (AccessDenied)

но я, если использовал --profile по умолчанию согласно

aws s3 --profile default rm s3://my-bucket-name/file.csv 

Это сработало.

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

Почему клиент aws так себя ведет?


person ThatChrisGuy    schedule 13.09.2018    source источник
comment
Не используйте учетную запись root для доступа к AWS: docs.aws.amazon.com/IAM/latest/UserGuide/   -  person jarmod    schedule 13.09.2018
comment
Я это понимаю. Я также никогда не хочу выполнять какие-либо действия с этим ведром. Я хочу разрешить только определенному пользователю выполнять действия. root может быть вариантом, так как это крайний случай. Я бы предпочел какого-то конкретного пользователя iam...   -  person ThatChrisGuy    schedule 13.09.2018
comment
Я создал пользователя IAM, дал ему AdministratorAccess, создал ведро и задал ему указанную выше политику (изменение имени ведра), и, похоже, все работает нормально. Пользователь смог удалить объект в корзине. Поскольку это не работает для вас, можете ли вы предоставить дополнительную информацию? Например, какую команду вы использовали, чтобы получить отказ в доступе? Может ли s3-admin перечислить содержимое корзины, загрузки и т. д.?   -  person John Rotenstein    schedule 13.09.2018
comment
Ваша политика кажется действительной и правильной. Я проверил это, и это сработало, как и планировалось. Есть ли шанс, что вы не предоставляете учетные данные, которые, по вашему мнению, вы предоставляете, или что политика на самом деле не применялась, как показано?   -  person jarmod    schedule 13.09.2018
comment
Я настроил aws-cli с ключом доступа s3-admin. Затем вызывается: aws s3 rm s3://my-bucket-name/file.csv Результат: удаление не удалось: s3://test-cb-delete/buckets.csv Произошла ошибка (AccessDenied) при вызове операции DeleteObject: Доступ Отклонен   -  person ThatChrisGuy    schedule 13.09.2018
comment
По какой-то причине это работает, если я добавляю --profile по умолчанию. Но я все еще могу перечислить объекты внутри ведра без --profile по умолчанию... и у меня есть только один набор учетных данных в кеше....   -  person ThatChrisGuy    schedule 13.09.2018
comment
Я отредактировал вопрос, чтобы правильно отразить ситуацию.   -  person ThatChrisGuy    schedule 13.09.2018
comment
Пакеты AWS SDK могут получать учетные данные из других мест, помимо параметра --profile (который читается из ~/.aws/credentials). Например, переменные среды или служба метаданных (если работает на EC2).   -  person jarmod    schedule 13.09.2018


Ответы (1)


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

У STS есть удобный API, который сообщает вам, кто вы есть. Это похоже на UNIX-подобную команду whoami, за исключением AWS Principals. Чтобы узнать, какие учетные данные какие, сделайте следующее:

aws sts get-caller-identity
aws sts --profile default get-caller-identity 
person Jordan McQueen    schedule 13.09.2018