当前位置: 首页 > 知识库问答 >
问题:

AWS -无法从EC2窗口访问S3存储桶

邹阳
2023-03-14

我已启动 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 bucket访问文件: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

共有2个答案

苏丰茂
2023-03-14

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

如果您想使用浏览器访问S3文件(无论是来自EC2(还是)您的笔记本电脑)并限制桶内容的可见性,最好的方法是使用预先签名的url。

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

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

宰宣
2023-03-14

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

更可取的方法是通过API调用访问对象,无论是来自编程语言SDK还是使用AWS命令行接口(CLI),它有一个aws s3 cp命令,可以将文件复制到/从Amazon S3。

如果您必须在保持对象私有的同时通过Web浏览器进行访问,则您的应用程序需要生成一个有时间限制的预签名URL,该URL授予在指定时间范围内访问对象的权限。

 类似资料:
  • 我不确定我是不是漏了一步。 我有一个s3 bucket,我需要能够从一个AWS SDK PHP脚本访问我写的运行在我的EC2上。我创建了一个IAM角色以允许访问。 IAM Allow_S3_Access_to_EC2 我的Bucket策略中没有任何关于我的EC2甚至我附加的IAM角色的内容。我也需要在我的桶策略中添加一些东西吗?这就是我困惑的地方。 我所经历的是,当一个新的对象被创建,我试图从我的

  • 从AWS-EC2实例运行的AWS-SDK如何访问AWS-S3桶? 将AWS-EC2策略设置为可以访问S3存储桶而无需访问ID和密钥。 aws-cli工具能够从EC2实例访问S3桶,而不需要任何访问ID和密钥。 如果aws-cli工具能够在没有访问ID和密钥的情况下访问S3,那么AWS-SDK在从EC2实例运行时也必须有办法做到这一点。 如何做到这一点?

  • 我正在运行一个AWS ECS服务,它正在运行一个具有多个容器的任务。任务在awsvpc网络模式下运行。(EC2,不是Fargate) 集装箱港口映射在ECS任务定义中。 PS:目标(公共IP)可以从远程PC访问。只是不是从港口来的。

  • 场景:我在同一个帐户下有一个EC2实例和一个S3 bucket,我在该EC2上的web应用程序希望访问该bucket中的资源。 在官方文档之后,我使用创建了一个IAM角色,并将其分配给EC2实例。根据我的理解,现在我的web应用程序应该可以访问桶。但是,经过试验,我似乎必须添加桶策略,如下所示: 否则我就被禁止进入。 但是,既然我已经向EC2实例授予了IAM角色,为什么还要使用这个桶策略呢?

  • 我已经启动了一个具有IAM角色“WebApp”的EC2实例。角色已附加,我可以使用 webapp角色具有S3的附加策略 我也需要更改bucket权限吗?或者我在Conf上做错了什么。EC2的?

  • 我有一个正在运行的Amazon EC2实例,它具有开放的IAM策略,可以调用通过调用公共S3 bucket来证明的任何资源。但是,如果我自己创建一个S3 bucket(带有一些。csv文件的mybucket)并提供bucket策略 要被EC2用户调用,我会得到以下错误。 为什么我会得到这个400错误代码?