【问题标题】:AWS - Unable to access S3 bucket from EC2 windowsAWS - 无法从 EC2 窗口访问 S3 存储桶
【发布时间】:2018-09-27 15:24:18
【问题描述】:

我已启动 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

【问题讨论】:

  • 您能否说明您打算如何使用您正在访问的文件?您真的需要在浏览器中使用它们,还是只是想下载它们?

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


【解决方案1】:

通过浏览器中的 URL 访问对象时,您不会传递任何用户凭据。因此,Amazon S3 不知道您是谁并且拒绝访问对象。

最好的方法是通过 API 调用访问对象,可以从编程语言 SDK 或使用 AWS Command-Line Interface (CLI),它有一个 aws s3 cp 命令可以将文件复制到/来自 Amazon S3。

如果您必须可以通过网络浏览器进行访问,同时保持对象的私密性,您的应用程序需要生成一个有时间限制的pre-signed URL,以在指定的时间范围内授予对对象的访问权限。

【讨论】:

    【解决方案2】:

    您创建的 EC2 角色将允许在 EC2 上运行的任何 SDK 访问 S3 存储桶,而不是从浏览器。

    如果您想使用浏览器(无论是从 EC2(或)您的笔记本电脑)访问 S3 文件并限制存储桶内容的可见性,最好的方法是使用 presigned urls

    为您的对象创建预签名 URL 时,您必须提供安全凭证、指定存储桶名称、对象密钥、指定 HTTP 方法(GET 以下载对象)以及到期日期和时间。预签名 URL 仅在指定的持续时间内有效。

    任何收到预签名 URL 的人都可以访问该对象。为了 例如,如果您的存储桶中有视频,并且存储桶和 该对象是私有的,您可以通过以下方式与他人分享视频 生成预签名 URL。

    【讨论】:

      猜你喜欢
      • 2016-03-07
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 2016-01-22
      • 2020-06-15
      • 2019-01-14
      相关资源
      最近更新 更多