【问题标题】:AWS REST API DesignAWS REST API 设计
【发布时间】:2015-07-24 14:44:36
【问题描述】:

我正在考虑使用 AWS Cloudfront 开发一个 API,第三方可以使用该 API 来访问存储在 S3 存储桶中的数据。

我环顾四周,如果以我想要的方式实现它,我找不到任何好的例子。

基本上我需要做的是使用 HTTP 请求使用签名 URL 提供对 S3 存储桶中 JSON 数据的访问 使用在 Amazon 的身份和访问管理控制台中为每个用户生成的访问密钥进行签名。我那时 将用户特定的策略分配给每个用户,以定义他们可以访问的存储桶、文件夹和对象。

第三方是否有可能以这种方式访问​​数据,而无需使用云端 API 创建签名 URL 或成为 AWS 账户持有人?

我能否向他们提供对象的 url 以及我生成的特定访问密钥,以便他们可以通过浏览器访问这样的请求:

    https://www.example.com/examplebucket/examplefolder/exampleobject?key-pair-id=1111-1111-1111-1111

我自己尝试过,但只收到拒绝访问错误 - 需要签名,但我能看到获得此签名的唯一方法是 使用 cloudfront api 创建签名的 url。

如果这种方法可行或采取更好的方法,有人有什么想法吗?

谢谢

【问题讨论】:

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


    【解决方案1】:

    Cloudfront 私有内容的另一种选择是设置您自己的服务器。这对于其他 AWS 服务(如数据库)来说很好。但由于资源是一个 S3 对象,除非您是为请求提供服务的人,否则很难屏蔽 url。所以不幸的是,Cloudfront仍然是访问限制的可行方式。请注意,您仍然需要设置服务器来验证将获得签名 URL 的用户。

    【讨论】:

    • 感谢 Inmyth 的回答。将对象设置为 public 效果很好,但我需要限制对不同用户的访问,这就是为什么我想知道是否可以分配用户和访问权限,允许用户在不使用 Amazon api 的情况下访问数据。
    • 我修改了我的答案并道歉。起初,我将您的问题解释为在没有 IAM 的情况下提供公共访问。但是从您的评论和原始问题来看,Cloudfront api 在这种情况下仍然是最可行的方式。
    • 感谢 inmyth,我现在对我的解决方案有了更好的想法
    【解决方案2】:

    如果您要构建 REST API,请使用 API Gateway。这是完全为 API 设计的服务,将解决版本控制、缓存等问题。它在内部使用 Cloudfront,因此您将在那里获得类似的好处。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 2011-08-04
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多