Amazon web services 允许成千上万的AWS帐户访问一个存储桶?

Amazon web services 允许成千上万的AWS帐户访问一个存储桶?,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我们是一家微不足道的初创公司,从整个互联网上挖掘数据,并将其放入Amazon S3桶中与全世界共享。目前我们有2TB的数据,很快我们可能达到20TB的水平 我们的订户将能够从Amazon S3存储桶下载所有数据。显然,我们必须选择请求者支付带宽,除非我们想以令人心碎的S3账单收场 预签名的URL不是一个选项,因为它似乎不是,因此容易被滥用下载 经过一些研究,似乎是授予不同AWS帐户访问我们bucket所需权限的方法: { "Version": "2012-10-17", "State

我们是一家微不足道的初创公司,从整个互联网上挖掘数据,并将其放入Amazon S3桶中与全世界共享。目前我们有2TB的数据,很快我们可能达到20TB的水平

我们的订户将能够从Amazon S3存储桶下载所有数据。显然,我们必须选择请求者支付带宽,除非我们想以令人心碎的S3账单收场

预签名的URL不是一个选项,因为它似乎不是,因此容易被滥用下载

经过一些研究,似乎是授予不同AWS帐户访问我们bucket所需权限的方法:

{
   "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

然而问题是,我们可能会有成千上万甚至更多的用户使用这个bucket

这是为他们添加访问此bucket的权限的正确且有效的方法吗

考虑到每个请求都将通过这个多山的bucket策略,它会给这个bucket带来任何性能困难吗

对于这个问题有更好的解决方案吗?

您对的要求是可以理解的,但会导致其他限制

用户将需要自己的AWS帐户进行身份验证-它将无法与AWS Cognito等联合登录一起使用。另外,预签名URL也没有好处,因为它们也是从AWS帐户生成的

Bucket策略限制为20KB,ACL限制为100个授权

因此,这种方法似乎不太可能奏效

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

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


最后一个选择是,这将涵盖“公开可用的高价值云优化数据集”的存储和数据传输成本。

我将使用Cognito授权用户,然后使用某种“中间层”--类似于API网关和/或Lambda,它将执行请求并代表经过身份验证的请求检索数据。请注意,bucket策略的大小限制为20 KB,如前所述。关于“仅允许从同一AWS区域内访问内容”,用户仍然需要AWS帐户来访问数据,对吗?因为我们不能公开数据,所以需要依赖bucket策略来获得权限,对吗?因为数据只能访问AWS范围内的IP地址,所以他们需要AWS内的资源来访问数据(因此需要一个帐户),但他们不会使用用户付费(需要一个帐户)。所以他们不直接需要一个账户,但他们确实间接需要一个账户。而且,您还可以避免数据传输费用!你是说同一个AWS地区?由于我们不能简单地公开数据,我们将审计对数据的访问,以及他们为什么和如何间接需要帐户?对不起,我不太明白你的意思。通过限制访问同一地区与EC2服务相关联的IP地址,就不会有数据传输成本(因此,你不需要请求者付费)。但是,数据只能从AWS内部访问(由于IP地址限制),因此您的客户需要AWS帐户才能访问数据。然后,您可以使用预签名的URL授予访问权限。正确。您仍然需要某种形式的身份验证。这只是一种避免数据传输费用的方法。授予访问权限的一种常见方式是让应用程序、用户进行登录身份验证,然后应用程序可以向对象提供访问权限。用户无法直接访问AmazonS3。