当前位置: 首页 > 知识库问答 >
问题:

用于移动和web访问的认知角色和AWS S3桶策略

暨曾笑
2023-03-14

我们的目标是创建只允许登录用户访问S3的S3 bucket和IAM角色策略。

我们在S3 bucket上托管私人文件,可以从web和移动应用程序访问。我们试图通过Amazon Cognito添加一层安全性,使用一个未经身份验证的角色,这样任何登录到我们应用程序的用户都可以访问S3 bucket。

使用AWS-SDK for JS并遵循基本的aws.config.credentials设置,我们可以在Amazon Cognito identity仪表板中看到访问的1个标识和同步的数量。由于我们似乎连接到了IdentityPool,我认为我们的策略可能需要一些调整,以便具有未经身份验证的Cognito角色的登录用户可以访问S3 bucket。

Cognito_IdentityPoolUnauth_Role的IAM角色策略

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "SID_NUMBER",
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::OUR_BUCKET_NAME/*"
        ]
    }
  ]
}

S3桶策略

{
"Version": "2012-10-17",
"Id": "http referer policy example",
"Statement": [
    {
        "Sid": "",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::IAM_NUMBER:role/Cognito_IdentityPoolUnauth_Role"
        },
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::OUR_BUCKET_NAME/*"
    }
  ]
}

共有1个答案

袁泰
2023-03-14

尝试从浏览器直接访问文件时,不会随请求一起发送凭据。它与尝试直接命中S3而不需要任何代码从Cognito获取凭据具有相同的效果。为了使用Cognito凭据,您需要使用javascript SDK发出请求。下面是使用javascript SDK的示例请求,摘自本页

var s3 = new AWS.S3();
var params = {Bucket: 'myBucket', Key: 'myKey'};
s3.getSignedUrl('getObject', params, function (err, url) {
  console.log("The URL is", url);
});

如果您在获得Cognito凭据后调用此代码,它将使用Cognito凭据创建一个签名的url,以访问bucket MyBucket中的密钥myKey。您可以采用类似的方法在bucket中listObjects,然后生成签名的URL(用Cognito凭据签名),最终用户可以单击该URL查看bucket中每个键的内容。

 类似资料:
  • 我正在开发一个mean stack web应用程序,它包含基于登录用户角色的差异访问。有几个不同的角色,如管理员,政府,志愿者等。 1.如何基于角色管理前端? 目前,我正在为每个角色设置全局标志,如isAdmin、is志愿者、isGovt等,并根据其值,使用 这是正确的说法吗。如果不是,请建议处理UI的正确方法。 2.如果用户没有授权,如何管理后端和重定向路由? 目前我正在尝试使用angular权

  • 我已经读了很多文档,看了很多视频,但是我对IAM角色和Bucket策略仍然很困惑。让我困惑的是: 1)我创建了一个Bucket。那时我可以将它公有或私有。如果我将它公有,那么任何人或任何应用程序都可以“看到”Bucket中的对象。我认为可以将权限设置为添加/删除/获取/列出Bucket中的对象。如果是这样,那么为什么我需要为S3 Bucket添加任何IAM角色,或者添加任何Bucket策略(???

  • 我正在使用Servlet过滤器来实施访问控制。扩展it以测试用户角色的最佳方式是什么?我能想出几种解决方案,但没有一种是优雅的。 编写角色测试并不难。但是如何将角色传递给给定url的过滤器? e、 在网络上。xml 谢谢

  • 我已经开发了应用程序在Node.js.我使用序列化MSSQL和我已经创建了API的我正在消耗API的角。 我想知道的是关于安全性的事情:我已经实现了JWT的身份验证。现在我想实现角色权限管理我的要求是: 一个用户可以有多个角色(管理员、管理员) 角色可以具有多个权限(创建、更新等) 因此,一个用户可以拥有一个或多个角色,一个角色可以拥有一个或多个权限。权限类似于创建记录、删除记录等。用户可以访问他

  • 问题内容: 是否可以使用任何基于角色的开源访问控制系统? 问题答案: 布兰登·萨维奇(Brandon Savage)在他的PHP软件包“ ApplicationACL ” 上做了一个演示,该演示可能会或可能不会完成基于角色的访问。PHPGACL可能也能正常工作,但是我不能肯定地告诉您。 但是,我可以告诉您的是Zend Framework 的Zend_ACL组件将执行基于角色的设置(但是您必须子类化

  • 角色定义 [role_definition] 是RBAC角色继承关系的定义。 Casbin 支持 RBAC 系统的多个实例, 例如, 用户可以具有角色及其继承关系, 资源也可以具有角色及其继承关系。 这两个 RBAC 系统不会互相干扰。 此部分是可选的。 如果在模型中不使用 RBAC 角色, 则省略此部分。 [role_definition] g = _, _ g2 = _, _ 上述角色定义表