我已经推出了EC2 - Windows实例 创建了一个S3存储桶,创建了一个角色S3-FullAccess并分配给EC2实例。
从EC2实例浏览器,我可以访问我的角色的元数据: http://169.254.169.254/latest/meta-data/iam/security-credentials/EC2-S3-access
{
"Code" : "Success",
"LastUpdated" : "2018-04-10T04:47:11Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "myaccess"
"SecretAccessKey" : "mysecretkey",
"Token" : "mytoken",
"Expiration" : "2018-04-10T11:10:43Z"
}
如果我尝试从S3存储桶访问文件: https://s3.ap-south-1.amazonaws.com/mybucket/test.jar
获得以下错误:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>5EDB0A49E36E0E50</RequestId>
<HostId>cPFNEbsfwXA=</HostId>
</Error>
角色JSON:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
我是AWS新手
修改:
建议我使用CLI命令,获得以下错误: 提到https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html
C:\Users\Administrator>aws s3 cp https://s3.ap-south-1.amazonaws.com/mybucket/test.jar C:\downloads
usage: aws s3 cp <LocalPath> <S3Uri> or <S3Uri> <LocalPath> or <S3Uri> <S3Uri>
Error: Invalid argument type
C:\Users\Administrator>aws s3 cp https://mybucket/test.jar C:\downloads
usage: aws s3 cp <LocalPath> <S3Uri> or <S3Uri> <LocalPath> or <S3Uri> <S3Uri>
Error: Invalid argument type
C:\Users\Administrator>aws s3 cp https://mybucket/test.jar . --recursive
usage: aws s3 cp <LocalPath> <S3Uri> or <S3Uri> <LocalPath> or <S3Uri> <S3Uri>
Error: Invalid argument type
曾为:
C:\Users\Administrator>aws s3 cp s3://mybucket/test.jar C:\downloads
shouldn't use https://, used s3://, it's working
答案 0 :(得分:1)
通过浏览器中的网址访问对象时,您没有传递任何用户凭据。因此,Amazon S3不知道您是谁,并且拒绝访问对象。
更好的方法是通过API调用访问对象,可以是编程语言SDK,也可以是使用AWS Command-Line Interface (CLI),aws s3 cp
具有{{1}}命令可以将文件复制到Amazon S3或从Amazon S3复制文件。
如果必须可以通过网络浏览器访问,同时保持对象的私密性,那么您的应用程序需要生成一个有时间限制的pre-signed URL,以便在指定的时间范围内授予对象的访问权限。< / p>
答案 1 :(得分:0)
您创建的EC2角色将允许在EC2上运行的任何SDK访问S3存储桶,而不是从浏览器访问。
如果您想使用浏览器访问S3文件(无论是从您的笔记本电脑的EC2(或)),并限制存储桶内容的可见性,最好的方法是使用presigned urls。
为对象创建预签名URL时,必须提供安全凭据,指定存储桶名称,对象密钥,指定HTTP方法(下载对象的GET)以及到期日期和时间。预签名URL仅在指定的持续时间内有效。
任何收到预签名网址的人都可以访问该对象。对于 例如,如果您的存储桶中有视频,而且存储桶和存储桶都有 该对象是私有的,您可以与他人分享视频 生成预签名网址。