我创建了一个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存储桶的权限?像身份验证, Headers 等等 .
1 回答
对Amazon S3的GET请求需要使用AWS Signature v4的 authorization string .
见:GET Object
或者,您可以创建一个Pre-Signed URL,它具有额外的参数并授予对Amazon S3对象的时间限制访问权限 . 您可以使用几行代码生成预签名URL,然后将其提供给用户(或在HTML页面中使用它),以授予对存储在Amazon S3中的私有对象的临时访问权限 .
当然,从Amazon S3检索数据的最简单方法是使用API调用或AWS Command-Line Interface (CLI) .