我已经启动了EC2 - Windows实例创建了一个 S3 存储桶,创建了一个角色 S3-完全访问权限并分配给 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:UsersAdministrator>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:UsersAdministrator>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:UsersAdministrator>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:UsersAdministrator>aws s3 cp s3://mybucket/test.jar C:downloads
shouldn't use https://, used s3://, it's working
通过浏览器中的 URL 访问对象时,不会传递任何用户凭据。因此,Amazon S3 不知道您是谁,并拒绝访问这些对象。
首选方法是通过 API 调用访问对象,无论是从编程语言开发工具包还是使用 AWS 命令行界面 (CLI(,该界面具有可以将文件复制到 Amazon S3 或从 Amazon S3 复制文件的aws s3 cp
命令。
如果必须通过 Web 浏览器进行访问,同时保持对象的私有性,则应用程序需要生成一个有时间限制的预签名 URL,以在指定的时间范围内授予对对象的访问权限。
您创建的 EC2 角色将允许在 EC2 上运行的任何开发工具包访问 S3 存储桶,而不是从浏览器访问。
如果您想使用浏览器(无论是从 EC2(或(您的笔记本电脑(访问 S3 文件并限制存储桶内容的可见性,最好的方法是使用预签名 URL。
为对象创建预签名 URL 时,您必须提供安全凭证、指定存储桶名称、对象键、指定 HTTP 方法(GET 以下载对象(以及到期日期和时间。预签名 URL 仅在指定的持续时间内有效。
然后,收到预签名 URL 的任何人都可以访问该对象。为 例如,如果您的存储桶中有一个视频,并且存储桶和 对象是私有的,您可以通过以下方式与他人共享视频 生成预签名的 URL。