Разрешить пользователю Cognito писать в S3
У меня есть встроенное устройство, которое требует возможности записи в S3. Я хочу не предоставлять встроенному устройству реальный AWS IAMUser. Я смотрю на использование Cognito для получения доступа на запись в S3.
У меня есть пул пользователей с группой и одним пользователем (на данный момент). Группа имеет прикрепленную политику, которая разрешает доступ для записи в определенный сегмент S3. Пул настроен так, что только администраторы могут создавать новых пользователей. Мне удалось аутентифицировать пользователя Cognito и получить доступ к токенам обновления и idTokens. Я хочу использовать эти токены для записи в мое ведро s3.
Я пытаюсь следовать, пытаясь следовать документации, но я запутался. Я думаю, что мне нужен федеративный пул удостоверений, но у меня нет требований к публичному провайдеру. Я просто хочу, чтобы моя группа пользователей cognito писала в s3.
Есть ли простое решение, позволяющее пользователю cognito писать в S3 без федеративных идентификаторов или, если нет, мне требуется серверная часть для обслуживания токена для федеративной идентификации?
Я использовал ордер https://github.com/capless/warrant для аутентификации следующим образом:
from warrant.aws_srp import AWSSRP
import boto3
client = boto3.client('cognito-idp')
aws = AWSSRP(username='<username>', password='<password>', pool_id='<pool>',
client_id='<clientid>', client=client)
tokens = aws.authenticate_user()
Любые советы будут с благодарностью!
1 ответ
Вам нужен федеративный пул удостоверений. В разделе поставщика удостоверений вы выбираете Cognito
и введите свой идентификатор пула и идентификатор клиента пула. Затем вам нужно предоставить пул authenticated
а также unauthenticated roles
, Вы можете использовать эти роли для предоставления доступа к записи S3.
Это поведение по умолчанию для настройки провайдера идентификации. Если вы хотите, чтобы роль пришла из группы, в которую входит ваш пользователь, вам нужно будет установить Choose role from token
опцию в разделе провайдера идентификации, где вы указали свой пул и идентификатор клиента.