通过 Amazon Cognito 提供个人访问权限

Posted

技术标签:

【中文标题】通过 Amazon Cognito 提供个人访问权限【英文标题】:Provide individual access permissions through Amazon Cognito 【发布时间】:2021-10-20 14:44:39 【问题描述】:

我是一家公司的一员,我们向客户发送传感器,这些传感器将数据发送到特定于该客户的 Amazon S3 存储桶或文件夹。我正在尝试在网络上创建一个门户,他们可以通过 Amazon Cognito 登录并查看他们的数据。我跟随User Authentication and Authorization with AWS Cognito创建了一个与我想要的相当接近的系统。

不过,这并不是我想要的。我希望每个用户都能访问不同的数据,但我不想在每次有人新注册帐户时都创建新的 IAM 角色。我正在想象以下流程:

    客户收到传感器(每个传感器都附有传感器 ID) 客户进入在线门户,并在创建帐户时输入传感器的 ID 使用给定的传感器 ID,创建一个新的 IAM 角色,让他们只能访问 S3 上允许他们查看的数据。 每次客户登录时,他们都会代入注册时创建的 IAM 角色。 如果将更多数据添加到他们有权访问的 S3 中的存储桶或文件夹中,他们将能够看到这些数据。

不完全确定如何使这种设置成为现实,因此任何概念上的帮助都会很棒。谢谢!

【问题讨论】:

【参考方案1】:

根据您列出的内容,听起来Amazon S3: Allows Amazon Cognito users to access objects in their bucket 可能有效,因为您的目标是保护 S3 中的数据?

或者,您可以查看Attribute-based access control (ABAC),但这需要您能够标记从 Cognito 开始的会话,而且我不是 100% 可以做到这一点(就像您可以使用 SAML 联合)。

【讨论】:

@rowanau 这很漂亮!您知道 ABAC 是否适用于 Amazon S3 标签吗?众所周知,它们很难访问。 经过仔细检查,没有一个有用的 S3 API 调用支持 RequestTag 条件,这将使其成为此特定场景的障碍。 第一个链接看起来真不错!我认为这可能是我正在寻找的......一个问题:它说将“应用程序名称”放入策略(以及用户文件)中。我的“应用程序名称”是什么?那是我的应用客户端名称吗?再次感谢您。 它只是用作对象前缀,所以只要它在两个策略语句中保持一致,你怎么称呼它都没有关系。如果您没有在桶中混合其他任何东西,您可能会完全放弃它。 哦,我想我明白了!我必须为 s3.listBucket() 函数的参数添加一个“前缀”属性。我只是让它等于策略中设置的前缀,现在我很确定它工作得很好!非常感谢!

以上是关于通过 Amazon Cognito 提供个人访问权限的主要内容,如果未能解决你的问题,请参考以下文章

带有 Spring Security 的 Amazon Cognito Oauth2

为啥 Amazon Cognito 不在其访问令牌中返回受众字段?

AWS cognito - 我们可以修改 Amazon Cognito 在使用谷歌提供商进行身份验证时提供的重定向 URL

如何访问 Cognito 用户帐户的组?

尝试初始化Amazon Cognito凭据提供程序时获取空对象引用

如何从 AWS cognito 授权代码获取访问和刷新令牌