【问题标题】:Cognito Role and AWS S3 Bucket policy for mobile and web access用于移动和 Web 访问的 Cognito 角色和 AWS S3 存储桶策略
【发布时间】:2016-03-16 19:37:12
【问题描述】:

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

我们在 S3 存储桶上托管私有文件,可通过网络和移动应用程序访问该文件。我们正在尝试使用未经身份验证的角色为 Amazon Cognito 添加一层安全性,以便登录到我们应用程序的任何用户都可以访问 S3 存储桶。

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

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/*"
    }
  ]
}

【问题讨论】:

  • 您是在获取 Cognito 凭据后尝试直接从浏览器访问文件还是使用 javscript sdk getObject 以编程方式访问文件?
  • @behrooziAWS 我试图直接从浏览器访问我的文件。
  • 您找到解决方案了吗?我还试图允许我的 Cognito 用户访问 s3 存储桶文件,而无需签名的 url。我不想调用 getObject 来获取令牌然后渲染图像。

标签: amazon-web-services amazon-s3 amazon-cognito


【解决方案1】:

当您尝试直接从浏览器访问文件时,不会随请求发送凭据。它与尝试直接访问 S3 而无需任何代码从 Cognito 获取凭据的效果相同。为了使用 Cognito 凭证,您需要使用 javascript SDK 发出请求。下面是一个使用来自this page的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 以访问存储桶 myBucket 中的密钥 myKey。您可以采用与此类似的方法在您的存储桶中列出对象,然后生成签名的 url(使用 Cognito 凭据签名),您的最终用户可以单击这些网址来查看存储桶中每个密钥的内容。

【讨论】:

    猜你喜欢
    • 2016-03-25
    • 2020-12-18
    • 2016-12-23
    • 1970-01-01
    • 2015-10-06
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多