Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 通过HTTP从Cloudfront访问AmazonS3 我有一个S3的桶,作为静态网站服务 我有一个cloudfront发行版,指向bucket的HTTP端点 我想将对S3存储桶的访问限制为仅Cloudfront_Amazon Web Services_Amazon S3_Amazon Cloudfront - Fatal编程技术网

Amazon web services 通过HTTP从Cloudfront访问AmazonS3 我有一个S3的桶,作为静态网站服务 我有一个cloudfront发行版,指向bucket的HTTP端点 我想将对S3存储桶的访问限制为仅Cloudfront

Amazon web services 通过HTTP从Cloudfront访问AmazonS3 我有一个S3的桶,作为静态网站服务 我有一个cloudfront发行版,指向bucket的HTTP端点 我想将对S3存储桶的访问限制为仅Cloudfront,amazon-web-services,amazon-s3,amazon-cloudfront,Amazon Web Services,Amazon S3,Amazon Cloudfront,我想我可以通过添加Principal:arn:iam:cloudfront….来做到这一点 但这允许直接的S3访问,而不是HTTP端点访问 当我将Cloudfront配置为直接为S3 bucket提供服务时,它不会显示子目录index.htmls。为了访问mysite.com/blog/,我必须键入mysite.com/blog/index.html 出于这个原因,我必须使用S3的HTTP端点,就好像站点不在S3上,而是在Apache服务器上一样 现在我不能通过arn:iam:cloudfron

我想我可以通过添加Principal:arn:iam:cloudfront….来做到这一点

但这允许直接的S3访问,而不是HTTP端点访问

当我将Cloudfront配置为直接为S3 bucket提供服务时,它不会显示子目录index.htmls。为了访问mysite.com/blog/,我必须键入mysite.com/blog/index.html

出于这个原因,我必须使用S3的HTTP端点,就好像站点不在S3上,而是在Apache服务器上一样

现在我不能通过arn:iam:cloudfront限制访问。因为Cloudfront变成了另一个web爬虫,S3变成了另一个web服务器

他们建议添加自定义头,以便服务器理解它是cloudfront。但是S3不支持自定义头

将用户代理限制为CloudFront,将主体限制为AWS:*做了一个简短的工作,但并没有阻止用户代理欺骗


我怎样才能解决这个问题?

你试过这个方法吗

确保您的用户仅使用CloudFront访问您的对象 URL,无论URL是否已签名,都执行以下操作 任务:

创建一个源访问标识,它是一个特殊的CloudFront用户, 并将源访问标识与您的分发相关联。(用于 web分发,您可以将源访问标识与 因此,您可以保护全部或部分Amazon S3 还可以创建源访问标识并将其添加到 当您创建分发时,请创建您的分发

更改Amazon S3 bucket或上的权限 对象,因此只有原始访问标识已读取 权限(或读取和下载权限)。当您的用户访问 您的AmazonS3对象是通过CloudFront(CloudFront的起源)创建的 access identity代表用户获取对象。如果您的用户 通过使用AmazonS3URL直接请求对象,它们被拒绝 通道源访问标识具有访问中对象的权限 您的AmazonS3存储桶,但用户没有


根本不要将源代码配置为S3——将其配置为自定义源代码,然后使用bucket的网站端点主机名作为源代码服务器主机名

在这一点上,您应该能够配置CloudFront将发送到源站点的一个实例,而源站点恰好是bucket的web站点端点

用户代理
不在上,因此您应该能够在从CloudFront到S3的请求中发送自定义用户代理字符串(有点像静态密码),并将bucket配置为仅允许该自定义用户代理


理论上它仍然可能被欺骗,但由于它是您编造的一个随机字符串,除了您、S3和CloudFront之外,没有人知道该值,而且对于某些人来说,欺骗未知值是非常棘手的,特别是因为S3只是拒绝访问,没有任何解释。

是的,我添加了Principal-CanonicalUser值作为源访问标识,但它不起作用。我想这不起作用是因为我提到的原因。如果我将S3 bucket直接连接到CloudFront,它就会工作。但是我必须连接S3 bucket的URL,而不是bucket对象(由于子目录的问题)。非常感谢您,设置用户代理一些定制工作!解决了的。完整的教程可以在这里看到