如何为Amazon S3存储桶配置SSL

5hcedyr0  于 2023-10-19  发布在  其他
关注(0)|答案(8)|浏览(206)

我正在使用Amazon S3存储桶来使用我的.NET应用程序上传和下载数据。现在我的问题是我想使用SSL访问我的S3存储桶。是否可以为Amazon s3存储桶实施SSL?

zed5wv10

zed5wv101#

您可以通过SSL访问您的文件,如下所示:

https://s3.amazonaws.com/bucket_name/images/logo.gif

如果您为存储桶使用自定义域,则可以将S3和CloudFront与您自己的SSL证书一起使用(或通过Amazon Certificate Manager生成免费证书):http://aws.amazon.com/cloudfront/custom-ssl-domains/

yvgpqqbh

yvgpqqbh2#

自定义域SSL证书今天刚刚增加了$600/cert/月。在下面注册您的邀请:http://aws.amazon.com/cloudfront/custom-ssl-domains/

更新:SNI客户提供的证书现在可以免费获得。比600美元/月便宜得多,而且XP几乎被淘汰,它应该能很好地用于大多数用例。

@skalee AWS有一个机制来实现海报所要求的,“为Amazon s3 bucket实现SSL”,它被称为CloudFront。我阅读“实现”作为“使用我的SSL证书”,而不是“只是把一个S的HTTP URL,我相信OP可以猜测。
由于CloudFront的成本与S3完全相同(0.12美元/GB),但围绕SSL有大量的附加功能,并允许您添加自己的SNI证书而无需额外费用,因此它是在您的域上“实施SSL”的明显解决方案。

de90aj5v

de90aj5v3#

我发现你可以通过Cloud Flare服务轻松做到这一点。
设置一个存储桶,在存储桶上启用虚拟主机,并通过Cloudflare将所需的CNAME指向该端点。当然还要支付服务费但5 - 20美元对600美元更容易消化。
详细信息在这里:https://www.engaging.io/easy-way-to-configure-ssl-for-amazon-s3-bucket-via-cloudflare/

7ajki6be

7ajki6be4#

直接使用S3是不可能的,但您可以从您的存储桶创建Cloud Front分发。然后转到证书管理器并请求证书。亚马逊免费提供。如果您已成功确认认证,请将其分配给您的Cloud Front分发。还记得设置规则将http重定向到https。
我在Amazon S3上托管了几个静态网站,比如我的个人网站,我已经分配了SSL证书,因为他们有Cloud Front发行版。

e4yzc0pl

e4yzc0pl5#

如果你真的需要它,考虑重新定向。
例如,在请求assets.my-domain.example.com/path/to/file时,您可以执行301或302重定向到my-bucket-name.s3.amazonaws.com/path/to/files3.amazonaws.com/my-bucket-name/path/to/file(请记住,在第一种情况下,my-bucket-name不能包含任何点,否则它将不匹配S3证书中声明的*.s3.amazonaws.com, s3.amazonaws.com)。
没有测试过,但我相信它会工作。然而,我看到了一些陷阱。
第一个是非常明显的,一个额外的请求来获得这个重定向。我怀疑你可以使用域名注册商提供的重定向服务器-你必须以某种方式上传适当的证书-所以你必须使用自己的服务器。
第二个是,你可以在网页源代码中使用你的域名,但是当用户在单独的标签中打开图片时,地址栏将显示目标网址。

cygmwpex

cygmwpex6#

如前所述,您不能为S3存储桶创建免费证书。但是,您可以创建Cloud Front分发,然后为Cloud Front分配证书。您为您的域请求证书,然后只需在Cloud Front设置中将其分配给Cloud Front分发。我已经使用这种方法通过SSL服务静态网站以及服务静态文件。
对于静态网站创建亚马逊是去的地方。这是真正负担得起的获得一个静态网站与SSL。

nqwrtyyt

nqwrtyyt7#

将DNS/SSL添加到Amazon S3存储桶的最简单方法是使用CloudFlare worker!
我发现了这个多汁的小金块,它起了作用。
https://fershad.com/writing/proxy-aws-s3-content-cloudflare-workers/
注意,在主机名中使用正确的区域(即us-west-1、us-west-2)。
搞定了!

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event))
})

async function handleRequest(event) {
  let requestFolder = '/files'
  let s3Folder = '/'
  
  let url = new URL(event.request.url)
  const cache = caches.default

  let origPathname = url.pathname
  const filename = url.toString().split('/').pop()

  url.hostname = 'bucket-name.s3-us-west-2.amazonaws.com'
  url.pathname = origPathname.replace(new RegExp('^'+escapeRegExp(requestFolder)), s3Folder)

  response = await fetch(url)
  response = new Response(response.body, { ...response})

  return response;
}

function escapeRegExp(string) {  
  return string.replace(/[.*+?^${}()|[\]\\\/]/g, '\\$&');
}
6gpjuf90

6gpjuf908#

这可以使用NginxCertBot完成,如下所示:

**步骤1:**将NginxCertBot安装到您的服务器示例上,例如(Ec2或任何第三方)
**第二步:**在Nginx配置目录下创建文件

/etc/nginx/conf.d/your_file_name.conf
包含以下内容

server {
    listen 80;
    server_name subkeyword.yourdomain.com;

location / {

    proxy_pass http://your_bucket_name.s3-website.your_region.amazonaws.com;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}
}

**第三步:**执行以下命令,为您的子域创建证书

sudo certbot --nginx -d subkeyword.yourdomain.com

注:A record should be there for server IP in your domain hosted zone

相关问题