【问题标题】:Retrieve file from S3 with curl from EC2 using IAM role使用 IAM 角色从 EC2 使用 curl 从 S3 检索文件
【发布时间】:2017-09-29 11:44:04
【问题描述】:

我创建了一个 IAM 角色并将其分配给我的 EC2 实例。我创建了一个 IAM 角色策略并将其链接到我的 S3 存储桶。我现在可以在我的 EC2 实例上使用 aws-cli 列出我的 S3 存储桶中的文件。

[root@ec2.hostname.aws.com ~]# aws --region eu-west-1 s3 ls s3://s3-bucket-name
2017-05-02 02:37:39        137 index.html

现在,如果我尝试 curl 该文件,我会收到拒绝访问错误:

[root@ec2.hostname.aws.com ~]# curl https://s3-eu-west-1.amazonaws.com/s3-bucket-name/index.html
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>782176F442A4995A</RequestId><HostId>qZWZTXZdlgtD4BiVYfp5+Mj/gU3UXRiYQmsSyaAhwED1JtzUWs9QKE99RmsQ6w0uDB

有没有一种方法可以让这个curl 请求工作而不放松对 S3 存储桶的权限?诸如身份验证、标头等之类的东西。

【问题讨论】:

  • curl `aws --region eu-west-1 s3 presign s3://s3-bucket-name/index.html`

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


【解决方案1】:

对 Amazon S3 的 GET 请求需要使用AWS Signature v4授权字符串

见:GET Object

或者,您可以创建一个 Pre-Signed URL,它具有额外的参数并授予对 Amazon S3 对象的限时访问权限。您可以使用几行代码生成预签名 URL,然后将其提供给用户(或在 HTML 页面中使用)以授予对存储在 Amazon S3 中的私有对象的临时访问权限。

当然,从 Amazon S3 检索数据的最简单方法是使用 API 调用或AWS Command-Line Interface (CLI)

【讨论】:

  • Presigned url 是一个很好的策略,特别是如果您使用的库不允许您向 curl 命令添加标头。
猜你喜欢
  • 2017-05-27
  • 2020-05-01
  • 2019-06-10
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 2016-07-10
  • 2018-02-06
  • 2018-09-22
相关资源
最近更新 更多