4

Я пытаюсь разработать архитектуру приложения почти исключительно поверх служб AWS.Могу ли я иметь динамические пользовательские разрешения с использованием AWS IAM/Cognito?

Это приложение имеет как User, так и Organization «объекты». Как можно было бы исключить, User может быть admin, role-x или role-y одной или нескольких организаций. (role-x и role-y просто заполнители для некоторой роли с некоторым набором конкретных разрешений. User также может быть автономным (то есть, не имеют роль в любом Organization).

Наше современное мышление заключается в использовании DynamoDB для хранения организации и пользовательские данные. Для пользователей это может включать в себя некоторую базовую информацию (адрес, номер телефона и т. д.), а для организаций она может включать такие поля, как «миссия», «деловой адрес» и т. д.

admin организация сможет редактировать все поля организации, тогда как role-x может обновить «инструкцию миссии» только при чтении всех других полей.

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

user1: 
    organizations: 
     123: 'admin' 
     456: 'role-x' 
     789: 'admin' 

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

Это довольно простой тип макета, но я хотел бы четко рассказать о характере пользователя, организации и ролей «многие ко многим».

Я читал документацию IAM и Cognito, а также то, как она относится к мелкозернистному управлению элементами DynamoDB или S3-ведрами, но многие из примеров сосредоточены на том, что один пользователь обращается к своим собственным данным, а не к множеству -to-many.

Как можно реализовать внедрение этого типа системы разрешений на AWS?

(Если необходимо обновить с конкретными Identities (скажем, для Organization), это может быть надежно сделано в programatic способом определения политики - или это опрометчивый изменить политику на лету, как это)

ответ

1

К сожалению, система разрешений, которую вы пытаетесь реализовать, в настоящее время не возможна с Cognito. С помощью Cognito вы можете создавать уникальные идентификаторы для своих пользователей в пуле идентификации. Пользователи могут аутентифицироваться с использованием любого внешнего провайдера, такого как Facebook, Amazon, Google, Twitter/Digits или любого поставщика OpenId Connect. Пользователи также могут пройти аутентификацию через собственный процесс проверки подлинности. После аутентификации пользователя Cognito создает уникальный идентификатор для этого пользователя. Существует концепция идентичности, но нет понятия групп. Все пользователи/идентификаторы в одном пуле идентификаторов могут получать учетные данные из ролей, связанных с этим пулом идентификаторов. В настоящее время вы можете указать две роли: одну роль для аутентифицированной идентификации и одну роль для неавторизованной идентификации. В данный момент нет такой возможности, когда вы можете указать несколько групп для каждой личности и указать роль в этой группе.

Для получения дополнительной информации о Cognito, вы можете обратиться к

https://aws.amazon.com/cognito/faqs/ http://docs.aws.amazon.com/cognito/devguide/getting-started/

+0

Я думаю Cognito тождества могут быть назначены или связаны с IAM ролей, хотя, не так ли? Если это так, то можно создать роли для разных уровней доступа к каждой организации, а затем связать эти роли с личностью Cognito. Я полагаю, что это зависит от того, что личность может иметь много ролей, но я не уверен, разрешено ли это/возможно. – csjohn

+0

Вы в конечном итоге решили это? Поскольку Cognito не разрешает множественные аутентифицированные роли, я думал о наличии 1 пула идентификаторов для каждой роли. Этот подход не кажется очень масштабируемым, но если у вас есть только две роли (например, Пользователь и Администратор), это может быть хорошо. – Brett

Смежные вопросы