授予数以万计的AWS账户访问存储桶?

时间:2018-09-03 02:52:14

标签: amazon-web-services amazon-s3

我们是一家不起眼的创业公司,它从整个Internet挖掘数据,并将其放入Amazon S3存储桶中,以与世界共享。目前,我们有 2TB 的数据,不久我们可能会达到 20TB 的标记。

我们的订户将能够从我们拥有的Amazon S3存储桶中下载所有数据。显然,我们必须为带宽选择请求者付费,除非我们最终要付出一些令人心碎的S3账单。

不能选择预签名URL,因为它似乎audit bandwidth usage in real time似乎不存在,因此容易受到下载滥用的攻击。<​​/ p>

经过研究this似乎是向不同的AWS账户授予访问存储桶所需权限的方法:

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "Permissions to foreign account 1",
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::ForeignAccount-ID-1:root"
         },
         "Action": [
            "s3:GetBucketLocation",
            "s3:ListBucket"
         ],
         "Resource": [
            "arn:aws:s3:::ourbucket"
         ]
      },
      {
         "Sid": "Permissions to foreign account 2",
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::ForeignAccount-ID-2:root"
         },
         "Action": [
            "s3:GetBucketLocation",
            "s3:ListBucket"
         ],
         "Resource": [
            "arn:aws:s3:::ourbucket"
         ]
      },
      {
         "Sid": "Permissions to foreign account 3",
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::ForeignAccount-ID-3:root"
         },
         "Action": [
            "s3:GetBucketLocation",
            "s3:ListBucket"
         ],
         "Resource": [
            "arn:aws:s3:::ourbucket"
         ]
      },

      ......

   ]
}

其中ForeignAccount-ID-x是帐户ID,例如2222-2222-2222。

但是,问题出在哪里,我们可能有成千上万个甚至更多的订阅者使用此存储桶。

这是为他们添加访问此存储桶权限的正确而有效的方法吗?

考虑到每个请求都会通过这个多山的存储桶策略,这会对存储桶造成性能上的困难吗?

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

您对Amazon S3 Requester Pays Buckets的要求是可以理解的,但会导致其他限制。

用户将需要其自己的AWS帐户进行身份验证-它将不适用于诸如AWS Cognito之类的联合登录。此外,预签名URL也无济于事,因为它们也是从AWS帐户生成的。

存储桶策略限制为20KB,ACL限制为100个授权。

因此,这种方法似乎不太可行。

另一种选择是创建一种机制,使您的系统可以 推送内容到另一个用户的AWS帐户。他们将需要提供目标存储桶和某种形式的访问权限(例如,可以假设为IAM角色),并且您的应用程序可以将文件复制到其存储桶中。但是,这对于定期发布的数据可能很难。

另一种选择是仅允许在同一AWS区域内访问内容 。因此,用户将能够使用诸如Amazon EMR之类的服务读取和处理AWS中的数据。他们可以在EC2上编写访问Amazon S3中数据的应用程序。他们将能够将数据复制到自己的存储桶中。他们唯一不能做的就是从AWS外部访问数据。这将消除数据传输成本。甚至可以在多个地区提供数据,以服务全球用户。

最后一个选择是propose your dataset to the AWS Public Dataset Program,它将涵盖“公开可用的高价值云优化数据集”的存储和数据传输成本。