在s3简单使用文章中,简单的说道了s3的website功能。可以把s3的buckets当做一个静态网站来浏览,并做了一个简单的页面。
但是有2个问题没有解决。
1.域名问题。
像http://lixin.s3-website-ap-northeast-1.amazonaws.com/ 这么有长度的域名肯定不是友好的。如果你自己拥有一个域名,那么一定是希望弄个简单好记有意义的名字来访问。这时候你需要设置别名(cname)来访问。
2.访问权限问题。
之前文章的例子中,整站只有2个文件,我都是手动设置他们的属性为everyone可读。假使你的静态网站很多文件,那么手动设置不可能,得使用一个配置文件来全局设置才行。
首先,我在s3上新建了一个叫“lixin-log”的buckets,获得其地址http://lixin-log.s3-website-ap-northeast-1.amazonaws.com/ ,然后新建一个别名cname(log.lixin.me)指向这个地址,然后访问。发现以下错误。
404 Not Found
- Code: NoSuchBucket
- Message: The specified bucket does not exist
- BucketName: log.lixin.me
错误显示,找不到一个叫做“log.lixin.me”的buckets。确实,我只新建了一个叫“lixin-log”的buckets。
从错误提示中,我们可以知道,使用别名映射的时候,你的buckets的名字应该和别名一致。即我使用一个叫做“log.lixin.me”的域名来访问s3,那么在s3上的buckets的名字就应该叫做“log.lixin.me”。域名对应buckets名。
当域名和buckets名字问题解决后,再次浏览,之前的404错误页面没有了,取而代之的是403页面。
403 Forbidden
- Code: AccessDenied
- Message: Access Denied
没有权限访问。因为现在里面的文件都还是私有的,没有配置everyone可读。这里不再是手动一个个的设置,而是使用Policy文件来设置。
Policy是一个json文本,在buckets属性的Permission选项卡里。
{
"Id": "Policy1326378188459",
"Statement": [
{
"Sid": "Stmt1326378181469",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::s3.lixin.me/*",
"Principal": {
"AWS": [
"*"
]
}
}
]
}
上面就是一个简单的policy文件。大致意思就是,允许*所有用户具有读取s3.lixin.me这个buckets下的所有文件。这样就把整个buckets当作可读的静态网站了。