2017-07-14 60 views
1

我有一个嵌入式设备,需要写入S3的能力。我想避免给嵌入式设备一个实际的AWS IAMUser。我正在考虑使用Cognito获得对S3的写入权限。允许Cognito用户写入S3

我有一个组,一个用户一个用户群(现在)。该组具有允许访问写入某个S3存储桶的附加策略。该池已设置为只有管理员可以创建新用户。我设法认证了认证用户并有权刷新令牌和idTokens。我正在寻找使用这些令牌写入我的S3桶。

我试图按照试图跟随文档,但我感到困惑。我想我需要一个联合身份池,但我没有要求公共提供者。我只想让我的认知用户组写信给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()      

任何提示将不胜感激!

+0

需要调用STS AssumeRoleWithWebIdentity使用Cognito令牌来获取暂时的AWS凭据你再使用S3。顺便说一下,引入用户池的原始博客帖子(作为现在称为联合身份池的自管理替代品)很有用:https://aws.amazon.com/blogs/aws/new-user-pools - 用于-亚马逊cognito /。无需Facebook等。 – jarmod

回答

2

你确实是一个联合身份池。在身份提供者部分,您选择Cognito并输入您的池ID和池客户端ID。然后,您需要提供身份池authenticatedunauthenticated roles。您可以使用这些角色来提供S3写入权限。

这是身份提供者设置的默认行为。如果您希望角色来自您的用户所在的组,则需要在身份提供商部分的Choose role from token选项中设置您的池和客户端ID的位置。