Обходной путь AWS Cognito для aws: имя пользователя - PullRequest
0 голосов
/ 21 сентября 2018

Я пишу политику пользователя с использованием AWS Cognito User Pools для приложения, которое должно быть совместимо со старой специальной системой управления пользователями, которую мы ранее использовали на S3 с IAM, в то время как мы переходим к более совершенной модели управления пользователями с использованием Cognito.

Старая система использовала arn:aws:s3:::[Our Bucket Name]/${aws:username}/* в групповой политике, чтобы разрешить пользователю доступ только к объектам, используя свое имя пользователя.Я думал, что использование одного и того же имени пользователя в Cognito позволит нам использовать дублирующую политику ролей, предоставляя пользователям Cognito одинаковый доступ, но согласно this , aws:username отсутствует для Cognito;он имеет только aws:userid, который, если я читаю это право, по сути является случайно сгенерированной уникальной строкой, которая не имеет ничего общего с именем пользователя и поэтому не может использоваться для этой цели.

Есть ли какая-либодругим способом я могу предоставить пользователю Cognito доступ к папке с заданным именем пользователя IAM в S3 на основе того же имени с помощью политики ролей?Единственный способ, о котором я могу подумать, - это создавать собственные политики для каждого пользователя, но я бы предпочел свести к минимуму изменения в нашей существующей системе создания пользователей.

1 Ответ

0 голосов
/ 21 сентября 2018

Краткий ответ: не смешивайте IAM с Cognito.Напишите приложение / service / api для предоставления объектов авторизованному пользователю.

Длинный ответ : IAM для администраторов или служб AWS.Не смешивайте его с Cognito.Cognito предназначен для хранения и предоставления токенов вашим пользователям.Вы можете спросить, как предоставить объекты в пределах от bucket-name/user-test до user-test:

  1. Хранить права доступа пользователя в S3 : для каждого пользователя есть корзина access-rights/user-test.Следует заключить права пользователя;например, вы можете иметь в качестве Json:

    {имя пользователя: строка, имя-доступа-имя: строка}

  2. Дополнительные услуги : Выможет иметь службу аутентификации для проверки подлинности пользователя (с использованием Cognito), затем на основе тела токена получить имя пользователя;и проверьте его права (первый шаг), и приложение должно предоставить объект из начального сегмента, к которому пользователь хочет получить доступ.

...